; LLVM IR from SOHNE/Dura2D :: src/kinetics/d2World.ll (ZN7d2World4StepEfi)

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

%struct.d2Vec2 = type { float, float }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl" }
%"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl" = type { %"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl_data" }
%"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::pair<d2Body *, d2Body *>, std::allocator<std::pair<d2Body *, d2Body *>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::pair<d2Body *, d2Body *>, std::allocator<std::pair<d2Body *, d2Body *>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"struct.std::_List_iterator" = type { ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl" }
%"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl" = type { %"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl_data" }
%"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.d2PenetrationConstraint = type { %class.d2Constraint, %struct.d2MatMN, %struct.d2VecN, float, %struct.d2Vec2, float }
%class.d2Constraint = type { ptr, ptr, ptr, %struct.d2Vec2, %struct.d2Vec2, ptr, ptr }
%struct.d2MatMN = type { i32, i32, ptr }
%struct.d2VecN = type { i32, ptr }
%"class.__gnu_cxx::__normal_iterator.13" = type { ptr }
%class.d2World = type { %struct.d2Vec2, ptr, %class.d2BlockAllocator, ptr, i32, ptr, i32, ptr }
%class.d2BlockAllocator = type { ptr, i32, i32, [14 x ptr] }
%class.d2Body = type <{ i16, [2 x i8], i32, %struct.d2Transform, %struct.d2Vec2, %struct.d2Vec2, float, float, float, %struct.d2Vec2, float, float, float, float, float, float, float, ptr, ptr, ptr, ptr, ptr, float, [4 x i8] }>
%struct.d2Transform = type { %struct.d2Vec2, %struct.d2Rot }
%struct.d2Rot = type { float, float }
%"struct.std::pair" = type { ptr, ptr }
%struct.d2Contact = type <{ ptr, ptr, %struct.d2Vec2, %struct.d2Vec2, %struct.d2Vec2, float, [4 x i8] }>

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

declare <2 x float> @_ZNK6d2Vec2mlEf(ptr noundef nonnull align 4 dereferenceable(8), float noundef) #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7d2World4StepEfi(ptr noundef nonnull align 8 dereferenceable(184) %0, float noundef %1, i32 noundef %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca float, align 4
  %9 = alloca %struct.d2Vec2, align 4
  %10 = alloca %"class.std::vector.3", align 8
  %11 = alloca %"class.std::__cxx11::list", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"struct.std::_List_iterator", align 8
  %16 = alloca %"struct.std::_List_iterator", align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::vector.8", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %class.d2PenetrationConstraint, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store float %1, ptr %5, align 4, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !11
  %44 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %45 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 3
  %46 = load ptr, ptr %45, align 8, !tbaa !13
  store ptr %46, ptr %7, align 8, !tbaa !5
  br label %47

47:                                               ; preds = %73, %3
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %51, label %50

50:                                               ; preds = %47
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  br label %77

51:                                               ; preds = %47
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds %class.d2Body, ptr %52, i32 0, i32 2
  %54 = load i32, ptr %53, align 4, !tbaa !17
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %56, label %57

56:                                               ; preds = %51
  br label %73

57:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = getelementptr inbounds %class.d2Body, ptr %58, i32 0, i32 11
  %60 = load float, ptr %59, align 8, !tbaa !23
  %61 = fmul float %60, 5.000000e+01
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %class.d2Body, ptr %62, i32 0, i32 6
  %64 = load float, ptr %63, align 8, !tbaa !24
  %65 = fmul float %61, %64
  store float %65, ptr %8, align 4, !tbaa !9
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %67 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 0
  %68 = load float, ptr %8, align 4, !tbaa !9
  %69 = call <2 x float> @_ZNK6d2Vec2mlEf(ptr noundef nonnull align 4 dereferenceable(8) %67, float noundef %68)
  store <2 x float> %69, ptr %9, align 4
  call void @_ZN6d2Body8AddForceERK6d2Vec2(ptr noundef nonnull align 8 dereferenceable(132) %66, ptr noundef nonnull align 4 dereferenceable(8) %9)
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = load float, ptr %5, align 4, !tbaa !9
  call void @_ZN6d2Body15IntegrateForcesEf(ptr noundef nonnull align 8 dereferenceable(132) %70, float noundef %71)
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN6d2Body11ComputeAABBEv(ptr noundef nonnull align 8 dereferenceable(132) %72)
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %73

73:                                               ; preds = %57, %56
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %class.d2Body, ptr %74, i32 0, i32 21
  %76 = load ptr, ptr %75, align 8, !tbaa !25
  store ptr %76, ptr %7, align 8, !tbaa !5
  br label %47, !llvm.loop !26

77:                                               ; preds = %50
  %78 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 1
  %79 = load ptr, ptr %78, align 8, !tbaa !28
  %80 = load ptr, ptr %79, align 8, !tbaa !29
  %81 = getelementptr inbounds ptr, ptr %80, i64 4
  %82 = load ptr, ptr %81, align 8
  call void %82(ptr noundef nonnull align 8 dereferenceable(8) %79)
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #6
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #6
  call void @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  %83 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 1
  %84 = load ptr, ptr %83, align 8, !tbaa !28
  %85 = load ptr, ptr %84, align 8, !tbaa !29
  %86 = getelementptr inbounds ptr, ptr %85, i64 5
  %87 = load ptr, ptr %86, align 8
  %88 = invoke noundef nonnull align 8 dereferenceable(24) ptr %87(ptr noundef nonnull align 8 dereferenceable(8) %84)
          to label %89 unwind label %101

