; LLVM IR from Rintarooo/VRPTW_ACO_Routing :: src/colony.ll (ZN6Colony9move_antsEv)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Node = type { i32, i32, i32, i32, i8, i32, i32, i32 }
%"struct.std::pair" = type { i32, i32 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.10" = type { ptr }
%class.Graph = type { ptr, i32, i32, ptr, ptr, ptr }
%class.Car = type { i32, i32, i32, i32, i32, %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl" }
%"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl" = type { %"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZN6Colony9thresholdE = external dso_local global double, align 8
@INFIN = external dso_local global double, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.1 = external hidden unnamed_addr constant [38 x i8], align 1

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Colony9move_antsEv(ptr noundef nonnull align 8 dereferenceable(56) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca %"class.std::vector.0", align 8
  %5 = alloca i32, align 4
  %6 = alloca %class.Node, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %class.Node, align 8
  %10 = alloca %"struct.std::pair", align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::vector.5", align 8
  %14 = alloca %"class.std::vector.5", align 8
  %15 = alloca %"class.std::vector.5", align 8
  %16 = alloca double, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"struct.std::pair", align 4
  %21 = alloca double, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %34 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #8
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %35

35:                                               ; preds = %373, %1
  %36 = call noundef zeroext i1 @_ZNK5Graph14is_all_visitedEv(ptr noundef nonnull align 8 dereferenceable(40) %34)
  %37 = xor i1 %36, true
  br i1 %37, label %38, label %375

38:                                               ; preds = %35
  %39 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  %41 = load i32, ptr %3, align 4, !tbaa !9
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds %class.Car, ptr %40, i64 %42
  %44 = getelementptr inbounds %class.Car, ptr %43, i32 0, i32 5
  %45 = call noundef zeroext i1 @_ZNKSt6vectorI4NodeSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %44) #8
  br i1 %45, label %46, label %57

46:                                               ; preds = %38
  %47 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %48 = load ptr, ptr %47, align 8, !tbaa !11
  %49 = load i32, ptr %3, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds %class.Car, ptr %48, i64 %50
  %52 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %53 = load ptr, ptr %52, align 8, !tbaa !13
  %54 = getelementptr inbounds %class.Node, ptr %53, i64 0
  %55 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 5
  %56 = load ptr, ptr %55, align 8, !tbaa !14
  call void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %51, ptr noundef %54, ptr noundef %56)
  br label %57

57:                                               ; preds = %46, %38
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #8
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  br label %58

58:                                               ; preds = %151, %57
  %59 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  br i1 %59, label %60, label %69

60:                                               ; preds = %58
  %61 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %62 = load ptr, ptr %61, align 8, !tbaa !11
  %63 = load i32, ptr %3, align 4, !tbaa !9
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds %class.Car, ptr %62, i64 %64
  %66 = getelementptr inbounds %class.Car, ptr %65, i32 0, i32 4
  %67 = load i32, ptr %66, align 8, !tbaa !15
  %68 = icmp sle i32 %67, 1200
  br label %69

69:                                               ; preds = %60, %58
  %70 = phi i1 [ false, %58 ], [ %68, %60 ]
  br i1 %70, label %71, label %152

71:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #8
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %136, %71
  %73 = load i32, ptr %5, align 4, !tbaa !9
  %74 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 2
  %75 = load i32, ptr %74, align 4, !tbaa !21
  %76 = icmp slt i32 %73, %75
  br i1 %76, label %78, label %77

77:                                               ; preds = %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #8
  br label %140

78:                                               ; preds = %72
  %79 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %80 = load ptr, ptr %79, align 8, !tbaa !13
  %81 = load i32, ptr %5, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds %class.Node, ptr %80, i64 %82
  %84 = getelementptr inbounds %class.Node, ptr %83, i32 0, i32 4
  %85 = load i8, ptr %84, align 4, !tbaa !22, !range !25, !noundef !26
  %86 = trunc i8 %85 to i1
  br i1 %86, label %135, label %87

87:                                               ; preds = %78
  %88 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %89 = load ptr, ptr %88, align 8, !tbaa !11
  %90 = load i32, ptr %3, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds %class.Car, ptr %89, i64 %91
  %93 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %94 = load ptr, ptr %93, align 8, !tbaa !13
  %95 = load i32, ptr %5, align 4, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds %class.Node, ptr %94, i64 %96
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %6, ptr align 4 %97, i64 32, i1 false), !tbaa.struct !27
  %98 = invoke noundef zeroext i1 @_ZNK3Car11ok_capacityE4Node(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef byval(%class.Node) align 8 %6)
          to label %99 unwind label %125

99:                                               ; preds = %87
  br i1 %98, label %100, label %134

100:                                              ; preds = %99
  %101 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %102 = load ptr, ptr %101, align 8, !tbaa !11
  %103 = load i32, ptr %3, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds %class.Car, ptr %102, i64 %104
  %106 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %107 = load ptr, ptr %106, align 8, !tbaa !13
  %108 = load i32, ptr %5, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds %class.Node, ptr %107, i64 %109
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %110, i64 32, i1 false), !tbaa.struct !27
  %111 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 5
  %112 = load ptr, ptr %111, align 8, !tbaa !14
  %113 = invoke noundef zeroext i1 @_ZNK3Car7ok_timeE4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %105, ptr noundef byval(%class.Node) align 8 %9, ptr noundef %112)
          to label %114 unwind label %125

114:                                              ; preds = %100
  br i1 %113, label %115, label %133

115:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %116 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %117 = load ptr, ptr %116, align 8, !tbaa !11
  %118 = load i32, ptr %3, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds %class.Car, ptr %117, i64 %119
  %121 = getelementptr inbounds %class.Car, ptr %120, i32 0, i32 2
  %122 = invoke i64 @_ZSt9make_pairIRiS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 4 dereferenceable(4) %121, ptr noundef nonnull align 4 dereferenceable(4) %5)
          to label %123 unwind label %129

123:                                              ; preds = %115
  store i64 %122, ptr %10, align 4
  invoke void @_ZNSt6vectorISt4pairIiiESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %10)
          to label %124 unwind label %129

124:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %133

125:                                              ; preds = %100, %87
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %7, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %8, align 4
  br label %139

129:                                              ; preds = %123, %115
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %7, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %139

133:                                              ; preds = %124, %114
  br label %134

134:                                              ; preds = %133, %99
  br label %135

135:                                              ; preds = %134, %78
  br label %136

136:                                              ; preds = %135
  %137 = load i32, ptr %5, align 4, !tbaa !9
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %5, align 4, !tbaa !9
  br label %72, !llvm.loop !29

139:                                              ; preds = %129, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #8
  br label %374

140:                                              ; preds = %77
  %141 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  br i1 %141, label %142, label %151

142:                                              ; preds = %140
  %143 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %144 = load ptr, ptr %143, align 8, !tbaa !11
  %145 = load i32, ptr %3, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds %class.Car, ptr %144, i64 %146
  %148 = getelementptr inbounds %class.Car, ptr %147, i32 0, i32 4
  %149 = load i32, ptr %148, align 8, !tbaa !15
  %150 = add nsw i32 %149, 30
  store i32 %150, ptr %148, align 8, !tbaa !15
  br label %151

151:                                              ; preds = %142, %140
  br label %58, !llvm.loop !31

152:                                              ; preds = %69
  %153 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  br i1 %153, label %154, label %194

154:                                              ; preds = %152
  %155 = load i32, ptr %3, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  %157 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 1
  %158 = load i32, ptr %157, align 8, !tbaa !32
  %159 = icmp slt i32 %156, %158
  br i1 %159, label %160, label %188

160:                                              ; preds = %154
  %161 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %162 = load ptr, ptr %161, align 8, !tbaa !11
  %163 = load i32, ptr %3, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds %class.Car, ptr %162, i64 %164
  %166 = getelementptr inbounds %class.Car, ptr %165, i32 0, i32 2
  %167 = load i32, ptr %166, align 8, !tbaa !33
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %169, label %185

169:                                              ; preds = %160
  %170 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %171 = load ptr, ptr %170, align 8, !tbaa !11
  %172 = load i32, ptr %3, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds %class.Car, ptr %171, i64 %173
  %175 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %176 = load ptr, ptr %175, align 8, !tbaa !13
  %177 = getelementptr inbounds %class.Node, ptr %176, i64 0
  %178 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 5
  %179 = load ptr, ptr %178, align 8, !tbaa !14
  invoke void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %174, ptr noundef %177, ptr noundef %179)
          to label %180 unwind label %181

180:                                              ; preds = %169
  br label %185

181:                                              ; preds = %190, %188, %169
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %7, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %8, align 4
  br label %374

185:                                              ; preds = %180, %160
  %186 = load i32, ptr %3, align 4, !tbaa !9
  %187 = add nsw i32 %186, 1
  store i32 %187, ptr %3, align 4, !tbaa !9
  br label %193

188:                                              ; preds = %154
  %189 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.1)
          to label %190 unwind label %181

190:                                              ; preds = %188
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %192 unwind label %181

192:                                              ; preds = %190
  store i32 3, ptr %11, align 4
  br label %371

193:                                              ; preds = %185
  br label %370

194:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %195 = invoke noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56) %34)
          to label %196 unwind label %207

196:                                              ; preds = %194
  %197 = load double, ptr @_ZN6Colony9thresholdE, align 8, !tbaa !34
  %198 = fcmp olt double %195, %197
  br i1 %198, label %199, label %211

199:                                              ; preds = %196
  %200 = call i32 @rand() #8
  %201 = sext i32 %200 to i64
  %202 = call noundef i64 @_ZNKSt6vectorISt4pairIiiESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  %203 = urem i64 %201, %202
  %204 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIiiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %203) #8
  %205 = getelementptr inbounds %"struct.std::pair", ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !36
  store i32 %206, ptr %12, align 4, !tbaa !9
  br label %352

207:                                              ; preds = %352, %194
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %7, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %8, align 4
  br label %369

211:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store double 0.000000e+00, ptr %16, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store ptr %4, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %212 = load ptr, ptr %17, align 8, !tbaa !5
  %213 = call ptr @_ZNSt6vectorISt4pairIiiESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %212) #8
  %214 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %18, i32 0, i32 0
  store ptr %213, ptr %214, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %215 = load ptr, ptr %17, align 8, !tbaa !5
  %216 = call ptr @_ZNSt6vectorISt4pairIiiESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %215) #8
  %217 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %216, ptr %217, align 8
  br label %218

218:                                              ; preds = %233, %211
  %219 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  br i1 %219, label %221, label %220

220:                                              ; preds = %218
  store i32 9, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %239

221:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %222 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %20, ptr align 4 %222, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %223 = getelementptr inbounds %"struct.std::pair", ptr %20, i32 0, i32 0
  %224 = load i32, ptr %223, align 4, !tbaa !38
  %225 = getelementptr inbounds %"struct.std::pair", ptr %20, i32 0, i32 1
  %226 = load i32, ptr %225, align 4, !tbaa !36
  %227 = invoke noundef double @_ZNK6Colony9calc_probEii(ptr noundef nonnull align 8 dereferenceable(56) %34, i32 noundef %224, i32 noundef %226)
          to label %228 unwind label %235

228:                                              ; preds = %221
  store double %227, ptr %21, align 8, !tbaa !34
  %229 = load double, ptr %21, align 8, !tbaa !34
  %230 = load double, ptr %16, align 8, !tbaa !34
  %231 = fadd double %230, %229
  store double %231, ptr %16, align 8, !tbaa !34
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %232 unwind label %235

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

233:                                              ; preds = %232
  %234 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  br label %218

235:                                              ; preds = %228, %221
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %7, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %351

239:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store ptr %13, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %240 = load ptr, ptr %22, align 8, !tbaa !5
  %241 = call ptr @_ZNSt6vectorIdSaIdEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %240) #8
  %242 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", ptr %23, i32 0, i32 0
  store ptr %241, ptr %242, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %243 = load ptr, ptr %22, align 8, !tbaa !5
  %244 = call ptr @_ZNSt6vectorIdSaIdEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %243) #8
  %245 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", ptr %24, i32 0, i32 0
  store ptr %244, ptr %245, align 8
  br label %246

246:                                              ; preds = %256, %239
  %247 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  br i1 %247, label %249, label %248

248:                                              ; preds = %246
  store i32 11, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %262

249:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %250 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  %251 = load double, ptr %250, align 8, !tbaa !34
  store double %251, ptr %25, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %252 = load double, ptr %25, align 8, !tbaa !34
  %253 = load double, ptr %16, align 8, !tbaa !34
  %254 = fdiv double %252, %253
  store double %254, ptr %26, align 8, !tbaa !34
  invoke void @_ZNSt6vectorIdSaIdEE9push_backEOd(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %255 unwind label %258

255:                                              ; preds = %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %256

256:                                              ; preds = %255
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  br label %246

258:                                              ; preds = %249
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %7, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %351

262:                                              ; preds = %248
  %263 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(8) %263)
          to label %264 unwind label %272

264:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %292, %264
  %266 = load i32, ptr %27, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  %269 = sub i64 %268, 1
  %270 = icmp ult i64 %267, %269
  br i1 %270, label %276, label %271

271:                                              ; preds = %265
  store i32 13, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %299

272:                                              ; preds = %262
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %7, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %8, align 4
  br label %351

276:                                              ; preds = %265
  %277 = load i32, ptr %27, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %278) #8
  %280 = load double, ptr %279, align 8, !tbaa !34
  %281 = load i32, ptr %27, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  %283 = sext i32 %282 to i64
  %284 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %283) #8
  %285 = load double, ptr %284, align 8, !tbaa !34
  %286 = fadd double %285, %280
  store double %286, ptr %284, align 8, !tbaa !34
  %287 = load i32, ptr %27, align 4, !tbaa !9
  %288 = add nsw i32 %287, 1
  %289 = sext i32 %288 to i64
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %289) #8
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(8) %290)
          to label %291 unwind label %295

291:                                              ; preds = %276
  br label %292

292:                                              ; preds = %291
  %293 = load i32, ptr %27, align 4, !tbaa !9
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %27, align 4, !tbaa !9
  br label %265, !llvm.loop !39

295:                                              ; preds = %276
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %7, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %351

299:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %300 = load double, ptr @INFIN, align 8, !tbaa !34
  store double %300, ptr %31, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %301 = invoke noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56) %34)
          to label %302 unwind label %309

302:                                              ; preds = %299
  store double %301, ptr %32, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %334, %302
  %304 = load i32, ptr %33, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %307 = icmp ult i64 %305, %306
  br i1 %307, label %313, label %308

308:                                              ; preds = %303
  store i32 16, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %337

309:                                              ; preds = %299
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %7, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %351

313:                                              ; preds = %303
  %314 = load double, ptr %32, align 8, !tbaa !34
  %315 = load i32, ptr %33, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %316) #8
  %318 = load double, ptr %317, align 8, !tbaa !34
  %319 = fcmp ole double %314, %318
  br i1 %319, label %320, label %333

320:                                              ; preds = %313
  %321 = load i32, ptr %33, align 4, !tbaa !9
  store i32 %321, ptr %28, align 4, !tbaa !9
  %322 = load i32, ptr %33, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %323) #8
  %325 = load double, ptr %324, align 8, !tbaa !34
  store double %325, ptr %30, align 8, !tbaa !34
  %326 = load double, ptr %30, align 8, !tbaa !34
  %327 = load double, ptr %31, align 8, !tbaa !34
  %328 = fcmp olt double %326, %327
  br i1 %328, label %329, label %332

329:                                              ; preds = %320
  %330 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %330, ptr %29, align 4, !tbaa !9
  %331 = load double, ptr %30, align 8, !tbaa !34
  store double %331, ptr %31, align 8, !tbaa !34
  br label %332

332:                                              ; preds = %329, %320
  br label %333

333:                                              ; preds = %332, %313
  br label %334

334:                                              ; preds = %333
  %335 = load i32, ptr %33, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %33, align 4, !tbaa !9
  br label %303, !llvm.loop !40

337:                                              ; preds = %308
  %338 = load double, ptr %31, align 8, !tbaa !34
  %339 = load double, ptr @INFIN, align 8, !tbaa !34
  %340 = fcmp oeq double %338, %339
  br i1 %340, label %341, label %342

341:                                              ; preds = %337
  store i32 3, ptr %11, align 4
  br label %348

342:                                              ; preds = %337
  %343 = load i32, ptr %29, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIiiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %344) #8
  %346 = getelementptr inbounds %"struct.std::pair", ptr %345, i32 0, i32 1
  %347 = load i32, ptr %346, align 4, !tbaa !36
  store i32 %347, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %11, align 4
  br label %348

348:                                              ; preds = %342, %341
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #8
  %349 = load i32, ptr %11, align 4
  switch i32 %349, label %366 [
    i32 0, label %350
  ]

350:                                              ; preds = %348
  br label %352

351:                                              ; preds = %309, %295, %272, %258, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #8
  br label %369

352:                                              ; preds = %350, %199
  %353 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %354 = load ptr, ptr %353, align 8, !tbaa !11
  %355 = load i32, ptr %3, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds %class.Car, ptr %354, i64 %356
  %358 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %359 = load ptr, ptr %358, align 8, !tbaa !13
  %360 = load i32, ptr %12, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds %class.Node, ptr %359, i64 %361
  %363 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 5
  %364 = load ptr, ptr %363, align 8, !tbaa !14
  invoke void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %357, ptr noundef %362, ptr noundef %364)
          to label %365 unwind label %207

365:                                              ; preds = %352
  store i32 0, ptr %11, align 4
  br label %366

366:                                              ; preds = %365, %348
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  %367 = load i32, ptr %11, align 4
  switch i32 %367, label %371 [
    i32 0, label %368
  ]

368:                                              ; preds = %366
  br label %370

369:                                              ; preds = %351, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  br label %374

370:                                              ; preds = %368, %193
  store i32 0, ptr %11, align 4
  br label %371

371:                                              ; preds = %370, %366, %192
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #8
  %372 = load i32, ptr %11, align 4
  switch i32 %372, label %401 [
    i32 0, label %373
    i32 3, label %375
  ]

373:                                              ; preds = %371
  br label %35, !llvm.loop !41

374:                                              ; preds = %369, %181, %139
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #8
  br label %396

375:                                              ; preds = %371, %35
  %376 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %377 = load ptr, ptr %376, align 8, !tbaa !11
  %378 = load i32, ptr %3, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds %class.Car, ptr %377, i64 %379
  %381 = getelementptr inbounds %class.Car, ptr %380, i32 0, i32 2
  %382 = load i32, ptr %381, align 8, !tbaa !33
  %383 = icmp ne i32 %382, 0
  br i1 %383, label %384, label %395

384:                                              ; preds = %375
  %385 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 3
  %386 = load ptr, ptr %385, align 8, !tbaa !11
  %387 = load i32, ptr %3, align 4, !tbaa !9
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds %class.Car, ptr %386, i64 %388
  %390 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 4
  %391 = load ptr, ptr %390, align 8, !tbaa !13
  %392 = getelementptr inbounds %class.Node, ptr %391, i64 0
  %393 = getelementptr inbounds %class.Graph, ptr %34, i32 0, i32 5
  %394 = load ptr, ptr %393, align 8, !tbaa !14
  call void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %389, ptr noundef %392, ptr noundef %394)
  br label %395

395:                                              ; preds = %384, %375
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #8
  ret void

396:                                              ; preds = %374
  %397 = load ptr, ptr %7, align 8
  %398 = load i32, ptr %8, align 4
  %399 = insertvalue { ptr, i32 } poison, ptr %397, 0
  %400 = insertvalue { ptr, i32 } %399, i32 %398, 1
  resume { ptr, i32 } %400

401:                                              ; preds = %371
  unreachable
}

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

declare i32 @__gxx_personality_v0(...)

declare noundef zeroext i1 @_ZNK5Graph14is_all_visitedEv(ptr noundef nonnull align 8 dereferenceable(40)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorI4NodeSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

declare void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

declare noundef zeroext i1 @_ZNK3Car11ok_capacityE4Node(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef byval(%class.Node) align 8) #3

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

declare noundef zeroext i1 @_ZNK3Car7ok_timeE4NodePPd(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef byval(%class.Node) align 8, ptr noundef) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRiS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56)) #2 align 2

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

; Function Attrs: nounwind
declare i32 @rand() #6

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK6Colony9calc_probEii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef) #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress 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 #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { 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 #8 = { 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, !6, i64 16}
!12 = !{!"_ZTS5Graph", !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32}
!13 = !{!12, !6, i64 24}
!14 = !{!12, !6, i64 32}
!15 = !{!16, !10, i64 16}
!16 = !{!"_ZTS3Car", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !17, i64 24}
!17 = !{!"_ZTSSt6vectorI4NodeSaIS0_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseI4NodeSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI4NodeSaIS0_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI4NodeSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!12, !10, i64 12}
!22 = !{!23, !24, i64 16}
!23 = !{!"_ZTS4Node", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !24, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!24 = !{!"bool", !7, i64 0}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 1, !28, i64 20, i64 4, !9, i64 24, i64 4, !9, i64 28, i64 4, !9}
!28 = !{!24, !24, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!12, !10, i64 8}
!33 = !{!16, !10, i64 8}
!34 = !{!35, !35, i64 0}
!35 = !{!"double", !7, i64 0}
!36 = !{!37, !10, i64 4}
!37 = !{!"_ZTSSt4pairIiiE", !10, i64 0, !10, i64 4}
!38 = !{!37, !10, i64 0}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}
!41 = distinct !{!41, !30}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Node = type { i32, i32, i32, i32, i8, i32, i32, i32 }
%"struct.std::pair" = type { i32, i32 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.10" = type { ptr }
%class.Car = type { i32, i32, i32, i32, i32, %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl" }
%"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl" = type { %"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Node, std::allocator<Node>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZN6Colony9thresholdE = external dso_local local_unnamed_addr global double, align 8
@INFIN = external dso_local local_unnamed_addr global double, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.1 = external hidden unnamed_addr constant [38 x i8], align 1

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Colony9move_antsEv(ptr noundef nonnull align 8 dereferenceable(56) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.0", align 8
  %3 = alloca i32, align 4
  %4 = alloca %class.Node, align 8
  %5 = alloca %class.Node, align 8
  %6 = alloca %"struct.std::pair", align 8
  %7 = alloca %"class.std::vector.5", align 8
  %8 = alloca %"class.std::vector.5", align 8
  %9 = alloca %"class.std::vector.5", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca double, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
  %15 = alloca double, align 8
  %16 = getelementptr inbounds i8, ptr %0, i64 16
  %17 = getelementptr inbounds i8, ptr %0, i64 24
  %18 = getelementptr inbounds i8, ptr %0, i64 32
  %19 = getelementptr inbounds i8, ptr %0, i64 12
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  br label %21

21:                                               ; preds = %191, %1
  %.064 = phi i32 [ undef, %1 ], [ %.569, %191 ]
  %.052 = phi i32 [ undef, %1 ], [ %.6, %191 ]
  %.045 = phi i32 [ 0, %1 ], [ %.2, %191 ]
  %22 = call noundef zeroext i1 @_ZNK5Graph14is_all_visitedEv(ptr noundef nonnull align 8 dereferenceable(40) %0)
  br i1 %22, label %.loopexit.loopexit, label %23

23:                                               ; preds = %21
  %24 = load ptr, ptr %16, align 8, !tbaa !5
  %25 = sext i32 %.045 to i64
  %26 = getelementptr inbounds %class.Car, ptr %24, i64 %25, i32 5
  %27 = call noundef zeroext i1 @_ZNKSt6vectorI4NodeSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  br i1 %27, label %28, label %33

28:                                               ; preds = %23
  %29 = load ptr, ptr %16, align 8, !tbaa !5
  %30 = getelementptr inbounds %class.Car, ptr %29, i64 %25
  %31 = load ptr, ptr %17, align 8, !tbaa !11
  %32 = load ptr, ptr %18, align 8, !tbaa !12
  call void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %30, ptr noundef %31, ptr noundef %32)
  br label %33

33:                                               ; preds = %28, %23
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #8
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  %34 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  br i1 %34, label %.lr.ph103, label %.critedge

.lr.ph103:                                        ; preds = %33, %85
  %35 = load ptr, ptr %16, align 8, !tbaa !5
  %36 = getelementptr inbounds %class.Car, ptr %35, i64 %25, i32 4
  %37 = load i32, ptr %36, align 8, !tbaa !13
  %38 = icmp slt i32 %37, 1201
  br i1 %38, label %39, label %.critedge

39:                                               ; preds = %.lr.ph103
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  store i32 1, ptr %3, align 4, !tbaa !19
  %40 = load i32, ptr %19, align 4, !tbaa !20
  %41 = icmp sgt i32 %40, 1
  br i1 %41, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %74, %39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  %42 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  br i1 %42, label %80, label %85

.lr.ph:                                           ; preds = %39, %74
  %storemerge101 = phi i32 [ %76, %74 ], [ 1, %39 ]
  %43 = load ptr, ptr %17, align 8, !tbaa !11
  %44 = sext i32 %storemerge101 to i64
  %45 = getelementptr inbounds %class.Node, ptr %43, i64 %44
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  %47 = load i8, ptr %46, align 4, !tbaa !21, !range !24, !noundef !25
  %48 = trunc nuw i8 %47 to i1
  br i1 %48, label %74, label %49

49:                                               ; preds = %.lr.ph
  %50 = load ptr, ptr %16, align 8, !tbaa !5
  %51 = getelementptr inbounds %class.Car, ptr %50, i64 %25
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 4 dereferenceable(32) %45, i64 32, i1 false), !tbaa.struct !26
  %52 = invoke noundef zeroext i1 @_ZNK3Car11ok_capacityE4Node(ptr noundef nonnull align 8 dereferenceable(48) %51, ptr noundef nonnull byval(%class.Node) align 8 %4)
          to label %53 unwind label %70

53:                                               ; preds = %49
  br i1 %52, label %54, label %74

54:                                               ; preds = %53
  %55 = load ptr, ptr %16, align 8, !tbaa !5
  %56 = getelementptr inbounds %class.Car, ptr %55, i64 %25
  %57 = load ptr, ptr %17, align 8, !tbaa !11
  %58 = load i32, ptr %3, align 4, !tbaa !19
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds %class.Node, ptr %57, i64 %59
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 4 dereferenceable(32) %60, i64 32, i1 false), !tbaa.struct !26
  %61 = load ptr, ptr %18, align 8, !tbaa !12
  %62 = invoke noundef zeroext i1 @_ZNK3Car7ok_timeE4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %56, ptr noundef nonnull byval(%class.Node) align 8 %5, ptr noundef %61)
          to label %63 unwind label %70

63:                                               ; preds = %54
  br i1 %62, label %64, label %74

64:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  %65 = load ptr, ptr %16, align 8, !tbaa !5
  %66 = getelementptr inbounds %class.Car, ptr %65, i64 %25, i32 2
  %67 = invoke i64 @_ZSt9make_pairIRiS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 4 dereferenceable(4) %66, ptr noundef nonnull align 4 dereferenceable(4) %3)
          to label %68 unwind label %72

68:                                               ; preds = %64
  store i64 %67, ptr %6, align 8
  invoke void @_ZNSt6vectorISt4pairIiiESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 4 dereferenceable(8) %6)
          to label %69 unwind label %72

69:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  br label %74

70:                                               ; preds = %54, %49
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %79

72:                                               ; preds = %68, %64
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  br label %79

74:                                               ; preds = %.lr.ph, %63, %69, %53
  %75 = load i32, ptr %3, align 4, !tbaa !19
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %3, align 4, !tbaa !19
  %77 = load i32, ptr %19, align 4, !tbaa !20
  %78 = icmp slt i32 %76, %77
  br i1 %78, label %.lr.ph, label %._crit_edge, !llvm.loop !28

79:                                               ; preds = %72, %70
  %.pn80 = phi { ptr, i32 } [ %73, %72 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %192

80:                                               ; preds = %._crit_edge
  %81 = load ptr, ptr %16, align 8, !tbaa !5
  %82 = getelementptr inbounds %class.Car, ptr %81, i64 %25, i32 4
  %83 = load i32, ptr %82, align 8, !tbaa !13
  %84 = add nsw i32 %83, 30
  store i32 %84, ptr %82, align 8, !tbaa !13
  br label %85

85:                                               ; preds = %80, %._crit_edge
  %86 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  br i1 %86, label %.lr.ph103, label %.critedge, !llvm.loop !30

.critedge:                                        ; preds = %.lr.ph103, %85, %33
  %87 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  br i1 %87, label %88, label %104

88:                                               ; preds = %.critedge
  %89 = add nsw i32 %.045, 1
  %90 = load i32, ptr %20, align 8, !tbaa !31
  %91 = icmp slt i32 %89, %90
  br i1 %91, label %92, label %100

92:                                               ; preds = %88
  %93 = load ptr, ptr %16, align 8, !tbaa !5
  %94 = getelementptr inbounds %class.Car, ptr %93, i64 %25
  %95 = getelementptr inbounds i8, ptr %94, i64 8
  %96 = load i32, ptr %95, align 8, !tbaa !32
  %.not = icmp eq i32 %96, 0
  br i1 %.not, label %191, label %97

97:                                               ; preds = %92
  %98 = load ptr, ptr %17, align 8, !tbaa !11
  %99 = load ptr, ptr %18, align 8, !tbaa !12
  invoke void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef %98, ptr noundef %99)
          to label %191 unwind label %.loopexit89

.loopexit89:                                      ; preds = %97
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %192

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

100:                                              ; preds = %88
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.1)
          to label %102 unwind label %.loopexit.split-lp

102:                                              ; preds = %100
  %103 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread unwind label %.loopexit.split-lp

.thread:                                          ; preds = %102
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #8
  br label %.loopexit

104:                                              ; preds = %.critedge
  %105 = invoke noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %106 unwind label %117

106:                                              ; preds = %104
  %107 = load double, ptr @_ZN6Colony9thresholdE, align 8, !tbaa !33
  %108 = fcmp olt double %105, %107
  br i1 %108, label %109, label %119

109:                                              ; preds = %106
  %110 = call i32 @rand() #8
  %111 = sext i32 %110 to i64
  %112 = call noundef i64 @_ZNKSt6vectorISt4pairIiiESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  %113 = urem i64 %111, %112
  %114 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIiiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %113) #8
  %115 = getelementptr inbounds i8, ptr %114, i64 4
  %116 = load i32, ptr %115, align 4, !tbaa !35
  br label %184

117:                                              ; preds = %184, %104
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %192

119:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #8
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %120 = call ptr @_ZNSt6vectorISt4pairIiiESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  store ptr %120, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %121 = call ptr @_ZNSt6vectorISt4pairIiiESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  store ptr %121, ptr %11, align 8
  %122 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br i1 %122, label %.lr.ph107, label %._crit_edge108

._crit_edge108:                                   ; preds = %128, %119
  %.070.lcssa = phi double [ 0.000000e+00, %119 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %123 = call ptr @_ZNSt6vectorIdSaIdEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  store ptr %123, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %124 = call ptr @_ZNSt6vectorIdSaIdEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  store ptr %124, ptr %14, align 8
  %125 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  br i1 %125, label %.lr.ph110, label %._crit_edge111

.lr.ph107:                                        ; preds = %119, %128
  %.070105 = phi double [ %129, %128 ], [ 0.000000e+00, %119 ]
  %126 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %.sroa.0.0.copyload = load i32, ptr %126, align 4
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %126, i64 4
  %.sroa.5.0.copyload = load i32, ptr %.sroa.5.0..sroa_idx, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  %127 = call noundef double @_ZNK6Colony9calc_probEii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.sroa.0.0.copyload, i32 noundef %.sroa.5.0.copyload)
  store double %127, ptr %12, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %128 unwind label %132

128:                                              ; preds = %.lr.ph107
  %129 = fadd double %.070105, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %131 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br i1 %131, label %.lr.ph107, label %._crit_edge108

132:                                              ; preds = %.lr.ph107
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %183

._crit_edge111:                                   ; preds = %138, %._crit_edge108
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %.preheader88 unwind label %150

.lr.ph110:                                        ; preds = %._crit_edge108, %138
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  %136 = load double, ptr %135, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %137 = fdiv double %136, %.070.lcssa
  store double %137, ptr %15, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIdSaIdEE9push_backEOd(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %138 unwind label %141

138:                                              ; preds = %.lr.ph110
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  %140 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  br i1 %140, label %.lr.ph110, label %._crit_edge111

141:                                              ; preds = %.lr.ph110
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  br label %183

.preheader88:                                     ; preds = %._crit_edge111, %152
  %indvars.iv = phi i64 [ %indvars.iv.next, %152 ], [ 0, %._crit_edge111 ]
  %143 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  %144 = add i64 %143, -1
  %145 = icmp ugt i64 %144, %indvars.iv
  br i1 %145, label %152, label %146

146:                                              ; preds = %.preheader88
  %147 = load double, ptr @INFIN, align 8, !tbaa !33
  %148 = invoke noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %.preheader unwind label %163

.preheader:                                       ; preds = %146
  %149 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  %.not119 = icmp eq i64 %149, 0
  br i1 %.not119, label %._crit_edge116, label %.lr.ph115

150:                                              ; preds = %._crit_edge111
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %183

152:                                              ; preds = %.preheader88
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv) #8
  %154 = load double, ptr %153, align 8, !tbaa !33
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv.next) #8
  %156 = load double, ptr %155, align 8, !tbaa !33
  %157 = fadd double %154, %156
  store double %157, ptr %155, align 8, !tbaa !33
  %158 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv.next) #8
  invoke void @_ZNSt6vectorIdSaIdEE9push_backERKd(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %.preheader88 unwind label %159, !llvm.loop !37

159:                                              ; preds = %152
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %183

._crit_edge116:                                   ; preds = %174, %.preheader
  %.153.lcssa = phi i32 [ %.052, %.preheader ], [ %.254, %174 ]
  %.046.lcssa = phi double [ %147, %.preheader ], [ %.147, %174 ]
  %161 = load double, ptr @INFIN, align 8, !tbaa !33
  %162 = fcmp une double %.046.lcssa, %161
  br i1 %162, label %177, label %182

163:                                              ; preds = %146
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %183

.lr.ph115:                                        ; preds = %.preheader, %174
  %indvars.iv131 = phi i64 [ %indvars.iv.next132, %174 ], [ 0, %.preheader ]
  %.046113 = phi double [ %.147, %174 ], [ %147, %.preheader ]
  %.153112 = phi i32 [ %.254, %174 ], [ %.052, %.preheader ]
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv131) #8
  %166 = load double, ptr %165, align 8, !tbaa !33
  %167 = fcmp ugt double %148, %166
  br i1 %167, label %174, label %168

168:                                              ; preds = %.lr.ph115
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv131) #8
  %170 = load double, ptr %169, align 8, !tbaa !33
  %171 = fcmp olt double %170, %.046113
  br i1 %171, label %172, label %174

172:                                              ; preds = %168
  %173 = trunc nuw nsw i64 %indvars.iv131 to i32
  br label %174

174:                                              ; preds = %.lr.ph115, %172, %168
  %.254 = phi i32 [ %173, %172 ], [ %.153112, %168 ], [ %.153112, %.lr.ph115 ]
  %.147 = phi double [ %170, %172 ], [ %.046113, %168 ], [ %.046113, %.lr.ph115 ]
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 1
  %175 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  %176 = icmp ugt i64 %175, %indvars.iv.next132
  br i1 %176, label %.lr.ph115, label %._crit_edge116, !llvm.loop !38

177:                                              ; preds = %._crit_edge116
  %178 = sext i32 %.153.lcssa to i64
  %179 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorISt4pairIiiESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %178) #8
  %180 = getelementptr inbounds i8, ptr %179, i64 4
  %181 = load i32, ptr %180, align 4, !tbaa !35
  br label %182

182:                                              ; preds = %._crit_edge116, %177
  %.165 = phi i32 [ %181, %177 ], [ %.064, %._crit_edge116 ]
  %.061 = phi i32 [ 0, %177 ], [ 3, %._crit_edge116 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  br i1 %162, label %184, label %191

183:                                              ; preds = %163, %159, %150, %141, %132
  %.pn = phi { ptr, i32 } [ %133, %132 ], [ %142, %141 ], [ %160, %159 ], [ %164, %163 ], [ %151, %150 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  br label %192

184:                                              ; preds = %182, %109
  %.266 = phi i32 [ %116, %109 ], [ %.165, %182 ]
  %.355 = phi i32 [ %.052, %109 ], [ %.153.lcssa, %182 ]
  %185 = load ptr, ptr %16, align 8, !tbaa !5
  %186 = getelementptr inbounds %class.Car, ptr %185, i64 %25
  %187 = load ptr, ptr %17, align 8, !tbaa !11
  %188 = sext i32 %.266 to i64
  %189 = getelementptr inbounds %class.Node, ptr %187, i64 %188
  %190 = load ptr, ptr %18, align 8, !tbaa !12
  invoke void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %186, ptr noundef %189, ptr noundef %190)
          to label %191 unwind label %117

191:                                              ; preds = %182, %184, %97, %92
  %.569 = phi i32 [ %.064, %97 ], [ %.064, %92 ], [ %.165, %182 ], [ %.266, %184 ]
  %.263 = phi i32 [ 0, %97 ], [ 0, %92 ], [ %.061, %182 ], [ 0, %184 ]
  %.6 = phi i32 [ %.052, %97 ], [ %.052, %92 ], [ %.153.lcssa, %182 ], [ %.355, %184 ]
  %.2 = phi i32 [ %89, %97 ], [ %89, %92 ], [ %.045, %182 ], [ %.045, %184 ]
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #8
  %switch = icmp eq i32 %.263, 0
  br i1 %switch, label %21, label %.loopexit.loopexit

192:                                              ; preds = %.loopexit89, %.loopexit.split-lp, %117, %183, %79
  %.pn80.pn = phi { ptr, i32 } [ %.pn80, %79 ], [ %118, %117 ], [ %.pn, %183 ], [ %lpad.loopexit, %.loopexit89 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #8
  resume { ptr, i32 } %.pn80.pn

.loopexit.loopexit:                               ; preds = %21, %191
  %.3.ph = phi i32 [ %.2, %191 ], [ %.045, %21 ]
  %.pre = sext i32 %.3.ph to i64
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.thread
  %.pre-phi = phi i64 [ %.pre, %.loopexit.loopexit ], [ %25, %.thread ]
  %193 = load ptr, ptr %16, align 8, !tbaa !5
  %194 = getelementptr inbounds %class.Car, ptr %193, i64 %.pre-phi
  %195 = getelementptr inbounds i8, ptr %194, i64 8
  %196 = load i32, ptr %195, align 8, !tbaa !32
  %.not79 = icmp eq i32 %196, 0
  br i1 %.not79, label %200, label %197

197:                                              ; preds = %.loopexit
  %198 = load ptr, ptr %17, align 8, !tbaa !11
  %199 = load ptr, ptr %18, align 8, !tbaa !12
  call void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48) %194, ptr noundef %198, ptr noundef %199)
  br label %200

200:                                              ; preds = %197, %.loopexit
  ret void
}

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

declare i32 @__gxx_personality_v0(...)

declare noundef zeroext i1 @_ZNK5Graph14is_all_visitedEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorI4NodeSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

declare void @_ZN3Car8add_nodeEP4NodePPd(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

declare noundef zeroext i1 @_ZNK3Car11ok_capacityE4Node(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef byval(%class.Node) align 8) local_unnamed_addr #3

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

declare noundef zeroext i1 @_ZNK3Car7ok_timeE4NodePPd(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef byval(%class.Node) align 8, ptr noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRiS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZNK6Colony8get_randEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #2 align 2

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

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #6

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK6Colony9calc_probEii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { 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 #8 = { 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, !10, i64 16}
!6 = !{!"_ZTS5Graph", !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24, !10, i64 32}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 24}
!12 = !{!6, !10, i64 32}
!13 = !{!14, !7, i64 16}
!14 = !{!"_ZTS3Car", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !15, i64 24}
!15 = !{!"_ZTSSt6vectorI4NodeSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI4NodeSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI4NodeSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI4NodeSaIS0_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!19 = !{!7, !7, i64 0}
!20 = !{!6, !7, i64 12}
!21 = !{!22, !23, i64 16}
!22 = !{!"_ZTS4Node", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !23, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!23 = !{!"bool", !8, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{i64 0, i64 4, !19, i64 4, i64 4, !19, i64 8, i64 4, !19, i64 12, i64 4, !19, i64 16, i64 1, !27, i64 20, i64 4, !19, i64 24, i64 4, !19, i64 28, i64 4, !19}
!27 = !{!23, !23, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{!6, !7, i64 8}
!32 = !{!14, !7, i64 8}
!33 = !{!34, !34, i64 0}
!34 = !{!"double", !8, i64 0}
!35 = !{!36, !7, i64 4}
!36 = !{!"_ZTSSt4pairIiiE", !7, i64 0, !7, i64 4}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !29}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass