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

; 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.DSNetwork = type { %class.Unit, i32, i32, i32, %"class.std::map", %"class.std::map.3", ptr }
%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>, DSwitch *>, std::_Select1st<std::pair<const std::pair<int, int>, DSwitch *>>, std::less<std::pair<int, int>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::pair<int, int>, std::pair<const std::pair<int, int>, DSwitch *>, std::_Select1st<std::pair<const std::pair<int, int>, DSwitch *>>, 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::map.3" = type { %"class.std::_Rb_tree.4" }
%"class.std::_Rb_tree.4" = 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" }

@_ZTV9DSNetwork = external dso_local unnamed_addr constant { [6 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__._ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection = external hidden unnamed_addr constant [76 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %1, ptr noundef %2, ptr noundef byval(%class.Config) align 8 %3, i32 noundef %4, ptr noundef %5) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca ptr, align 8
  %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 i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator", align 1
  %23 = alloca ptr, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %class.Config, align 8
  %26 = alloca i1, align 1
  %27 = alloca %"struct.std::pair", align 4
  %28 = alloca %"struct.std::pair", align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca %"struct.std::pair", align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %4, ptr %10, align 4, !tbaa !9
  store ptr %5, ptr %11, align 8, !tbaa !5
  %35 = load ptr, ptr %7, align 8
  %36 = load i32, ptr %8, align 4, !tbaa !9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %2)
  invoke void @_ZN4UnitC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(48) %35, i32 noundef %36, ptr noundef %12)
          to label %37 unwind label %51

37:                                               ; preds = %6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  store ptr getelementptr inbounds inrange(-16, 32) ({ [6 x ptr] }, ptr @_ZTV9DSNetwork, i32 0, i32 0, i32 2), ptr %35, align 8, !tbaa !11
  %38 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 4
  call void @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #9
  %39 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 5
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %39) #9
  %40 = load i32, ptr %10, align 4, !tbaa !9
  %41 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 1
  store i32 %40, ptr %41, align 8, !tbaa !13
  %42 = getelementptr inbounds %class.Config, ptr %3, i32 0, i32 2
  %43 = getelementptr inbounds %class.DSwitchConfig, ptr %42, i32 0, i32 3
  %44 = load i32, ptr %43, align 4, !tbaa !30
  %45 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 2
  store i32 %44, ptr %45, align 4, !tbaa !44
  %46 = load i32, ptr %10, align 4, !tbaa !9
  %47 = invoke noundef zeroext i1 @_Z10ispowerof2j(i32 noundef %46)
          to label %48 unwind label %55

48:                                               ; preds = %37
  br i1 %47, label %49, label %50

49:                                               ; preds = %48
  br label %60

50:                                               ; preds = %48
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 16, ptr noundef @__PRETTY_FUNCTION__._ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection) #10
  unreachable

51:                                               ; preds = %6
  %52 = landingpad { ptr, i32 }
          cleanup
  %53 = extractvalue { ptr, i32 } %52, 0
  store ptr %53, ptr %13, align 8
  %54 = extractvalue { ptr, i32 } %52, 1
  store i32 %54, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  br label %226

55:                                               ; preds = %37
  %56 = landingpad { ptr, i32 }
          cleanup
  %57 = extractvalue { ptr, i32 } %56, 0
  store ptr %57, ptr %13, align 8
  %58 = extractvalue { ptr, i32 } %56, 1
  store i32 %58, ptr %14, align 4
  br label %225

59:                                               ; No predecessors!
  br label %60

60:                                               ; preds = %59, %49
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 6
  store ptr %61, ptr %62, align 8, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %63 = load i32, ptr %10, align 4, !tbaa !9
  %64 = invoke noundef double @_ZSt5log10IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %63)
          to label %65 unwind label %78

65:                                               ; preds = %60
  %66 = invoke noundef double @_ZSt5log10IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef 2)
          to label %67 unwind label %78

67:                                               ; preds = %65
  %68 = fdiv double %64, %66
  %69 = fptosi double %68 to i32
  store i32 %69, ptr %15, align 4, !tbaa !9
  %70 = load i32, ptr %15, align 4, !tbaa !9
  %71 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 3
  store i32 %70, ptr %71, align 8, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 1, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %220, %67
  %73 = load i32, ptr %18, align 4, !tbaa !9
  %74 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 3
  %75 = load i32, ptr %74, align 8, !tbaa !46
  %76 = icmp slt i32 %73, %75
  br i1 %76, label %82, label %77

77:                                               ; preds = %72
  store i32 2, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %223

78:                                               ; preds = %65, %60
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %13, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %14, align 4
  br label %224

82:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %83

83:                                               ; preds = %211, %82
  %84 = load i32, ptr %20, align 4, !tbaa !9
  %85 = load i32, ptr %16, align 4, !tbaa !9
  %86 = icmp slt i32 %84, %85
  br i1 %86, label %88, label %87

87:                                               ; preds = %83
  store i32 5, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %217

88:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  %89 = load i32, ptr %17, align 4, !tbaa !9
  %90 = zext i32 %89 to i64
  %91 = getelementptr inbounds i8, ptr @.str.2, i64 %90
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef %91, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %92 unwind label %113

92:                                               ; preds = %88
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %93 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 184) #11
          to label %94 unwind label %117

94:                                               ; preds = %92
  store i1 true, ptr %26, align 1
  %95 = load i32, ptr %17, align 4, !tbaa !9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %96 unwind label %121

96:                                               ; preds = %94
  %97 = load i32, ptr %18, align 4, !tbaa !9
  %98 = load i32, ptr %20, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 8 %3, i64 160, i1 false), !tbaa.struct !47
  %99 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 1
  %100 = load i32, ptr %99, align 8, !tbaa !13
  invoke void @_ZN7DSwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Configj(ptr noundef nonnull align 8 dereferenceable(184) %93, i32 noundef %95, ptr noundef %24, i32 noundef %97, i32 noundef %98, ptr noundef byval(%class.Config) align 8 %25, i32 noundef %100)
          to label %101 unwind label %125

101:                                              ; preds = %96
  store i1 false, ptr %26, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  store ptr %93, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  invoke void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %27, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %102 unwind label %133

102:                                              ; preds = %101
  %103 = load ptr, ptr %23, align 8, !tbaa !5
  %104 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 4
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %104, ptr noundef nonnull align 4 dereferenceable(8) %27)
          to label %106 unwind label %133

106:                                              ; preds = %102
  store ptr %103, ptr %105, align 8, !tbaa !5
  %107 = load i32, ptr %18, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 0
  br i1 %108, label %109, label %137

109:                                              ; preds = %106
  %110 = load ptr, ptr %23, align 8, !tbaa !5
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %110, ptr noundef %111)
          to label %112 unwind label %133

112:                                              ; preds = %109
  br label %157

113:                                              ; preds = %88
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %13, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  br label %216

117:                                              ; preds = %92
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %13, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %14, align 4
  br label %215

121:                                              ; preds = %94
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %13, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %14, align 4
  br label %129

125:                                              ; preds = %96
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %13, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #9
  br label %129

129:                                              ; preds = %125, %121
  %130 = load i1, ptr %26, align 1
  br i1 %130, label %131, label %132

131:                                              ; preds = %129
  call void @_ZdlPvm(ptr noundef %93, i64 noundef 184) #12
  br label %132

132:                                              ; preds = %131, %129
  br label %215

133:                                              ; preds = %109, %102, %101
  %134 = landingpad { ptr, i32 }
          cleanup
  %135 = extractvalue { ptr, i32 } %134, 0
  store ptr %135, ptr %13, align 8
  %136 = extractvalue { ptr, i32 } %134, 1
  store i32 %136, ptr %14, align 4
  br label %214

137:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %138 = load i32, ptr %18, align 4, !tbaa !9
  %139 = sub nsw i32 %138, 1
  store i32 %139, ptr %29, align 4, !tbaa !9
  invoke void @_ZNSt4pairIiiEC2IiRiTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %28, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %140 unwind label %148

140:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %141 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 5
  %142 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %141, ptr noundef nonnull align 4 dereferenceable(8) %28)
          to label %143 unwind label %152

143:                                              ; preds = %140
  %144 = load ptr, ptr %142, align 8, !tbaa !5
  store ptr %144, ptr %30, align 8, !tbaa !5
  %145 = load ptr, ptr %23, align 8, !tbaa !5
  %146 = load ptr, ptr %30, align 8, !tbaa !5
  invoke void @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %145, ptr noundef %146)
          to label %147 unwind label %152

147:                                              ; preds = %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %157

148:                                              ; preds = %137
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %13, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %156

152:                                              ; preds = %143, %140
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %13, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %156

156:                                              ; preds = %152, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %214

157:                                              ; preds = %147, %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %158

158:                                              ; preds = %204, %157
  %159 = load i32, ptr %31, align 4, !tbaa !9
  %160 = icmp slt i32 %159, 2
  br i1 %160, label %162, label %161

161:                                              ; preds = %158
  store i32 8, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %208

162:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %163 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 64) #11
          to label %164 unwind label %183

164:                                              ; preds = %162
  %165 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 2
  %166 = load i32, ptr %165, align 4, !tbaa !44
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %163, i32 noundef %166)
          to label %167 unwind label %187

167:                                              ; preds = %164
  store ptr %163, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  %168 = load i32, ptr %20, align 4, !tbaa !9
  %169 = mul nsw i32 %168, 2
  %170 = load i32, ptr %31, align 4, !tbaa !9
  %171 = add nsw i32 %169, %170
  store i32 %171, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  invoke void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS4_S5_EEEbE4typeELb1EEEOS4_OS5_(ptr noundef nonnull align 4 dereferenceable(8) %34, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %172 unwind label %191

172:                                              ; preds = %167
  %173 = load ptr, ptr %32, align 8, !tbaa !5
  %174 = getelementptr inbounds %class.DSNetwork, ptr %35, i32 0, i32 5
  %175 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %174, ptr noundef nonnull align 4 dereferenceable(8) %34)
          to label %176 unwind label %191

176:                                              ; preds = %172
  store ptr %173, ptr %175, align 8, !tbaa !5
  %177 = load i32, ptr %31, align 4, !tbaa !9
  %178 = icmp eq i32 %177, 0
  br i1 %178, label %179, label %195

179:                                              ; preds = %176
  %180 = load ptr, ptr %23, align 8, !tbaa !5
  %181 = load ptr, ptr %32, align 8, !tbaa !5
  invoke void @_ZN7DSwitch17setLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %180, ptr noundef %181)
          to label %182 unwind label %191

182:                                              ; preds = %179
  br label %203

183:                                              ; preds = %162
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %13, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %14, align 4
  br label %207

187:                                              ; preds = %164
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %13, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %14, align 4
  call void @_ZdlPvm(ptr noundef %163, i64 noundef 64) #12
  br label %207

191:                                              ; preds = %198, %179, %172, %167
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %13, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %207

195:                                              ; preds = %176
  %196 = load i32, ptr %31, align 4, !tbaa !9
  %197 = icmp eq i32 %196, 1
  br i1 %197, label %198, label %202

198:                                              ; preds = %195
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = load ptr, ptr %32, align 8, !tbaa !5
  invoke void @_ZN7DSwitch18setRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %199, ptr noundef %200)
          to label %201 unwind label %191

201:                                              ; preds = %198
  br label %202

202:                                              ; preds = %201, %195
  br label %203

203:                                              ; preds = %202, %182
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %204

204:                                              ; preds = %203
  %205 = load i32, ptr %31, align 4, !tbaa !9
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %31, align 4, !tbaa !9
  br label %158, !llvm.loop !52

207:                                              ; preds = %191, %187, %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %214

208:                                              ; preds = %161
  %209 = load i32, ptr %17, align 4, !tbaa !9
  %210 = add i32 %209, 1
  store i32 %210, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  br label %211

211:                                              ; preds = %208
  %212 = load i32, ptr %20, align 4, !tbaa !9
  %213 = add nsw i32 %212, 1
  store i32 %213, ptr %20, align 4, !tbaa !9
  br label %83, !llvm.loop !54

214:                                              ; preds = %207, %156, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %215

215:                                              ; preds = %214, %132, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  br label %216

216:                                              ; preds = %215, %113
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %224

217:                                              ; preds = %87
  %218 = load i32, ptr %16, align 4, !tbaa !9
  %219 = mul nsw i32 %218, 2
  store i32 %219, ptr %16, align 4, !tbaa !9
  br label %220

220:                                              ; preds = %217
  %221 = load i32, ptr %18, align 4, !tbaa !9
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr %18, align 4, !tbaa !9
  br label %72, !llvm.loop !55

223:                                              ; preds = %77
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  ret void

224:                                              ; preds = %216, %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %225

225:                                              ; preds = %224, %55
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %39) #9
  call void @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %38) #9
  call void @_ZN4UnitD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #9
  br label %226

226:                                              ; preds = %225, %51
  %227 = load ptr, ptr %13, align 8
  %228 = load i32, ptr %14, align 4
  %229 = insertvalue { ptr, i32 } poison, ptr %227, 0
  %230 = insertvalue { ptr, i32 } %229, i32 %228, 1
  resume { ptr, i32 } %230
}

; 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 @_ZN4UnitC2EjNSt7__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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_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 @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 align 2

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

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

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

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

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

; 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) #4

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

; 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) #7

declare void @_ZN7DSwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Configj(ptr noundef nonnull align 8 dereferenceable(184), i32 noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef byval(%class.Config) align 8, i32 noundef) 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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(8)) #0 align 2

declare void @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) #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 @_ZN7DSwitch17setLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) #2

declare void @_ZN7DSwitch18setRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) #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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_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 #5 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 = { 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 #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = !{!14, !10, i64 48}
!14 = !{!"_ZTS9DSNetwork", !15, i64 0, !10, i64 48, !10, i64 52, !10, i64 56, !19, i64 64, !27, i64 112, !6, i64 160}
!15 = !{!"_ZTS4Unit", !10, i64 8, !16, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"_ZTSSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEE", !20, i64 0}
!20 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P7DSwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !21, i64 0}
!21 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P7DSwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !22, i64 0, !24, i64 8}
!22 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEE", !23, i64 0}
!23 = !{!"_ZTSSt4lessISt4pairIiiEE"}
!24 = !{!"_ZTSSt15_Rb_tree_header", !25, i64 0, !18, i64 32}
!25 = !{!"_ZTSSt18_Rb_tree_node_base", !26, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!26 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!27 = !{!"_ZTSSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEE", !28, i64 0}
!28 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !29, i64 0}
!29 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !22, i64 0, !24, i64 8}
!30 = !{!31, !10, i64 20}
!31 = !{!"_ZTS6Config", !10, i64 0, !32, i64 4, !33, i64 8, !34, i64 24, !36, i64 40, !37, i64 64, !39, i64 72, !40, i64 96, !41, i64 104}
!32 = !{!"_ZTS15DSNetworkConfig", !10, i64 0}
!33 = !{!"_ZTS13DSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!34 = !{!"_ZTS15MSNetworkConfig", !35, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!35 = !{!"_ZTS19MultiplierNetwork_t", !7, i64 0}
!36 = !{!"_ZTS13MSwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!37 = !{!"_ZTS15ASNetworkConfig", !38, i64 0, !10, i64 4}
!38 = !{!"_ZTS15ReduceNetwork_t", !7, i64 0}
!39 = !{!"_ZTS13ASwitchConfig", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!40 = !{!"_ZTS17LookUpTableConfig", !10, i64 0, !10, i64 4}
!41 = !{!"_ZTS14SDMemoryConfig", !42, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !43, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52}
!42 = !{!"_ZTS18MemoryController_t", !7, i64 0}
!43 = !{!"_ZTS17MemoryHierarchy_t", !7, i64 0}
!44 = !{!14, !10, i64 52}
!45 = !{!14, !6, i64 160}
!46 = !{!14, !10, i64 56}
!47 = !{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, !48, 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, !49, 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, !50, 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, !51, 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}
!48 = !{!35, !35, i64 0}
!49 = !{!38, !38, i64 0}
!50 = !{!42, !42, i64 0}
!51 = !{!43, !43, i64 0}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}
!54 = distinct !{!54, !53}
!55 = distinct !{!55, !53}


; 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 }

@_ZTV9DSNetwork = external dso_local unnamed_addr constant { [6 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__._ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection = external hidden unnamed_addr constant [76 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection(ptr noundef nonnull align 8 dereferenceable(168) %0, i32 noundef %1, ptr noundef nonnull %2, ptr nocapture noundef readonly byval(%class.Config) align 8 %3, i32 noundef %4, ptr noundef %5) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator", align 1
  %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 i32, align 4
  %17 = alloca %"struct.std::pair", align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %2)
  invoke void @_ZN4UnitC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(48) %0, i32 noundef %1, ptr noundef nonnull %7)
          to label %18 unwind label %28

18:                                               ; preds = %6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  store ptr getelementptr inbounds inrange(-16, 32) (i8, ptr @_ZTV9DSNetwork, i64 16), ptr %0, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #8
  %20 = getelementptr inbounds i8, ptr %0, i64 112
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #8
  %21 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 %4, ptr %21, align 8, !tbaa !8
  %22 = getelementptr inbounds i8, ptr %3, i64 20
  %23 = load i32, ptr %22, align 4, !tbaa !28
  %24 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 %23, ptr %24, align 4, !tbaa !42
  %25 = invoke noundef zeroext i1 @_Z10ispowerof2j(i32 noundef %4)
          to label %26 unwind label %30

26:                                               ; preds = %18
  br i1 %25, label %32, label %27

27:                                               ; preds = %26
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 16, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9DSNetworkC2EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6ConfigjP10Connection) #9
  unreachable

28:                                               ; preds = %6
  %29 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %116

30:                                               ; preds = %18
  %31 = landingpad { ptr, i32 }
          cleanup
  br label %115

32:                                               ; preds = %26
  %33 = getelementptr inbounds i8, ptr %0, i64 160
  store ptr %5, ptr %33, align 8, !tbaa !43
  %34 = call noundef double @_ZSt5log10IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %4)
  %35 = call noundef double @_ZSt5log10IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef 2)
  %36 = fdiv double %34, %35
  %37 = fptosi double %36 to i32
  %38 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 %37, ptr %38, align 8, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  store i32 0, ptr %8, align 4, !tbaa !45
  %39 = icmp sgt i32 %37, 0
  br i1 %39, label %.lr.ph71, label %._crit_edge72

._crit_edge72:                                    ; preds = %._crit_edge, %32
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  ret void

.lr.ph71:                                         ; preds = %32, %._crit_edge
  %40 = phi i32 [ %43, %._crit_edge ], [ %37, %32 ]
  %41 = phi i32 [ %46, %._crit_edge ], [ 0, %32 ]
  %.03769 = phi i32 [ %45, %._crit_edge ], [ 1, %32 ]
  %.03868 = phi i32 [ %.139.lcssa, %._crit_edge ], [ 0, %32 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  store i32 0, ptr %9, align 4, !tbaa !45
  %42 = icmp sgt i32 %.03769, 0
  br i1 %42, label %.lr.ph, label %._crit_edge

._crit_edge.loopexit:                             ; preds = %107
  %.pre = load i32, ptr %8, align 4, !tbaa !45
  %.pre86 = load i32, ptr %38, align 8, !tbaa !44
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.lr.ph71
  %43 = phi i32 [ %40, %.lr.ph71 ], [ %.pre86, %._crit_edge.loopexit ]
  %44 = phi i32 [ %41, %.lr.ph71 ], [ %.pre, %._crit_edge.loopexit ]
  %.139.lcssa = phi i32 [ %.03868, %.lr.ph71 ], [ %108, %._crit_edge.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  %45 = shl nsw i32 %.03769, 1
  %46 = add nsw i32 %44, 1
  store i32 %46, ptr %8, align 4, !tbaa !45
  %47 = icmp slt i32 %46, %43
  br i1 %47, label %.lr.ph71, label %._crit_edge72, !llvm.loop !46

.lr.ph:                                           ; preds = %.lr.ph71, %107
  %.13967 = phi i32 [ %108, %107 ], [ %.03868, %.lr.ph71 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  %48 = zext i32 %.13967 to i64
  %49 = getelementptr inbounds i8, ptr @.str.2, i64 %48
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull %49, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %50 unwind label %63

50:                                               ; preds = %.lr.ph
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  %51 = invoke noalias noundef nonnull dereferenceable(184) ptr @_Znwm(i64 noundef 184) #10
          to label %52 unwind label %65

52:                                               ; preds = %50
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %53 unwind label %67

53:                                               ; preds = %52
  %54 = load i32, ptr %8, align 4, !tbaa !45
  %55 = load i32, ptr %9, align 4, !tbaa !45
  %56 = load i32, ptr %21, align 8, !tbaa !8
  invoke void @_ZN7DSwitchC1EjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj6Configj(ptr noundef nonnull align 8 dereferenceable(184) %51, i32 noundef %.13967, ptr noundef nonnull %12, i32 noundef %54, i32 noundef %55, ptr noundef nonnull byval(%class.Config) align 8 %3, i32 noundef %56)
          to label %57 unwind label %69

57:                                               ; preds = %53
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  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) %8, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %58 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %19, ptr noundef nonnull align 4 dereferenceable(8) %13)
          to label %59 unwind label %72

59:                                               ; preds = %57
  store ptr %51, ptr %58, align 8, !tbaa !48
  %60 = load i32, ptr %8, align 4, !tbaa !45
  %61 = icmp eq i32 %60, 0
  br i1 %61, label %62, label %74

62:                                               ; preds = %59
  invoke void @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %51, ptr noundef %5)
          to label %82 unwind label %72

63:                                               ; preds = %.lr.ph
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  br label %114

65:                                               ; preds = %50
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %113

67:                                               ; preds = %52
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %71

69:                                               ; preds = %53
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  br label %71

71:                                               ; preds = %67, %69
  %.pn = phi { ptr, i32 } [ %70, %69 ], [ %68, %67 ]
  call void @_ZdlPvm(ptr noundef nonnull %51, i64 noundef 184) #11
  br label %113

72:                                               ; preds = %62, %57
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %112

74:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  %75 = add nsw i32 %60, -1
  store i32 %75, ptr %15, align 4, !tbaa !45
  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) %9)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %20, ptr noundef nonnull align 4 dereferenceable(8) %14)
          to label %77 unwind label %80

77:                                               ; preds = %74
  %78 = load ptr, ptr %76, align 8, !tbaa !48
  invoke void @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %51, ptr noundef %78)
          to label %79 unwind label %80

79:                                               ; preds = %77
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  br label %82

80:                                               ; preds = %77, %74
  %81 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  br label %112

82:                                               ; preds = %62, %79
  %83 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #10
          to label %84 unwind label %91

84:                                               ; preds = %82
  %85 = load i32, ptr %24, align 4, !tbaa !42
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %83, i32 noundef %85)
          to label %86 unwind label %93

86:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  %87 = load i32, ptr %9, align 4, !tbaa !45
  %88 = shl nsw i32 %87, 1
  store i32 %88, ptr %16, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_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) %8, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %20, ptr noundef nonnull align 4 dereferenceable(8) %17)
          to label %90 unwind label %95

90:                                               ; preds = %86
  store ptr %83, ptr %89, align 8, !tbaa !48
  invoke void @_ZN7DSwitch17setLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %51, ptr noundef nonnull %83)
          to label %97 unwind label %95

91:                                               ; preds = %97, %82
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %112

93:                                               ; preds = %99, %84
  %.lcssa = phi ptr [ %83, %84 ], [ %98, %99 ]
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %.lcssa, i64 noundef 64) #11
  br label %112

95:                                               ; preds = %106, %101, %90, %86
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  br label %112

97:                                               ; preds = %90
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  %98 = invoke noalias noundef nonnull dereferenceable(64) ptr @_Znwm(i64 noundef 64) #10
          to label %99 unwind label %91

99:                                               ; preds = %97
  %100 = load i32, ptr %24, align 4, !tbaa !42
  invoke void @_ZN10ConnectionC1Ei(ptr noundef nonnull align 8 dereferenceable(64) %98, i32 noundef %100)
          to label %101 unwind label %93

101:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  %102 = load i32, ptr %9, align 4, !tbaa !45
  %103 = shl nsw i32 %102, 1
  %104 = or disjoint i32 %103, 1
  store i32 %104, ptr %16, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  call void @_ZNSt4pairIiiEC2IRiS2_TnNSt9enable_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) %8, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEixERS6_(ptr noundef nonnull align 8 dereferenceable(48) %20, ptr noundef nonnull align 4 dereferenceable(8) %17)
          to label %106 unwind label %95

106:                                              ; preds = %101
  store ptr %98, ptr %105, align 8, !tbaa !48
  invoke void @_ZN7DSwitch18setRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184) %51, ptr noundef nonnull %98)
          to label %107 unwind label %95

107:                                              ; preds = %106
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  %108 = add i32 %.13967, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  %109 = load i32, ptr %9, align 4, !tbaa !45
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr %9, align 4, !tbaa !45
  %111 = icmp slt i32 %110, %.03769
  br i1 %111, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !49

112:                                              ; preds = %91, %93, %95, %80, %72
  %.pn42.pn = phi { ptr, i32 } [ %73, %72 ], [ %81, %80 ], [ %96, %95 ], [ %94, %93 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  br label %113

113:                                              ; preds = %71, %112, %65
  %.pn42.pn.pn = phi { ptr, i32 } [ %.pn42.pn, %112 ], [ %.pn, %71 ], [ %66, %65 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  br label %114

114:                                              ; preds = %113, %63
  %.pn42.pn.pn.pn = phi { ptr, i32 } [ %.pn42.pn.pn, %113 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  br label %115

115:                                              ; preds = %114, %30
  %.pn42.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn42.pn.pn.pn, %114 ], [ %31, %30 ]
  call void @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #8
  call void @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #8
  call void @_ZN4UnitD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #8
  br label %116

116:                                              ; preds = %115, %28
  %.pn42.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn42.pn.pn.pn.pn, %115 ], [ %29, %28 ]
  resume { ptr, i32 } %.pn42.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 @_ZN4UnitC2EjNSt7__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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_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 @_ZNSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 align 2

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 #3

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

; 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 #5

; 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 #5

; 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) #4

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

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

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

; 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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_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 @_ZN7DSwitch18setInputConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) local_unnamed_addr #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 @_ZN7DSwitch17setLeftConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) local_unnamed_addr #2

declare void @_ZN7DSwitch18setRightConnectionEP10Connection(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef) local_unnamed_addr #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 @_ZNSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_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 #5 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 = { 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 #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { 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 = !{!9, !11, i64 48}
!9 = !{!"_ZTS9DSNetwork", !10, i64 0, !11, i64 48, !11, i64 52, !11, i64 56, !17, i64 64, !25, i64 112, !15, i64 160}
!10 = !{!"_ZTS4Unit", !11, i64 8, !13, i64 16}
!11 = !{!"int", !12, i64 0}
!12 = !{!"omnipotent char", !7, i64 0}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !16, i64 8, !12, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !15, i64 0}
!15 = !{!"any pointer", !12, i64 0}
!16 = !{!"long", !12, i64 0}
!17 = !{!"_ZTSSt3mapISt4pairIiiEP7DSwitchSt4lessIS1_ESaIS0_IKS1_S3_EEE", !18, i64 0}
!18 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P7DSwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !19, i64 0}
!19 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P7DSwitchESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !20, i64 0, !22, i64 8}
!20 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEE", !21, i64 0}
!21 = !{!"_ZTSSt4lessISt4pairIiiEE"}
!22 = !{!"_ZTSSt15_Rb_tree_header", !23, i64 0, !16, i64 32}
!23 = !{!"_ZTSSt18_Rb_tree_node_base", !24, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!24 = !{!"_ZTSSt14_Rb_tree_color", !12, i64 0}
!25 = !{!"_ZTSSt3mapISt4pairIiiEP10ConnectionSt4lessIS1_ESaIS0_IKS1_S3_EEE", !26, i64 0}
!26 = !{!"_ZTSSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE", !27, i64 0}
!27 = !{!"_ZTSNSt8_Rb_treeISt4pairIiiES0_IKS1_P10ConnectionESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE13_Rb_tree_implIS9_Lb1EEE", !20, i64 0, !22, i64 8}
!28 = !{!29, !11, i64 20}
!29 = !{!"_ZTS6Config", !11, i64 0, !30, i64 4, !31, i64 8, !32, i64 24, !34, i64 40, !35, i64 64, !37, i64 72, !38, i64 96, !39, i64 104}
!30 = !{!"_ZTS15DSNetworkConfig", !11, i64 0}
!31 = !{!"_ZTS13DSwitchConfig", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!32 = !{!"_ZTS15MSNetworkConfig", !33, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!33 = !{!"_ZTS19MultiplierNetwork_t", !12, i64 0}
!34 = !{!"_ZTS13MSwitchConfig", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20}
!35 = !{!"_ZTS15ASNetworkConfig", !36, i64 0, !11, i64 4}
!36 = !{!"_ZTS15ReduceNetwork_t", !12, i64 0}
!37 = !{!"_ZTS13ASwitchConfig", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20}
!38 = !{!"_ZTS17LookUpTableConfig", !11, i64 0, !11, i64 4}
!39 = !{!"_ZTS14SDMemoryConfig", !40, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !41, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52}
!40 = !{!"_ZTS18MemoryController_t", !12, i64 0}
!41 = !{!"_ZTS17MemoryHierarchy_t", !12, i64 0}
!42 = !{!9, !11, i64 52}
!43 = !{!9, !15, i64 160}
!44 = !{!9, !11, i64 56}
!45 = !{!11, !11, i64 0}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = !{!15, !15, i64 0}
!49 = distinct !{!49, !47}


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