89:                                               ; preds = %77
  %90 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EEaSERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %88)
          to label %91 unwind label %101

91:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  store ptr %11, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  %93 = call ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #6
  %94 = getelementptr inbounds %"struct.std::_List_iterator", ptr %15, i32 0, i32 0
  store ptr %93, ptr %94, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %95 = load ptr, ptr %14, align 8, !tbaa !5
  %96 = call ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %95) #6
  %97 = getelementptr inbounds %"struct.std::_List_iterator", ptr %16, i32 0, i32 0
  store ptr %96, ptr %97, align 8
  br label %98

98:                                               ; preds = %166, %91
  %99 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt4pairIP6d2BodyS2_EES6_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #6
  br i1 %99, label %105, label %100

100:                                              ; preds = %98
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %169

101:                                              ; preds = %89, %77
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %12, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %13, align 4
  br label %176

105:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %106 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorISt4pairIP6d2BodyS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  store ptr %106, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.std::pair", ptr %107, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !31
  store ptr %109, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.std::pair", ptr %110, i32 0, i32 1
  %112 = load ptr, ptr %111, align 8, !tbaa !33
  store ptr %112, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #6
  call void @_ZNSt6vectorI9d2ContactSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  %113 = load ptr, ptr %19, align 8, !tbaa !5
  %114 = load ptr, ptr %20, align 8, !tbaa !5
  %115 = invoke noundef zeroext i1 @_ZN20d2CollisionDetection11IsCollidingEP6d2BodyS1_RSt6vectorI9d2ContactSaIS3_EE(ptr noundef %113, ptr noundef %114, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %116 unwind label %118

116:                                              ; preds = %105
  br i1 %115, label %122, label %117

117:                                              ; preds = %116
  store i32 6, ptr %17, align 4
  br label %160

118:                                              ; preds = %105
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %12, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %13, align 4
  br label %168

122:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  store ptr %21, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %123 = load ptr, ptr %22, align 8, !tbaa !5
  %124 = call ptr @_ZNSt6vectorI9d2ContactSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %123) #6
  %125 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %23, i32 0, i32 0
  store ptr %124, ptr %125, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %126 = load ptr, ptr %22, align 8, !tbaa !5
  %127 = call ptr @_ZNSt6vectorI9d2ContactSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %126) #6
  %128 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %24, i32 0, i32 0
  store ptr %127, ptr %128, align 8
  br label %129

129:                                              ; preds = %148, %122
  %130 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9d2ContactSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #6
  br i1 %130, label %132, label %131

131:                                              ; preds = %129
  store i32 7, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %159

132:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %133 = call noundef nonnull align 8 dereferenceable(44) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9d2ContactSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #6
  store ptr %133, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 104, ptr %26) #6
  %134 = load ptr, ptr %25, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.d2Contact, ptr %134, i32 0, i32 0
  %136 = load ptr, ptr %135, align 8, !tbaa !34
  %137 = load ptr, ptr %25, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.d2Contact, ptr %137, i32 0, i32 1
  %139 = load ptr, ptr %138, align 8, !tbaa !36
  %140 = load ptr, ptr %25, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.d2Contact, ptr %140, i32 0, i32 2
  %142 = load ptr, ptr %25, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.d2Contact, ptr %142, i32 0, i32 3
  %144 = load ptr, ptr %25, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.d2Contact, ptr %144, i32 0, i32 4
  invoke void @_ZN23d2PenetrationConstraintC1EP6d2BodyS1_RK6d2Vec2S4_S4_(ptr noundef nonnull align 8 dereferenceable(104) %26, ptr noundef %136, ptr noundef %139, ptr noundef nonnull align 4 dereferenceable(8) %141, ptr noundef nonnull align 4 dereferenceable(8) %143, ptr noundef nonnull align 4 dereferenceable(8) %145)
          to label %146 unwind label %150

146:                                              ; preds = %132
  invoke void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(104) %26)
          to label %147 unwind label %154

147:                                              ; preds = %146
  call void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %26) #6
  call void @llvm.lifetime.end.p0(i64 104, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  br label %148

148:                                              ; preds = %147
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9d2ContactSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #6
  br label %129

150:                                              ; preds = %132
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %12, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %13, align 4
  br label %158

154:                                              ; preds = %146
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %12, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %13, align 4
  call void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %26) #6
  br label %158

158:                                              ; preds = %154, %150
  call void @llvm.lifetime.end.p0(i64 104, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %168

159:                                              ; preds = %131
  store i32 0, ptr %17, align 4
  br label %160

160:                                              ; preds = %159, %117
  call void @_ZNSt6vectorI9d2ContactSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  %161 = load i32, ptr %17, align 4
  switch i32 %161, label %163 [
    i32 0, label %162
  ]

162:                                              ; preds = %160
  store i32 0, ptr %17, align 4
  br label %163

163:                                              ; preds = %162, %160
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %164 = load i32, ptr %17, align 4
  switch i32 %164, label %347 [
    i32 0, label %165
    i32 6, label %166
  ]

165:                                              ; preds = %163
  br label %166

166:                                              ; preds = %165, %163
  %167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt4pairIP6d2BodyS2_EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  br label %98

168:                                              ; preds = %158, %118
  call void @_ZNSt6vectorI9d2ContactSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %176

169:                                              ; preds = %100
  call void @_ZNSt7__cxx1110_List_baseISt4pairIP6d2BodyS3_ESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %170 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 5
  %171 = load ptr, ptr %170, align 8, !tbaa !37
  store ptr %171, ptr %27, align 8, !tbaa !5
  br label %172

172:                                              ; preds = %187, %169
  %173 = load ptr, ptr %27, align 8, !tbaa !5
  %174 = icmp ne ptr %173, null
  br i1 %174, label %177, label %175

175:                                              ; preds = %172
  store i32 9, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %192

176:                                              ; preds = %168, %101
  call void @_ZNSt7__cxx1110_List_baseISt4pairIP6d2BodyS3_ESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  br label %341

177:                                              ; preds = %172
  %178 = load ptr, ptr %27, align 8, !tbaa !5
  %179 = load float, ptr %5, align 4, !tbaa !9
  %180 = load ptr, ptr %178, align 8, !tbaa !29
  %181 = getelementptr inbounds ptr, ptr %180, i64 2
  %182 = load ptr, ptr %181, align 8
  invoke void %182(ptr noundef nonnull align 8 dereferenceable(56) %178, float noundef %179)
          to label %183 unwind label %188

183:                                              ; preds = %177
  br label %184

184:                                              ; preds = %183
  %185 = load ptr, ptr %27, align 8, !tbaa !5
  %186 = invoke noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %185)
          to label %187 unwind label %188

187:                                              ; preds = %184
  store ptr %186, ptr %27, align 8, !tbaa !5
  br label %172, !llvm.loop !38

188:                                              ; preds = %184, %177
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %12, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %341

192:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  store ptr %10, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %193 = load ptr, ptr %28, align 8, !tbaa !5
  %194 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %193) #6
  %195 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %29, i32 0, i32 0
  store ptr %194, ptr %195, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %196 = load ptr, ptr %28, align 8, !tbaa !5
  %197 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %196) #6
  %198 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %30, i32 0, i32 0
  store ptr %197, ptr %198, align 8
  br label %199

199:                                              ; preds = %210, %192
  %200 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  br i1 %200, label %202, label %201

201:                                              ; preds = %199
  store i32 12, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %216

202:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %203 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  store ptr %203, ptr %31, align 8, !tbaa !5
  %204 = load ptr, ptr %31, align 8, !tbaa !5
  %205 = load float, ptr %5, align 4, !tbaa !9
  %206 = load ptr, ptr %204, align 8, !tbaa !29
  %207 = getelementptr inbounds ptr, ptr %206, i64 2
  %208 = load ptr, ptr %207, align 8
  invoke void %208(ptr noundef nonnull align 8 dereferenceable(104) %204, float noundef %205)
          to label %209 unwind label %212

209:                                              ; preds = %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %210

210:                                              ; preds = %209
  %211 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  br label %199

212:                                              ; preds = %202
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %12, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %341

216:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %217

217:                                              ; preds = %267, %216
  %218 = load i32, ptr %32, align 4, !tbaa !11
  %219 = load i32, ptr %6, align 4, !tbaa !11
  %220 = icmp slt i32 %218, %219
  br i1 %220, label %222, label %221

221:                                              ; preds = %217
  store i32 14, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %271

222:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %223 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 5
  %224 = load ptr, ptr %223, align 8, !tbaa !37
  store ptr %224, ptr %33, align 8, !tbaa !5
  br label %225

225:                                              ; preds = %238, %222
  %226 = load ptr, ptr %33, align 8, !tbaa !5
  %227 = icmp ne ptr %226, null
  br i1 %227, label %229, label %228

228:                                              ; preds = %225
  store i32 17, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %243

229:                                              ; preds = %225
  %230 = load ptr, ptr %33, align 8, !tbaa !5
  %231 = load ptr, ptr %230, align 8, !tbaa !29
  %232 = getelementptr inbounds ptr, ptr %231, i64 3
  %233 = load ptr, ptr %232, align 8
  invoke void %233(ptr noundef nonnull align 8 dereferenceable(56) %230)
          to label %234 unwind label %239

234:                                              ; preds = %229
  br label %235

235:                                              ; preds = %234
  %236 = load ptr, ptr %33, align 8, !tbaa !5
  %237 = invoke noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %236)
          to label %238 unwind label %239

238:                                              ; preds = %235
  store ptr %237, ptr %33, align 8, !tbaa !5
  br label %225, !llvm.loop !39

239:                                              ; preds = %235, %229
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %12, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %270

243:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store ptr %10, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %244 = load ptr, ptr %34, align 8, !tbaa !5
  %245 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %244) #6
  %246 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %35, i32 0, i32 0
  store ptr %245, ptr %246, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %247 = load ptr, ptr %34, align 8, !tbaa !5
  %248 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %247) #6
  %249 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %36, i32 0, i32 0
  store ptr %248, ptr %249, align 8
  br label %250

250:                                              ; preds = %260, %243
  %251 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #6
  br i1 %251, label %253, label %252

252:                                              ; preds = %250
  store i32 20, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %266

253:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %254 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #6
  store ptr %254, ptr %37, align 8, !tbaa !5
  %255 = load ptr, ptr %37, align 8, !tbaa !5
  %256 = load ptr, ptr %255, align 8, !tbaa !29
  %257 = getelementptr inbounds ptr, ptr %256, i64 3
  %258 = load ptr, ptr %257, align 8
  invoke void %258(ptr noundef nonnull align 8 dereferenceable(104) %255)
          to label %259 unwind label %262

259:                                              ; preds = %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %260

260:                                              ; preds = %259
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #6
  br label %250

262:                                              ; preds = %253
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %12, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %270

266:                                              ; preds = %252
  br label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %32, align 4, !tbaa !11
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %32, align 4, !tbaa !11
  br label %217, !llvm.loop !40

270:                                              ; preds = %262, %239
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %341

271:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %272 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 5
  %273 = load ptr, ptr %272, align 8, !tbaa !37
  store ptr %273, ptr %38, align 8, !tbaa !5
  br label %274

274:                                              ; preds = %287, %271
  %275 = load ptr, ptr %38, align 8, !tbaa !5
  %276 = icmp ne ptr %275, null
  br i1 %276, label %278, label %277

277:                                              ; preds = %274
  store i32 22, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %292

278:                                              ; preds = %274
  %279 = load ptr, ptr %38, align 8, !tbaa !5
  %280 = load ptr, ptr %279, align 8, !tbaa !29
  %281 = getelementptr inbounds ptr, ptr %280, i64 4
  %282 = load ptr, ptr %281, align 8
  invoke void %282(ptr noundef nonnull align 8 dereferenceable(56) %279)
          to label %283 unwind label %288

283:                                              ; preds = %278
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr %38, align 8, !tbaa !5
  %286 = invoke noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %285)
          to label %287 unwind label %288

287:                                              ; preds = %284
  store ptr %286, ptr %38, align 8, !tbaa !5
  br label %274, !llvm.loop !41

288:                                              ; preds = %284, %278
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %12, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %341

292:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  store ptr %10, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %293 = load ptr, ptr %39, align 8, !tbaa !5
  %294 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %293) #6
  %295 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %40, i32 0, i32 0
  store ptr %294, ptr %295, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %296 = load ptr, ptr %39, align 8, !tbaa !5
  %297 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %296) #6
  %298 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.13", ptr %41, i32 0, i32 0
  store ptr %297, ptr %298, align 8
  br label %299

299:                                              ; preds = %309, %292
  %300 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #6
  br i1 %300, label %302, label %301

301:                                              ; preds = %299
  store i32 25, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %315

302:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %303 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #6
  store ptr %303, ptr %42, align 8, !tbaa !5
  %304 = load ptr, ptr %42, align 8, !tbaa !5
  %305 = load ptr, ptr %304, align 8, !tbaa !29
  %306 = getelementptr inbounds ptr, ptr %305, i64 4
  %307 = load ptr, ptr %306, align 8
  invoke void %307(ptr noundef nonnull align 8 dereferenceable(104) %304)
          to label %308 unwind label %311

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

309:                                              ; preds = %308
  %310 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #6
  br label %299

311:                                              ; preds = %302
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %12, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %341

315:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %316 = getelementptr inbounds %class.d2World, ptr %44, i32 0, i32 3
  %317 = load ptr, ptr %316, align 8, !tbaa !13
  store ptr %317, ptr %43, align 8, !tbaa !5
  br label %318

318:                                              ; preds = %332, %315
  %319 = load ptr, ptr %43, align 8, !tbaa !5
  %320 = icmp ne ptr %319, null
  br i1 %320, label %322, label %321

321:                                              ; preds = %318
  store i32 27, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %340

322:                                              ; preds = %318
  %323 = load ptr, ptr %43, align 8, !tbaa !5
  %324 = getelementptr inbounds %class.d2Body, ptr %323, i32 0, i32 2
  %325 = load i32, ptr %324, align 4, !tbaa !17
  %326 = icmp eq i32 %325, 0
  br i1 %326, label %327, label %328

327:                                              ; preds = %322
  br label %332

328:                                              ; preds = %322
  %329 = load ptr, ptr %43, align 8, !tbaa !5
  %330 = load float, ptr %5, align 4, !tbaa !9
  invoke void @_ZN6d2Body19IntegrateVelocitiesEf(ptr noundef nonnull align 8 dereferenceable(132) %329, float noundef %330)
          to label %331 unwind label %336

331:                                              ; preds = %328
  br label %332

332:                                              ; preds = %331, %327
  %333 = load ptr, ptr %43, align 8, !tbaa !5
  %334 = getelementptr inbounds %class.d2Body, ptr %333, i32 0, i32 21
  %335 = load ptr, ptr %334, align 8, !tbaa !25
  store ptr %335, ptr %43, align 8, !tbaa !5
  br label %318, !llvm.loop !42

336:                                              ; preds = %328
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %12, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %341

340:                                              ; preds = %321
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  ret void

341:                                              ; preds = %336, %311, %288, %270, %212, %188, %176
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  br label %342

342:                                              ; preds = %341
  %343 = load ptr, ptr %12, align 8
  %344 = load i32, ptr %13, align 4
  %345 = insertvalue { ptr, i32 } poison, ptr %343, 0
  %346 = insertvalue { ptr, i32 } %345, i32 %344, 1
  resume { ptr, i32 } %346

347:                                              ; preds = %163
  unreachable
}

declare void @_ZN6d2Body8AddForceERK6d2Vec2(ptr noundef nonnull align 8 dereferenceable(132), ptr noundef nonnull align 4 dereferenceable(8)) #1

declare void @_ZN6d2Body15IntegrateForcesEf(ptr noundef nonnull align 8 dereferenceable(132), float noundef) #1

declare void @_ZN6d2Body11ComputeAABBEv(ptr noundef nonnull align 8 dereferenceable(132)) #1

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN20d2CollisionDetection11IsCollidingEP6d2BodyS1_RSt6vectorI9d2ContactSaIS3_EE(ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) #1

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

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

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

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

declare void @_ZN23d2PenetrationConstraintC1EP6d2BodyS1_RK6d2Vec2S4_S4_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #5 align 2

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

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

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

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

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

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

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

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

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

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

declare void @_ZN6d2Body19IntegrateVelocitiesEf(ptr noundef nonnull align 8 dereferenceable(132), float noundef) #1

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { 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 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 144}
!14 = !{!"_ZTS7d2World", !15, i64 0, !6, i64 8, !16, i64 16, !6, i64 144, !12, i64 152, !6, i64 160, !12, i64 168, !6, i64 176}
!15 = !{!"_ZTS6d2Vec2", !10, i64 0, !10, i64 4}
!16 = !{!"_ZTS16d2BlockAllocator", !6, i64 0, !12, i64 8, !12, i64 12, !7, i64 16}
!17 = !{!18, !20, i64 4}
!18 = !{!"_ZTS6d2Body", !19, i64 0, !20, i64 4, !21, i64 8, !15, i64 24, !15, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !15, i64 52, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !10, i64 128}
!19 = !{!"short", !7, i64 0}
!20 = !{!"_ZTS10d2BodyType", !7, i64 0}
!21 = !{!"_ZTS11d2Transform", !15, i64 0, !22, i64 8}
!22 = !{!"_ZTS5d2Rot", !10, i64 0, !10, i64 4}
!23 = !{!18, !10, i64 64}
!24 = !{!18, !10, i64 40}
!25 = !{!18, !6, i64 120}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!14, !6, i64 8}
!29 = !{!30, !30, i64 0}
!30 = !{!"vtable pointer", !8, i64 0}
!31 = !{!32, !6, i64 0}
!32 = !{!"_ZTSSt4pairIP6d2BodyS1_E", !6, i64 0, !6, i64 8}
!33 = !{!32, !6, i64 8}
!34 = !{!35, !6, i64 0}
!35 = !{!"_ZTS9d2Contact", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !10, i64 40}
!36 = !{!35, !6, i64 8}
!37 = !{!14, !6, i64 160}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !27}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}


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

%struct.d2Vec2 = type { float, float }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl" }
%"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl" = type { %"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl_data" }
%"struct.std::_Vector_base<d2PenetrationConstraint, std::allocator<d2PenetrationConstraint>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::pair<d2Body *, d2Body *>, std::allocator<std::pair<d2Body *, d2Body *>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::pair<d2Body *, d2Body *>, std::allocator<std::pair<d2Body *, d2Body *>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"struct.std::_List_iterator" = type { ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl" }
%"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl" = type { %"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl_data" }
%"struct.std::_Vector_base<d2Contact, std::allocator<d2Contact>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.d2PenetrationConstraint = type { %class.d2Constraint, %struct.d2MatMN, %struct.d2VecN, float, %struct.d2Vec2, float }
%class.d2Constraint = type { ptr, ptr, ptr, %struct.d2Vec2, %struct.d2Vec2, ptr, ptr }
%struct.d2MatMN = type { i32, i32, ptr }
%struct.d2VecN = type { i32, ptr }
%"class.__gnu_cxx::__normal_iterator.13" = type { ptr }

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

declare <2 x float> @_ZNK6d2Vec2mlEf(ptr noundef nonnull align 4 dereferenceable(8), float noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7d2World4StepEfi(ptr noundef nonnull align 8 dereferenceable(184) %0, float noundef %1, i32 noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.d2Vec2, align 8
  %5 = alloca %"class.std::vector.3", align 8
  %6 = alloca %"class.std::__cxx11::list", align 8
  %7 = alloca %"struct.std::_List_iterator", align 8
  %8 = alloca %"struct.std::_List_iterator", align 8
  %9 = alloca %"class.std::vector.8", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %class.d2PenetrationConstraint, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.13", align 8
  %19 = getelementptr inbounds i8, ptr %0, i64 144
  %.05476 = load ptr, ptr %19, align 8, !tbaa !5
  %.not77 = icmp eq ptr %.05476, null
  br i1 %.not77, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %41, %3
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  %22 = load ptr, ptr %21, align 8, !tbaa !15
  %23 = getelementptr inbounds i8, ptr %22, i64 32
  %24 = load ptr, ptr %23, align 8
  call void %24(ptr noundef nonnull align 8 dereferenceable(8) %21)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  call void @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  %25 = load ptr, ptr %20, align 8, !tbaa !9
  %26 = load ptr, ptr %25, align 8, !tbaa !15
  %27 = getelementptr inbounds i8, ptr %26, i64 40
  %28 = load ptr, ptr %27, align 8
  %29 = invoke noundef nonnull align 8 dereferenceable(24) ptr %28(ptr noundef nonnull align 8 dereferenceable(8) %25)
          to label %43 unwind label %51

.lr.ph:                                           ; preds = %3, %41
  %.05478 = phi ptr [ %.054, %41 ], [ %.05476, %3 ]
  %30 = getelementptr inbounds i8, ptr %.05478, i64 4
  %31 = load i32, ptr %30, align 4, !tbaa !17
  %32 = icmp eq i32 %31, 0
  br i1 %32, label %41, label %33

33:                                               ; preds = %.lr.ph
  %34 = getelementptr inbounds i8, ptr %.05478, i64 64
  %35 = load float, ptr %34, align 8, !tbaa !23
  %36 = fmul float %35, 5.000000e+01
  %37 = getelementptr inbounds i8, ptr %.05478, i64 40
  %38 = load float, ptr %37, align 8, !tbaa !24
  %39 = fmul float %36, %38
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  %40 = call <2 x float> @_ZNK6d2Vec2mlEf(ptr noundef nonnull align 4 dereferenceable(8) %0, float noundef %39)
  store <2 x float> %40, ptr %4, align 8
  call void @_ZN6d2Body8AddForceERK6d2Vec2(ptr noundef nonnull align 8 dereferenceable(132) %.05478, ptr noundef nonnull align 4 dereferenceable(8) %4)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @_ZN6d2Body15IntegrateForcesEf(ptr noundef nonnull align 8 dereferenceable(132) %.05478, float noundef %1)
  call void @_ZN6d2Body11ComputeAABBEv(ptr noundef nonnull align 8 dereferenceable(132) %.05478)
  br label %41

41:                                               ; preds = %.lr.ph, %33
  %42 = getelementptr inbounds i8, ptr %.05478, i64 120
  %.054 = load ptr, ptr %42, align 8, !tbaa !5
  %.not = icmp eq ptr %.054, null
  br i1 %.not, label %._crit_edge, label %.lr.ph, !llvm.loop !25

43:                                               ; preds = %._crit_edge
  %44 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EEaSERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %29)
          to label %45 unwind label %51

45:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %46 = call ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  store ptr %46, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %47 = call ptr @_ZNSt7__cxx114listISt4pairIP6d2BodyS3_ESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  store ptr %47, ptr %8, align 8
  %48 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt4pairIP6d2BodyS2_EES6_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  br i1 %48, label %.lr.ph83, label %._crit_edge84

._crit_edge84:                                    ; preds = %81, %45
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @_ZNSt7__cxx1110_List_baseISt4pairIP6d2BodyS3_ESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  %49 = getelementptr inbounds i8, ptr %0, i64 160
  %50 = load ptr, ptr %49, align 8, !tbaa !27
  %.not6685 = icmp eq ptr %50, null
  br i1 %.not6685, label %._crit_edge89, label %.lr.ph88

51:                                               ; preds = %43, %._crit_edge
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %88

.lr.ph83:                                         ; preds = %45, %81
  %53 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt14_List_iteratorISt4pairIP6d2BodyS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  %54 = load ptr, ptr %53, align 8, !tbaa !28
  %55 = getelementptr inbounds i8, ptr %53, i64 8
  %56 = load ptr, ptr %55, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  call void @_ZNSt6vectorI9d2ContactSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  %57 = invoke noundef zeroext i1 @_ZN20d2CollisionDetection11IsCollidingEP6d2BodyS1_RSt6vectorI9d2ContactSaIS3_EE(ptr noundef %54, ptr noundef %56, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %58 unwind label %59

58:                                               ; preds = %.lr.ph83
  br i1 %57, label %61, label %81

59:                                               ; preds = %.lr.ph83
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %84

61:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %62 = call ptr @_ZNSt6vectorI9d2ContactSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  store ptr %62, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %63 = call ptr @_ZNSt6vectorI9d2ContactSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  store ptr %63, ptr %11, align 8
  %64 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9d2ContactSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  br i1 %64, label %.lr.ph80, label %._crit_edge81

._crit_edge81:                                    ; preds = %73, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %81

.lr.ph80:                                         ; preds = %61, %73
  %65 = call noundef nonnull align 8 dereferenceable(44) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9d2ContactSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %12) #6
  %66 = load ptr, ptr %65, align 8, !tbaa !31
  %67 = getelementptr inbounds i8, ptr %65, i64 8
  %68 = load ptr, ptr %67, align 8, !tbaa !33
  %69 = getelementptr inbounds i8, ptr %65, i64 16
  %70 = getelementptr inbounds i8, ptr %65, i64 24
  %71 = getelementptr inbounds i8, ptr %65, i64 32
  invoke void @_ZN23d2PenetrationConstraintC1EP6d2BodyS1_RK6d2Vec2S4_S4_(ptr noundef nonnull align 8 dereferenceable(104) %12, ptr noundef %66, ptr noundef %68, ptr noundef nonnull align 4 dereferenceable(8) %69, ptr noundef nonnull align 4 dereferenceable(8) %70, ptr noundef nonnull align 4 dereferenceable(8) %71)
          to label %72 unwind label %76

72:                                               ; preds = %.lr.ph80
  invoke void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(104) %12)
          to label %73 unwind label %78

73:                                               ; preds = %72
  call void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %12) #6
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %12) #6
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9d2ContactSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %75 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9d2ContactSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  br i1 %75, label %.lr.ph80, label %._crit_edge81

76:                                               ; preds = %.lr.ph80
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %80

78:                                               ; preds = %72
  %79 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %12) #6
  br label %80

80:                                               ; preds = %78, %76
  %.pn71 = phi { ptr, i32 } [ %79, %78 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %84

81:                                               ; preds = %58, %._crit_edge81
  call void @_ZNSt6vectorI9d2ContactSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt4pairIP6d2BodyS2_EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  %83 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt4pairIP6d2BodyS2_EES6_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #6
  br i1 %83, label %.lr.ph83, label %._crit_edge84

84:                                               ; preds = %80, %59
  %.pn71.pn = phi { ptr, i32 } [ %.pn71, %80 ], [ %60, %59 ]
  call void @_ZNSt6vectorI9d2ContactSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  br label %88

._crit_edge89:                                    ; preds = %92, %._crit_edge84
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %85 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %85, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %86 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %86, ptr %14, align 8
  %87 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  br i1 %87, label %.lr.ph91, label %._crit_edge92

88:                                               ; preds = %84, %51
  %.pn71.pn.pn = phi { ptr, i32 } [ %.pn71.pn, %84 ], [ %52, %51 ]
  call void @_ZNSt7__cxx1110_List_baseISt4pairIP6d2BodyS3_ESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  br label %155

.lr.ph88:                                         ; preds = %._crit_edge84, %92
  %.06586 = phi ptr [ %93, %92 ], [ %50, %._crit_edge84 ]
  %89 = load ptr, ptr %.06586, align 8, !tbaa !15
  %90 = getelementptr inbounds i8, ptr %89, i64 16
  %91 = load ptr, ptr %90, align 8
  invoke void %91(ptr noundef nonnull align 8 dereferenceable(56) %.06586, float noundef %1)
          to label %92 unwind label %94

92:                                               ; preds = %.lr.ph88
  %93 = call noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %.06586)
  %.not66 = icmp eq ptr %93, null
  br i1 %.not66, label %._crit_edge89, label %.lr.ph88, !llvm.loop !34

94:                                               ; preds = %.lr.ph88
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %155

._crit_edge92:                                    ; preds = %101, %._crit_edge89
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  %96 = icmp sgt i32 %2, 0
  br i1 %96, label %.lr.ph103, label %._crit_edge104

.lr.ph91:                                         ; preds = %._crit_edge89, %101
  %97 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  %98 = load ptr, ptr %97, align 8, !tbaa !15
  %99 = getelementptr inbounds i8, ptr %98, i64 16
  %100 = load ptr, ptr %99, align 8
  invoke void %100(ptr noundef nonnull align 8 dereferenceable(104) %97, float noundef %1)
          to label %101 unwind label %104

101:                                              ; preds = %.lr.ph91
  %102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #6
  %103 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #6
  br i1 %103, label %.lr.ph91, label %._crit_edge92

104:                                              ; preds = %.lr.ph91
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  br label %155

._crit_edge104:                                   ; preds = %._crit_edge100, %._crit_edge92
  %106 = load ptr, ptr %49, align 8, !tbaa !27
  %.not67105 = icmp eq ptr %106, null
  br i1 %.not67105, label %._crit_edge109, label %.lr.ph108

.lr.ph103:                                        ; preds = %._crit_edge92, %._crit_edge100
  %.064101 = phi i32 [ %118, %._crit_edge100 ], [ 0, %._crit_edge92 ]
  %107 = load ptr, ptr %49, align 8, !tbaa !27
  %.not6993 = icmp eq ptr %107, null
  br i1 %.not6993, label %._crit_edge97, label %.lr.ph96

._crit_edge97:                                    ; preds = %114, %.lr.ph103
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %108 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %108, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  %109 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %109, ptr %16, align 8
  %110 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #6
  br i1 %110, label %.lr.ph99, label %._crit_edge100

.lr.ph96:                                         ; preds = %.lr.ph103, %114
  %.06394 = phi ptr [ %115, %114 ], [ %107, %.lr.ph103 ]
  %111 = load ptr, ptr %.06394, align 8, !tbaa !15
  %112 = getelementptr inbounds i8, ptr %111, i64 24
  %113 = load ptr, ptr %112, align 8
  invoke void %113(ptr noundef nonnull align 8 dereferenceable(56) %.06394)
          to label %114 unwind label %116

114:                                              ; preds = %.lr.ph96
  %115 = call noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %.06394)
  %.not69 = icmp eq ptr %115, null
  br i1 %.not69, label %._crit_edge97, label %.lr.ph96, !llvm.loop !35

116:                                              ; preds = %.lr.ph96
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %155

._crit_edge100:                                   ; preds = %123, %._crit_edge97
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  %118 = add nuw nsw i32 %.064101, 1
  %exitcond.not = icmp eq i32 %118, %2
  br i1 %exitcond.not, label %._crit_edge104, label %.lr.ph103, !llvm.loop !36

.lr.ph99:                                         ; preds = %._crit_edge97, %123
  %119 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  %120 = load ptr, ptr %119, align 8, !tbaa !15
  %121 = getelementptr inbounds i8, ptr %120, i64 24
  %122 = load ptr, ptr %121, align 8
  invoke void %122(ptr noundef nonnull align 8 dereferenceable(104) %119)
          to label %123 unwind label %126

123:                                              ; preds = %.lr.ph99
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #6
  %125 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #6
  br i1 %125, label %.lr.ph99, label %._crit_edge100

126:                                              ; preds = %.lr.ph99
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %155

._crit_edge109:                                   ; preds = %134, %._crit_edge104
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  %128 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %128, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  %129 = call ptr @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  store ptr %129, ptr %18, align 8
  %130 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  br i1 %130, label %.lr.ph111, label %._crit_edge112

.lr.ph108:                                        ; preds = %._crit_edge104, %134
  %.056106 = phi ptr [ %135, %134 ], [ %106, %._crit_edge104 ]
  %131 = load ptr, ptr %.056106, align 8, !tbaa !15
  %132 = getelementptr inbounds i8, ptr %131, i64 32
  %133 = load ptr, ptr %132, align 8
  invoke void %133(ptr noundef nonnull align 8 dereferenceable(56) %.056106)
          to label %134 unwind label %136

134:                                              ; preds = %.lr.ph108
  %135 = call noundef ptr @_ZN12d2Constraint7GetNextEv(ptr noundef nonnull align 8 dereferenceable(56) %.056106)
  %.not67 = icmp eq ptr %135, null
  br i1 %.not67, label %._crit_edge109, label %.lr.ph108, !llvm.loop !37

136:                                              ; preds = %.lr.ph108
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %155

._crit_edge112:                                   ; preds = %142, %._crit_edge109
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  %.0113 = load ptr, ptr %19, align 8, !tbaa !5
  %.not68114 = icmp eq ptr %.0113, null
  br i1 %.not68114, label %._crit_edge118, label %.lr.ph117

.lr.ph111:                                        ; preds = %._crit_edge109, %142
  %138 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  %139 = load ptr, ptr %138, align 8, !tbaa !15
  %140 = getelementptr inbounds i8, ptr %139, i64 32
  %141 = load ptr, ptr %140, align 8
  invoke void %141(ptr noundef nonnull align 8 dereferenceable(104) %138)
          to label %142 unwind label %145

142:                                              ; preds = %.lr.ph111
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  %144 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP23d2PenetrationConstraintSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  br i1 %144, label %.lr.ph111, label %._crit_edge112

145:                                              ; preds = %.lr.ph111
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  br label %155

._crit_edge118:                                   ; preds = %151, %._crit_edge112
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  ret void

.lr.ph117:                                        ; preds = %._crit_edge112, %151
  %.0115 = phi ptr [ %.0, %151 ], [ %.0113, %._crit_edge112 ]
  %147 = getelementptr inbounds i8, ptr %.0115, i64 4
  %148 = load i32, ptr %147, align 4, !tbaa !17
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %151, label %150

150:                                              ; preds = %.lr.ph117
  invoke void @_ZN6d2Body19IntegrateVelocitiesEf(ptr noundef nonnull align 8 dereferenceable(132) %.0115, float noundef %1)
          to label %151 unwind label %153

151:                                              ; preds = %150, %.lr.ph117
  %152 = getelementptr inbounds i8, ptr %.0115, i64 120
  %.0 = load ptr, ptr %152, align 8, !tbaa !5
  %.not68 = icmp eq ptr %.0, null
  br i1 %.not68, label %._crit_edge118, label %.lr.ph117, !llvm.loop !38

153:                                              ; preds = %150
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %155

155:                                              ; preds = %116, %126, %153, %145, %136, %104, %94, %88
  %.pn71.pn.pn.pn = phi { ptr, i32 } [ %.pn71.pn.pn, %88 ], [ %95, %94 ], [ %105, %104 ], [ %137, %136 ], [ %146, %145 ], [ %154, %153 ], [ %117, %116 ], [ %127, %126 ]
  call void @_ZNSt6vectorI23d2PenetrationConstraintSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  resume { ptr, i32 } %.pn71.pn.pn.pn
}

declare void @_ZN6d2Body8AddForceERK6d2Vec2(ptr noundef nonnull align 8 dereferenceable(132), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #1

declare void @_ZN6d2Body15IntegrateForcesEf(ptr noundef nonnull align 8 dereferenceable(132), float noundef) local_unnamed_addr #1

declare void @_ZN6d2Body11ComputeAABBEv(ptr noundef nonnull align 8 dereferenceable(132)) local_unnamed_addr #1

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN20d2CollisionDetection11IsCollidingEP6d2BodyS1_RSt6vectorI9d2ContactSaIS3_EE(ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

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

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

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

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

declare void @_ZN23d2PenetrationConstraintC1EP6d2BodyS1_RK6d2Vec2S4_S4_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN23d2PenetrationConstraintD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #5 align 2

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

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

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

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

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

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

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

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

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

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

declare void @_ZN6d2Body19IntegrateVelocitiesEf(ptr noundef nonnull align 8 dereferenceable(132), float noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { 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, !6, i64 8}
!10 = !{!"_ZTS7d2World", !11, i64 0, !6, i64 8, !13, i64 16, !6, i64 144, !14, i64 152, !6, i64 160, !14, i64 168, !6, i64 176}
!11 = !{!"_ZTS6d2Vec2", !12, i64 0, !12, i64 4}
!12 = !{!"float", !7, i64 0}
!13 = !{!"_ZTS16d2BlockAllocator", !6, i64 0, !14, i64 8, !14, i64 12, !7, i64 16}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"vtable pointer", !8, i64 0}
!17 = !{!18, !20, i64 4}
!18 = !{!"_ZTS6d2Body", !19, i64 0, !20, i64 4, !21, i64 8, !11, i64 24, !11, i64 32, !12, i64 40, !12, i64 44, !12, i64 48, !11, i64 52, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !12, i64 128}
!19 = !{!"short", !7, i64 0}
!20 = !{!"_ZTS10d2BodyType", !7, i64 0}
!21 = !{!"_ZTS11d2Transform", !11, i64 0, !22, i64 8}
!22 = !{!"_ZTS5d2Rot", !12, i64 0, !12, i64 4}
!23 = !{!18, !12, i64 64}
!24 = !{!18, !12, i64 40}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!10, !6, i64 160}
!28 = !{!29, !6, i64 0}
!29 = !{!"_ZTSSt4pairIP6d2BodyS1_E", !6, i64 0, !6, i64 8}
!30 = !{!29, !6, i64 8}
!31 = !{!32, !6, i64 0}
!32 = !{!"_ZTS9d2Contact", !6, i64 0, !6, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !12, i64 40}
!33 = !{!32, !6, i64 8}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass