; LLVM IR from erayzesen/QuarkPhysics :: QuarkPhysics/qworld.ll (ZN6QWorld6UpdateEv)

; 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.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.43" = type { ptr }
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"class.std::vector.74" = type { %"struct.std::_Vector_base.75" }
%"struct.std::_Vector_base.75" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QManifold = type { %struct.QVector, float, float, i8, ptr, ptr, %"class.std::vector.74" }
%struct.QVector = type { float, float }
%class.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%"class.__gnu_cxx::__normal_iterator.79" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.80" = type { ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QWorld = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.10", %"class.std::vector.15", %"class.std::unordered_set", %"class.std::vector.25", ptr, i8, %struct.QVector, i8, i8, i32, float, float, float, i32, i32, %"class.std::vector.30" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl" }
%"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl" }
%"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl" }
%"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl" }
%"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl" = type { %"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QBody = type <{ ptr, float, float, ptr, %struct.QVector, %struct.QVector, float, float, %class.QAABB, i32, i8, i8, i8, i8, float, i32, i8, [3 x i8], float, i8, i8, [2 x i8], %struct.QVector, float, float, float, float, float, i32, i32, i8, i8, i8, i8, i32, i32, i32, i8, [3 x i8], %"class.std::function", %"class.std::function", %"class.std::function.36", i8, [7 x i8], %"class.std::vector.38", i32, i8, [3 x i8] }>
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.std::function.36" = type { %"class.std::_Function_base", ptr }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = type { %"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl" }
%"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair" = type { ptr, ptr }
%struct.QMesh = type { %"class.std::vector.44", %struct.QVector, %struct.QVector, float, float, %"class.std::vector.0", %"class.std::vector.49", %"class.std::vector.44", %"class.std::vector.54", %"class.std::vector.59", float, ptr, i32, %"class.std::vector.64", i8, i8, %"class.std::vector.69", float, i8, i8, i8, i8 }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.44" = type { %"struct.std::_Vector_base.45" }
%"struct.std::_Vector_base.45" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.54" = type { %"struct.std::_Vector_base.55" }
%"struct.std::_Vector_base.55" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.59" = type { %"struct.std::_Vector_base.60" }
%"struct.std::_Vector_base.60" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.64" = type { %"struct.std::_Vector_base.65" }
%"struct.std::_Vector_base.65" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.69" = type { %"struct.std::_Vector_base.70" }
%"struct.std::_Vector_base.70" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }

declare i32 @__gxx_personality_v0(...)

declare noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv() #0

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld6UpdateEv(ptr noundef nonnull align 8 dereferenceable(272) %0) #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.43", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.43", align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %34 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca %"class.std::vector.74", align 8
  %39 = alloca %class.QManifold, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i64, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca %struct.QVector, align 4
  %48 = alloca %class.QAABB, align 4
  %49 = alloca %struct.QVector, align 4
  %50 = alloca %class.QAABB, align 4
  %51 = alloca %struct.QVector, align 4
  %52 = alloca %class.QAABB, align 4
  %53 = alloca %struct.QVector, align 4
  %54 = alloca %class.QAABB, align 4
  %55 = alloca %struct.QVector, align 4
  %56 = alloca %class.QAABB, align 4
  %57 = alloca %struct.QVector, align 4
  %58 = alloca %class.QAABB, align 4
  %59 = alloca %"class.std::vector.74", align 8
  %60 = alloca %class.QManifold, align 8
  %61 = alloca i32, align 4
  %62 = alloca ptr, align 8
  %63 = alloca i32, align 4
  %64 = alloca ptr, align 8
  %65 = alloca %"class.std::vector.74", align 8
  %66 = alloca %class.QManifold, align 8
  %67 = alloca ptr, align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %69 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %73 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %77 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %78 = alloca ptr, align 8
  %79 = alloca %class.QAABB, align 4
  %80 = alloca ptr, align 8
  %81 = alloca i32, align 4
  %82 = alloca ptr, align 8
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca %"class.std::vector.74", align 8
  %86 = alloca %class.QAABB, align 8
  %87 = alloca %class.QManifold, align 8
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca %class.QManifold, align 8
  %91 = alloca ptr, align 8
  %92 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %93 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %94 = alloca ptr, align 8
  %95 = alloca ptr, align 8
  %96 = alloca ptr, align 8
  %97 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %98 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %99 = alloca ptr, align 8
  %100 = alloca ptr, align 8
  %101 = alloca %"class.__gnu_cxx::__normal_iterator.80", align 8
  %102 = alloca %"class.__gnu_cxx::__normal_iterator.80", align 8
  %103 = alloca ptr, align 8
  %104 = alloca ptr, align 8
  %105 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %106 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %107 = alloca ptr, align 8
  %108 = alloca ptr, align 8
  %109 = alloca i32, align 4
  %110 = alloca %"class.std::vector.30", align 8
  %111 = alloca float, align 4
  %112 = alloca float, align 4
  %113 = alloca float, align 4
  %114 = alloca i8, align 1
  %115 = alloca ptr, align 8
  %116 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %117 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %118 = alloca ptr, align 8
  %119 = alloca %struct.QVector, align 4
  %120 = alloca %struct.QVector, align 4
  %121 = alloca %struct.QVector, align 4
  %122 = alloca %struct.QVector, align 4
  %123 = alloca i8, align 1
  %124 = alloca i32, align 4
  %125 = alloca ptr, align 8
  %126 = alloca i32, align 4
  %127 = alloca ptr, align 8
  %128 = alloca %struct.QVector, align 4
  %129 = alloca %struct.QVector, align 4
  %130 = alloca %struct.QVector, align 4
  %131 = alloca %struct.QVector, align 4
  %132 = alloca i8, align 1
  %133 = alloca ptr, align 8
  %134 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %135 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %136 = alloca ptr, align 8
  %137 = alloca ptr, align 8
  %138 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %139 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %140 = alloca ptr, align 8
  %141 = alloca i32, align 4
  %142 = alloca i32, align 4
  %143 = alloca ptr, align 8
  %144 = alloca %struct.QVector, align 4
  %145 = alloca ptr, align 8
  %146 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %147 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %148 = alloca ptr, align 8
  %149 = alloca ptr, align 8
  %150 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %151 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %152 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %153 = load ptr, ptr %2, align 8
  %154 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 8
  %155 = load i8, ptr %154, align 8, !tbaa !9, !range !48, !noundef !49
  %156 = trunc i8 %155 to i1
  %157 = zext i1 %156 to i32
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %160

159:                                              ; preds = %1
  br label %1358

160:                                              ; preds = %1
  call void @_ZN6QWorld11ClearGizmosEv(ptr noundef nonnull align 8 dereferenceable(272) %153)
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  %161 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %161, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %162) #9
  %164 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %4, i32 0, i32 0
  store ptr %163, ptr %164, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %165) #9
  %167 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %5, i32 0, i32 0
  store ptr %166, ptr %167, align 8
  br label %168

168:                                              ; preds = %187, %160
  %169 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  br i1 %169, label %171, label %170

170:                                              ; preds = %168
  store i32 2, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  br label %189

171:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  %173 = load ptr, ptr %172, align 8, !tbaa !5
  store ptr %173, ptr %7, align 8, !tbaa !5
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %174)
  %176 = zext i1 %175 to i32
  %177 = icmp eq i32 %176, 0
  br i1 %177, label %178, label %179

178:                                              ; preds = %171
  store i32 3, ptr %6, align 4
  br label %184

179:                                              ; preds = %171
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = load ptr, ptr %180, align 8, !tbaa !50
  %182 = getelementptr inbounds ptr, ptr %181, i64 0
  %183 = load ptr, ptr %182, align 8
  call void %183(ptr noundef nonnull align 8 dereferenceable(293) %180)
  store i32 0, ptr %6, align 4
  br label %184

184:                                              ; preds = %179, %178
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  %185 = load i32, ptr %6, align 4
  switch i32 %185, label %1364 [
    i32 0, label %186
    i32 3, label %187
  ]

186:                                              ; preds = %184
  br label %187

187:                                              ; preds = %186, %184
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  br label %168

189:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %190 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %190, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %191) #9
  %193 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %9, i32 0, i32 0
  store ptr %192, ptr %193, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %194) #9
  %196 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %10, i32 0, i32 0
  store ptr %195, ptr %196, align 8
  br label %197

197:                                              ; preds = %216, %189
  %198 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  br i1 %198, label %200, label %199

199:                                              ; preds = %197
  store i32 4, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %218

200:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  %202 = load ptr, ptr %201, align 8, !tbaa !5
  store ptr %202, ptr %11, align 8, !tbaa !5
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %203)
  %205 = zext i1 %204 to i32
  %206 = icmp eq i32 %205, 0
  br i1 %206, label %207, label %208

207:                                              ; preds = %200
  store i32 5, ptr %6, align 4
  br label %213

208:                                              ; preds = %200
  %209 = load ptr, ptr %11, align 8, !tbaa !5
  %210 = load ptr, ptr %209, align 8, !tbaa !50
  %211 = getelementptr inbounds ptr, ptr %210, i64 1
  %212 = load ptr, ptr %211, align 8
  call void %212(ptr noundef nonnull align 8 dereferenceable(293) %209)
  store i32 0, ptr %6, align 4
  br label %213

213:                                              ; preds = %208, %207
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  %214 = load i32, ptr %6, align 4
  switch i32 %214, label %1364 [
    i32 0, label %215
    i32 5, label %216
  ]

215:                                              ; preds = %213
  br label %216

216:                                              ; preds = %215, %213
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br label %197

218:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %219 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %219, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %220) #9
  %222 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %13, i32 0, i32 0
  store ptr %221, ptr %222, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %223 = load ptr, ptr %12, align 8, !tbaa !5
  %224 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %223) #9
  %225 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %14, i32 0, i32 0
  store ptr %224, ptr %225, align 8
  br label %226

226:                                              ; preds = %253, %218
  %227 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  br i1 %227, label %229, label %228

228:                                              ; preds = %226
  store i32 6, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  br label %255

229:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %230 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %231 = load ptr, ptr %230, align 8, !tbaa !5
  store ptr %231, ptr %15, align 8, !tbaa !5
  %232 = load ptr, ptr %15, align 8, !tbaa !5
  %233 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %232)
  %234 = zext i1 %233 to i32
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %237

236:                                              ; preds = %229
  store i32 7, ptr %6, align 4
  br label %250

237:                                              ; preds = %229
  %238 = load ptr, ptr %15, align 8, !tbaa !5
  %239 = load ptr, ptr %238, align 8, !tbaa !50
  %240 = getelementptr inbounds ptr, ptr %239, i64 5
  %241 = load ptr, ptr %240, align 8
  call void %241(ptr noundef nonnull align 8 dereferenceable(293) %238)
  %242 = load ptr, ptr %15, align 8, !tbaa !5
  %243 = getelementptr inbounds %class.QBody, ptr %242, i32 0, i32 39
  %244 = call noundef zeroext i1 @_ZStneIvJP5QBodyEEbRKSt8functionIFT_DpT0_EEDn(ptr noundef nonnull align 8 dereferenceable(32) %243, ptr null) #9
  br i1 %244, label %245, label %249

245:                                              ; preds = %237
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = getelementptr inbounds %class.QBody, ptr %246, i32 0, i32 39
  %248 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_ZNKSt8functionIFvP5QBodyEEclES1_(ptr noundef nonnull align 8 dereferenceable(32) %247, ptr noundef %248)
  br label %249

249:                                              ; preds = %245, %237
  store i32 0, ptr %6, align 4
  br label %250

250:                                              ; preds = %249, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  %251 = load i32, ptr %6, align 4
  switch i32 %251, label %1364 [
    i32 0, label %252
    i32 7, label %253
  ]

252:                                              ; preds = %250
  br label %253

253:                                              ; preds = %252, %250
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  br label %226

255:                                              ; preds = %228
  %256 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 16
  store i32 0, ptr %256, align 8, !tbaa !52
  %257 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 17
  store i32 0, ptr %257, align 4, !tbaa !53
  %258 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 11
  %259 = load i8, ptr %258, align 1, !tbaa !54, !range !48, !noundef !49
  %260 = trunc i8 %259 to i1
  br i1 %260, label %261, label %300

261:                                              ; preds = %255
  %262 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 7
  %263 = load ptr, ptr %262, align 8, !tbaa !55
  %264 = icmp ne ptr %263, null
  br i1 %264, label %265, label %288

265:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %266 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %266, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %267 = load ptr, ptr %16, align 8, !tbaa !5
  %268 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %267) #9
  %269 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %17, i32 0, i32 0
  store ptr %268, ptr %269, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %270 = load ptr, ptr %16, align 8, !tbaa !5
  %271 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %270) #9
  %272 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %18, i32 0, i32 0
  store ptr %271, ptr %272, align 8
  br label %273

273:                                              ; preds = %285, %265
  %274 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  br i1 %274, label %276, label %275

275:                                              ; preds = %273
  store i32 8, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %287

276:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  %278 = load ptr, ptr %277, align 8, !tbaa !5
  store ptr %278, ptr %19, align 8, !tbaa !5
  %279 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 7
  %280 = load ptr, ptr %279, align 8, !tbaa !55
  %281 = load ptr, ptr %19, align 8, !tbaa !5
  %282 = load ptr, ptr %280, align 8, !tbaa !50
  %283 = getelementptr inbounds ptr, ptr %282, i64 2
  %284 = load ptr, ptr %283, align 8
  call void %284(ptr noundef nonnull align 8 dereferenceable(72) %280, ptr noundef %281)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %285

285:                                              ; preds = %276
  %286 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  br label %273

287:                                              ; preds = %275
  br label %299

288:                                              ; preds = %261
  %289 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %290 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %289) #9
  %291 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %20, i32 0, i32 0
  store ptr %290, ptr %291, align 8
  %292 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %293 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #9
  %294 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %21, i32 0, i32 0
  store ptr %293, ptr %294, align 8
  %295 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %20, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8
  %297 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %21, i32 0, i32 0
  %298 = load ptr, ptr %297, align 8
  call void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS3_SaIS3_EEEEPFbPKS2_SA_EEvT_SD_T0_(ptr %296, ptr %298, ptr noundef @_ZN6QWorld20SortBodiesHorizontalEPK5QBodyS2_)
  br label %299

299:                                              ; preds = %288, %287
  br label %300

300:                                              ; preds = %299, %255
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !56
  br label %301

301:                                              ; preds = %816, %300
  %302 = load i32, ptr %22, align 4, !tbaa !56
  %303 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 12
  %304 = load i32, ptr %303, align 8, !tbaa !57
  %305 = icmp ult i32 %302, %304
  br i1 %305, label %307, label %306

306:                                              ; preds = %301
  store i32 10, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %820

307:                                              ; preds = %301
  %308 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  call void @_ZN11QObjectPoolIN10QCollision7ContactEE7FreeAllEv(ptr noundef nonnull align 8 dereferenceable(40) %308)
  call void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272) %153)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %309 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %309, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %310 = load ptr, ptr %23, align 8, !tbaa !5
  %311 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #9
  %312 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %24, i32 0, i32 0
  store ptr %311, ptr %312, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %313 = load ptr, ptr %23, align 8, !tbaa !5
  %314 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %313) #9
  %315 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %25, i32 0, i32 0
  store ptr %314, ptr %315, align 8
  br label %316

316:                                              ; preds = %341, %307
  %317 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #9
  br i1 %317, label %319, label %318

318:                                              ; preds = %316
  store i32 13, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %343

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  store ptr %321, ptr %26, align 8, !tbaa !5
  %322 = load ptr, ptr %26, align 8, !tbaa !5
  call void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293) %322)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %323 = load ptr, ptr %26, align 8, !tbaa !5
  %324 = getelementptr inbounds %class.QBody, ptr %323, i32 0, i32 44
  store ptr %324, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %325 = load ptr, ptr %27, align 8, !tbaa !5
  %326 = call ptr @_ZNSt6vectorIP5QMeshSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %325) #9
  %327 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.43", ptr %28, i32 0, i32 0
  store ptr %326, ptr %327, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %328 = load ptr, ptr %27, align 8, !tbaa !5
  %329 = call ptr @_ZNSt6vectorIP5QMeshSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %328) #9
  %330 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.43", ptr %29, i32 0, i32 0
  store ptr %329, ptr %330, align 8
  br label %331

331:                                              ; preds = %338, %319
  %332 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QMeshSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  br i1 %332, label %334, label %333

333:                                              ; preds = %331
  store i32 15, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %340

334:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %335 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QMeshSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  %336 = load ptr, ptr %335, align 8, !tbaa !5
  store ptr %336, ptr %30, align 8, !tbaa !5
  %337 = load ptr, ptr %30, align 8, !tbaa !5
  call void @_ZN5QMesh22UpdatePolygonBisectorsEv(ptr noundef nonnull align 8 dereferenceable(256) %337)
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %338

338:                                              ; preds = %334
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QMeshSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  br label %331

340:                                              ; preds = %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %341

341:                                              ; preds = %340
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #9
  br label %316

343:                                              ; preds = %318
  %344 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  call void @_ZNSt6vectorI9QManifoldSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #9
  %345 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 11
  %346 = load i8, ptr %345, align 1, !tbaa !54, !range !48, !noundef !49
  %347 = trunc i8 %346 to i1
  br i1 %347, label %348, label %515

348:                                              ; preds = %343
  %349 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 7
  %350 = load ptr, ptr %349, align 8, !tbaa !55
  %351 = icmp ne ptr %350, null
  br i1 %351, label %352, label %405

352:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %353 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 7
  %354 = load ptr, ptr %353, align 8, !tbaa !55
  %355 = load ptr, ptr %354, align 8, !tbaa !50
  %356 = getelementptr inbounds ptr, ptr %355, i64 1
  %357 = load ptr, ptr %356, align 8
  %358 = call noundef nonnull align 8 dereferenceable(56) ptr %357(ptr noundef nonnull align 8 dereferenceable(72) %354)
  store ptr %358, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %359 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %359, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %360 = load ptr, ptr %32, align 8, !tbaa !5
  %361 = call ptr @_ZNSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %360) #9
  %362 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %33, i32 0, i32 0
  %363 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %362, i32 0, i32 0
  store ptr %361, ptr %363, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %364 = load ptr, ptr %32, align 8, !tbaa !5
  %365 = call ptr @_ZNSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %364) #9
  %366 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %34, i32 0, i32 0
  %367 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %366, i32 0, i32 0
  store ptr %365, ptr %367, align 8
  br label %368

368:                                              ; preds = %402, %352
  %369 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIP5QBodyS3_ELb1EEES7_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #9
  br i1 %369, label %371, label %370

370:                                              ; preds = %368
  store i32 17, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %404

371:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %372 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIP5QBodyS3_ELb1ELb1EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #9
  store ptr %372, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %373 = load ptr, ptr %35, align 8, !tbaa !5
  %374 = getelementptr inbounds %"struct.std::pair", ptr %373, i32 0, i32 0
  %375 = load ptr, ptr %374, align 8, !tbaa !58
  store ptr %375, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %376 = load ptr, ptr %35, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.std::pair", ptr %376, i32 0, i32 1
  %378 = load ptr, ptr %377, align 8, !tbaa !60
  store ptr %378, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %38) #9
  %379 = load ptr, ptr %36, align 8, !tbaa !5
  %380 = load ptr, ptr %37, align 8, !tbaa !5
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.74") align 8 %38, ptr noundef %379, ptr noundef %380)
  %381 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #9
  %382 = icmp ugt i64 %381, 0
  br i1 %382, label %383, label %401

383:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 64, ptr %39) #9
  %384 = load ptr, ptr %36, align 8, !tbaa !5
  %385 = load ptr, ptr %37, align 8, !tbaa !5
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %39, ptr noundef %384, ptr noundef %385)
          to label %386 unwind label %392

386:                                              ; preds = %383
  %387 = getelementptr inbounds %class.QManifold, ptr %39, i32 0, i32 6
  %388 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %387, ptr noundef nonnull align 8 dereferenceable(24) %38)
          to label %389 unwind label %396

389:                                              ; preds = %386
  %390 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %390, ptr noundef nonnull align 8 dereferenceable(64) %39)
          to label %391 unwind label %396

391:                                              ; preds = %389
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %39) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %39) #9
  br label %401

392:                                              ; preds = %383
  %393 = landingpad { ptr, i32 }
          cleanup
  %394 = extractvalue { ptr, i32 } %393, 0
  store ptr %394, ptr %40, align 8
  %395 = extractvalue { ptr, i32 } %393, 1
  store i32 %395, ptr %41, align 4
  br label %400

396:                                              ; preds = %389, %386
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %40, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %41, align 4
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %39) #9
  br label %400

400:                                              ; preds = %396, %392
  call void @llvm.lifetime.end.p0(i64 64, ptr %39) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %819

401:                                              ; preds = %391, %371
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %402

402:                                              ; preds = %401
  %403 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIP5QBodyS3_ELb1ELb1EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #9
  br label %368

404:                                              ; preds = %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %514

405:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %406 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %407 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #9
  store i64 %407, ptr %42, align 8, !tbaa !61
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  store i32 0, ptr %43, align 4, !tbaa !56
  br label %408

408:                                              ; preds = %510, %405
  %409 = load i32, ptr %43, align 4, !tbaa !56
  %410 = zext i32 %409 to i64
  %411 = load i64, ptr %42, align 8, !tbaa !61
  %412 = icmp ult i64 %410, %411
  br i1 %412, label %414, label %413

413:                                              ; preds = %408
  store i32 19, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %513

414:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %415 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %416 = load i32, ptr %43, align 4, !tbaa !56
  %417 = zext i32 %416 to i64
  %418 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %415, i64 noundef %417) #9
  %419 = load ptr, ptr %418, align 8, !tbaa !5
  store ptr %419, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %420 = load i32, ptr %43, align 4, !tbaa !56
  %421 = add i32 %420, 1
  store i32 %421, ptr %45, align 4, !tbaa !56
  br label %422

422:                                              ; preds = %505, %414
  %423 = load i32, ptr %45, align 4, !tbaa !56
  %424 = zext i32 %423 to i64
  %425 = load i64, ptr %42, align 8, !tbaa !61
  %426 = icmp ult i64 %424, %425
  br i1 %426, label %428, label %427

427:                                              ; preds = %422
  store i32 22, ptr %6, align 4
  br label %508

428:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %429 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %430 = load i32, ptr %45, align 4, !tbaa !56
  %431 = zext i32 %430 to i64
  %432 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %429, i64 noundef %431) #9
  %433 = load ptr, ptr %432, align 8, !tbaa !5
  store ptr %433, ptr %46, align 8, !tbaa !5
  %434 = load ptr, ptr %44, align 8, !tbaa !5
  %435 = load ptr, ptr %46, align 8, !tbaa !5
  %436 = call noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef %434, ptr noundef %435, i1 noundef zeroext true)
  %437 = zext i1 %436 to i32
  %438 = icmp eq i32 %437, 0
  br i1 %438, label %439, label %440

439:                                              ; preds = %428
  store i32 24, ptr %6, align 4
  br label %502

440:                                              ; preds = %428
  %441 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 16
  %442 = load i32, ptr %441, align 8, !tbaa !52
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %441, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %48) #9
  %444 = load ptr, ptr %44, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %48, ptr noundef nonnull align 8 dereferenceable(293) %444)
  %445 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %48)
  store <2 x float> %445, ptr %47, align 4
  %446 = getelementptr inbounds %struct.QVector, ptr %47, i32 0, i32 0
  %447 = load float, ptr %446, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %50) #9
  %448 = load ptr, ptr %46, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %50, ptr noundef nonnull align 8 dereferenceable(293) %448)
  %449 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %50)
  store <2 x float> %449, ptr %49, align 4
  %450 = getelementptr inbounds %struct.QVector, ptr %49, i32 0, i32 0
  %451 = load float, ptr %450, align 4, !tbaa !62
  %452 = fcmp oge float %447, %451
  call void @llvm.lifetime.end.p0(i64 28, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br i1 %452, label %453, label %500

453:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %52) #9
  %454 = load ptr, ptr %44, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %52, ptr noundef nonnull align 8 dereferenceable(293) %454)
  %455 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %52)
  store <2 x float> %455, ptr %51, align 4
  %456 = getelementptr inbounds %struct.QVector, ptr %51, i32 0, i32 1
  %457 = load float, ptr %456, align 4, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %54) #9
  %458 = load ptr, ptr %46, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %54, ptr noundef nonnull align 8 dereferenceable(293) %458)
  %459 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %54)
  store <2 x float> %459, ptr %53, align 4
  %460 = getelementptr inbounds %struct.QVector, ptr %53, i32 0, i32 1
  %461 = load float, ptr %460, align 4, !tbaa !63
  %462 = fcmp ole float %457, %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr %58) #9
  br i1 %462, label %463, label %473

463:                                              ; preds = %453
  %464 = load ptr, ptr %44, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %56, ptr noundef nonnull align 8 dereferenceable(293) %464)
  %465 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %56)
  store <2 x float> %465, ptr %55, align 4
  %466 = getelementptr inbounds %struct.QVector, ptr %55, i32 0, i32 1
  %467 = load float, ptr %466, align 4, !tbaa !63
  %468 = load ptr, ptr %46, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %58, ptr noundef nonnull align 8 dereferenceable(293) %468)
  %469 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %58)
  store <2 x float> %469, ptr %57, align 4
  %470 = getelementptr inbounds %struct.QVector, ptr %57, i32 0, i32 1
  %471 = load float, ptr %470, align 4, !tbaa !63
  %472 = fcmp oge float %467, %471
  br label %473

473:                                              ; preds = %463, %453
  %474 = phi i1 [ false, %453 ], [ %472, %463 ]
  call void @llvm.lifetime.end.p0(i64 28, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br i1 %474, label %475, label %499

475:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 24, ptr %59) #9
  %476 = load ptr, ptr %44, align 8, !tbaa !5
  %477 = load ptr, ptr %46, align 8, !tbaa !5
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.74") align 8 %59, ptr noundef %476, ptr noundef %477)
  %478 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #9
  %479 = icmp ugt i64 %478, 0
  br i1 %479, label %480, label %498

480:                                              ; preds = %475
  call void @llvm.lifetime.start.p0(i64 64, ptr %60) #9
  %481 = load ptr, ptr %44, align 8, !tbaa !5
  %482 = load ptr, ptr %46, align 8, !tbaa !5
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %60, ptr noundef %481, ptr noundef %482)
          to label %483 unwind label %489

483:                                              ; preds = %480
  %484 = getelementptr inbounds %class.QManifold, ptr %60, i32 0, i32 6
  %485 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %484, ptr noundef nonnull align 8 dereferenceable(24) %59)
          to label %486 unwind label %493

486:                                              ; preds = %483
  %487 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %487, ptr noundef nonnull align 8 dereferenceable(64) %60)
          to label %488 unwind label %493

488:                                              ; preds = %486
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %60) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %60) #9
  br label %498

489:                                              ; preds = %480
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %40, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %41, align 4
  br label %497

493:                                              ; preds = %486, %483
  %494 = landingpad { ptr, i32 }
          cleanup
  %495 = extractvalue { ptr, i32 } %494, 0
  store ptr %495, ptr %40, align 8
  %496 = extractvalue { ptr, i32 } %494, 1
  store i32 %496, ptr %41, align 4
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %60) #9
  br label %497

497:                                              ; preds = %493, %489
  call void @llvm.lifetime.end.p0(i64 64, ptr %60) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %819

498:                                              ; preds = %488, %475
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %59) #9
  br label %499

499:                                              ; preds = %498, %473
  br label %501

500:                                              ; preds = %440
  store i32 22, ptr %6, align 4
  br label %502

501:                                              ; preds = %499
  store i32 0, ptr %6, align 4
  br label %502

502:                                              ; preds = %501, %500, %439
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  %503 = load i32, ptr %6, align 4
  switch i32 %503, label %508 [
    i32 0, label %504
    i32 24, label %505
  ]

504:                                              ; preds = %502
  br label %505

505:                                              ; preds = %504, %502
  %506 = load i32, ptr %45, align 4, !tbaa !56
  %507 = add i32 %506, 1
  store i32 %507, ptr %45, align 4, !tbaa !56
  br label %422, !llvm.loop !64

508:                                              ; preds = %502, %427
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %509

509:                                              ; preds = %508
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %510

510:                                              ; preds = %509
  %511 = load i32, ptr %43, align 4, !tbaa !56
  %512 = add i32 %511, 1
  store i32 %512, ptr %43, align 4, !tbaa !56
  br label %408, !llvm.loop !66

513:                                              ; preds = %413
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %514

514:                                              ; preds = %513, %404
  br label %588

515:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  store i32 0, ptr %61, align 4, !tbaa !56
  br label %516

516:                                              ; preds = %584, %515
  %517 = load i32, ptr %61, align 4, !tbaa !56
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %520 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %519) #9
  %521 = icmp ult i64 %518, %520
  br i1 %521, label %523, label %522

522:                                              ; preds = %516
  store i32 25, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %587

523:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %524 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %525 = load i32, ptr %61, align 4, !tbaa !56
  %526 = zext i32 %525 to i64
  %527 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %524, i64 noundef %526) #9
  %528 = load ptr, ptr %527, align 8, !tbaa !5
  store ptr %528, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  %529 = load i32, ptr %61, align 4, !tbaa !56
  %530 = add i32 %529, 1
  store i32 %530, ptr %63, align 4, !tbaa !56
  br label %531

531:                                              ; preds = %580, %523
  %532 = load i32, ptr %63, align 4, !tbaa !56
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %535 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %534) #9
  %536 = icmp ult i64 %533, %535
  br i1 %536, label %538, label %537

537:                                              ; preds = %531
  store i32 28, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  br label %583

538:                                              ; preds = %531
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %539 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %540 = load i32, ptr %63, align 4, !tbaa !56
  %541 = zext i32 %540 to i64
  %542 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %539, i64 noundef %541) #9
  %543 = load ptr, ptr %542, align 8, !tbaa !5
  store ptr %543, ptr %64, align 8, !tbaa !5
  %544 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 16
  %545 = load i32, ptr %544, align 8, !tbaa !52
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %544, align 8, !tbaa !52
  %547 = load ptr, ptr %62, align 8, !tbaa !5
  %548 = load ptr, ptr %64, align 8, !tbaa !5
  %549 = call noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef %547, ptr noundef %548, i1 noundef zeroext true)
  %550 = zext i1 %549 to i32
  %551 = icmp eq i32 %550, 0
  br i1 %551, label %552, label %553

552:                                              ; preds = %538
  store i32 30, ptr %6, align 4
  br label %577

553:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 24, ptr %65) #9
  %554 = load ptr, ptr %62, align 8, !tbaa !5
  %555 = load ptr, ptr %64, align 8, !tbaa !5
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.74") align 8 %65, ptr noundef %554, ptr noundef %555)
  %556 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #9
  %557 = icmp ugt i64 %556, 0
  br i1 %557, label %558, label %576

558:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 64, ptr %66) #9
  %559 = load ptr, ptr %62, align 8, !tbaa !5
  %560 = load ptr, ptr %64, align 8, !tbaa !5
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %66, ptr noundef %559, ptr noundef %560)
          to label %561 unwind label %567

561:                                              ; preds = %558
  %562 = getelementptr inbounds %class.QManifold, ptr %66, i32 0, i32 6
  %563 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %562, ptr noundef nonnull align 8 dereferenceable(24) %65)
          to label %564 unwind label %571

564:                                              ; preds = %561
  %565 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %565, ptr noundef nonnull align 8 dereferenceable(64) %66)
          to label %566 unwind label %571

566:                                              ; preds = %564
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %66) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %66) #9
  br label %576

567:                                              ; preds = %558
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %40, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %41, align 4
  br label %575

571:                                              ; preds = %564, %561
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %40, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %41, align 4
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %66) #9
  br label %575

575:                                              ; preds = %571, %567
  call void @llvm.lifetime.end.p0(i64 64, ptr %66) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %819

576:                                              ; preds = %566, %553
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #9
  store i32 0, ptr %6, align 4
  br label %577

577:                                              ; preds = %576, %552
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  %578 = load i32, ptr %6, align 4
  switch i32 %578, label %1364 [
    i32 0, label %579
    i32 30, label %580
  ]

579:                                              ; preds = %577
  br label %580

580:                                              ; preds = %579, %577
  %581 = load i32, ptr %63, align 4, !tbaa !56
  %582 = add i32 %581, 1
  store i32 %582, ptr %63, align 4, !tbaa !56
  br label %531, !llvm.loop !67

583:                                              ; preds = %537
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  br label %584

584:                                              ; preds = %583
  %585 = load i32, ptr %61, align 4, !tbaa !56
  %586 = add i32 %585, 1
  store i32 %586, ptr %61, align 4, !tbaa !56
  br label %516, !llvm.loop !68

587:                                              ; preds = %522
  br label %588

588:                                              ; preds = %587, %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %589 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  store ptr %589, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %590 = load ptr, ptr %67, align 8, !tbaa !5
  %591 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %590) #9
  %592 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.79", ptr %68, i32 0, i32 0
  store ptr %591, ptr %592, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %593 = load ptr, ptr %67, align 8, !tbaa !5
  %594 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %593) #9
  %595 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.79", ptr %69, i32 0, i32 0
  store ptr %594, ptr %595, align 8
  br label %596

596:                                              ; preds = %602, %588
  %597 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(8) %69) #9
  br i1 %597, label %599, label %598

598:                                              ; preds = %596
  store i32 31, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %604

599:                                              ; preds = %596
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %600 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #9
  store ptr %600, ptr %70, align 8, !tbaa !5
  %601 = load ptr, ptr %70, align 8, !tbaa !5
  call void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %601)
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  br label %602

602:                                              ; preds = %599
  %603 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #9
  br label %596

604:                                              ; preds = %598
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %605 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 6
  store ptr %605, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %606 = load ptr, ptr %71, align 8, !tbaa !5
  %607 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %606) #9
  %608 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.79", ptr %72, i32 0, i32 0
  store ptr %607, ptr %608, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %609 = load ptr, ptr %71, align 8, !tbaa !5
  %610 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %609) #9
  %611 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.79", ptr %73, i32 0, i32 0
  store ptr %610, ptr %611, align 8
  br label %612

612:                                              ; preds = %618, %604
  %613 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 8 dereferenceable(8) %73) #9
  br i1 %613, label %615, label %614

614:                                              ; preds = %612
  store i32 33, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %620

615:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %616 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %72) #9
  store ptr %616, ptr %74, align 8, !tbaa !5
  %617 = load ptr, ptr %74, align 8, !tbaa !5
  call void @_ZN9QManifold26SolveFrictionAndVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(64) %617)
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  br label %618

618:                                              ; preds = %615
  %619 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %72) #9
  br label %612

620:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %621 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %621, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %622 = load ptr, ptr %75, align 8, !tbaa !5
  %623 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %622) #9
  %624 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %76, i32 0, i32 0
  store ptr %623, ptr %624, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %625 = load ptr, ptr %75, align 8, !tbaa !5
  %626 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %625) #9
  %627 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %77, i32 0, i32 0
  store ptr %626, ptr %627, align 8
  br label %628

628:                                              ; preds = %813, %620
  %629 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %77) #9
  br i1 %629, label %631, label %630

630:                                              ; preds = %628
  store i32 35, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %815

631:                                              ; preds = %628
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %632 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %76) #9
  %633 = load ptr, ptr %632, align 8, !tbaa !5
  store ptr %633, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 28, ptr %79) #9
  %634 = load ptr, ptr %78, align 8, !tbaa !5
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %79, ptr noundef nonnull align 8 dereferenceable(293) %634)
  %635 = load ptr, ptr %78, align 8, !tbaa !5
  %636 = getelementptr inbounds %class.QBody, ptr %635, i32 0, i32 45
  %637 = load i32, ptr %636, align 8, !tbaa !69
  %638 = icmp ne i32 %637, 1
  br i1 %638, label %639, label %806

639:                                              ; preds = %631
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %640 = load ptr, ptr %78, align 8, !tbaa !5
  store ptr %640, ptr %80, align 8, !tbaa !5
  %641 = load ptr, ptr %80, align 8, !tbaa !5
  %642 = icmp eq ptr %641, null
  br i1 %642, label %643, label %644

643:                                              ; preds = %639
  store i32 36, ptr %6, align 4
  br label %803

644:                                              ; preds = %639
  %645 = load ptr, ptr %80, align 8, !tbaa !5
  %646 = call noundef zeroext i1 @_ZN9QSoftBody24GetSelfCollisionsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %645)
  %647 = zext i1 %646 to i32
  %648 = icmp eq i32 %647, 0
  br i1 %648, label %649, label %650

649:                                              ; preds = %644
  store i32 36, ptr %6, align 4
  br label %803

650:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  store i32 0, ptr %81, align 4, !tbaa !56
  br label %651

651:                                              ; preds = %799, %650
  %652 = load i32, ptr %81, align 4, !tbaa !56
  %653 = load ptr, ptr %80, align 8, !tbaa !5
  %654 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %653)
  %655 = icmp slt i32 %652, %654
  br i1 %655, label %657, label %656

656:                                              ; preds = %651
  store i32 37, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  br label %802

657:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #9
  %658 = load ptr, ptr %80, align 8, !tbaa !5
  %659 = load i32, ptr %81, align 4, !tbaa !56
  %660 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %658, i32 noundef %659)
  store ptr %660, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  store i32 0, ptr %83, align 4, !tbaa !56
  br label %661

661:                                              ; preds = %794, %657
  %662 = load i32, ptr %83, align 4, !tbaa !56
  %663 = load ptr, ptr %80, align 8, !tbaa !5
  %664 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %663)
  %665 = icmp slt i32 %662, %664
  br i1 %665, label %667, label %666

666:                                              ; preds = %661
  store i32 40, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  br label %798

667:                                              ; preds = %661
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  %668 = load ptr, ptr %80, align 8, !tbaa !5
  %669 = load i32, ptr %83, align 4, !tbaa !56
  %670 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %668, i32 noundef %669)
  store ptr %670, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %85) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %671 = load ptr, ptr %82, align 8, !tbaa !5
  %672 = load ptr, ptr %84, align 8, !tbaa !5
  %673 = icmp eq ptr %671, %672
  br i1 %673, label %674, label %685

674:                                              ; preds = %667
  %675 = load ptr, ptr %82, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.QMesh, ptr %675, i32 0, i32 0
  %677 = load ptr, ptr %80, align 8, !tbaa !5
  %678 = invoke noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360) %677)
          to label %679 unwind label %681

679:                                              ; preds = %674
  invoke void @_ZN10QCollision19CircleAndCircleSelfERSt6vectorIP9QParticleSaIS2_EERS0_IPNS_7ContactESaIS7_EEf(ptr noundef nonnull align 8 dereferenceable(24) %676, ptr noundef nonnull align 8 dereferenceable(24) %85, float noundef %678)
          to label %680 unwind label %681

680:                                              ; preds = %679
  br label %694

681:                                              ; preds = %733, %726, %719, %714, %692, %685, %679, %674
  %682 = landingpad { ptr, i32 }
          cleanup
  %683 = extractvalue { ptr, i32 } %682, 0
  store ptr %683, ptr %40, align 8
  %684 = extractvalue { ptr, i32 } %682, 1
  store i32 %684, ptr %41, align 4
  br label %797

685:                                              ; preds = %667
  %686 = load ptr, ptr %82, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.QMesh, ptr %686, i32 0, i32 0
  %688 = load ptr, ptr %84, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.QMesh, ptr %688, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %79, i64 28, i1 false), !tbaa.struct !82
  %690 = load ptr, ptr %80, align 8, !tbaa !5
  %691 = invoke noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360) %690)
          to label %692 unwind label %681

692:                                              ; preds = %685
  invoke void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24) %687, ptr noundef nonnull align 8 dereferenceable(24) %689, ptr noundef byval(%class.QAABB) align 8 %86, ptr noundef nonnull align 8 dereferenceable(24) %85, float noundef %691, i1 noundef zeroext false)
          to label %693 unwind label %681

693:                                              ; preds = %692
  br label %694

694:                                              ; preds = %693, %680
  %695 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %696 = icmp ugt i64 %695, 0
  br i1 %696, label %697, label %714

697:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 64, ptr %87) #9
  %698 = load ptr, ptr %80, align 8, !tbaa !5
  %699 = load ptr, ptr %80, align 8, !tbaa !5
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %87, ptr noundef %698, ptr noundef %699)
          to label %700 unwind label %705

700:                                              ; preds = %697
  %701 = getelementptr inbounds %class.QManifold, ptr %87, i32 0, i32 6
  %702 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %701, ptr noundef nonnull align 8 dereferenceable(24) %85)
          to label %703 unwind label %709

703:                                              ; preds = %700
  invoke void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %87)
          to label %704 unwind label %709

704:                                              ; preds = %703
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %87) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %87) #9
  br label %714

705:                                              ; preds = %697
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %40, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %41, align 4
  br label %713

709:                                              ; preds = %703, %700
  %710 = landingpad { ptr, i32 }
          cleanup
  %711 = extractvalue { ptr, i32 } %710, 0
  store ptr %711, ptr %40, align 8
  %712 = extractvalue { ptr, i32 } %710, 1
  store i32 %712, ptr %41, align 4
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %87) #9
  br label %713

713:                                              ; preds = %709, %705
  call void @llvm.lifetime.end.p0(i64 64, ptr %87) #9
  br label %797

714:                                              ; preds = %704, %694
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %715 = load ptr, ptr %82, align 8, !tbaa !5
  %716 = load ptr, ptr %84, align 8, !tbaa !5
  %717 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %715, ptr noundef %716, i32 noundef 2, i32 noundef 2)
          to label %718 unwind label %681

718:                                              ; preds = %714
  br i1 %717, label %719, label %733

719:                                              ; preds = %718
  %720 = load ptr, ptr %80, align 8, !tbaa !5
  %721 = invoke noundef zeroext i1 @_ZN9QSoftBody24GetAreaPreservingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %720)
          to label %722 unwind label %681

722:                                              ; preds = %719
  %723 = zext i1 %721 to i32
  %724 = icmp eq i32 %723, 1
  br i1 %724, label %725, label %726

725:                                              ; preds = %722
  br label %732

726:                                              ; preds = %722
  %727 = load ptr, ptr %82, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.QMesh, ptr %727, i32 0, i32 7
  %729 = load ptr, ptr %84, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.QMesh, ptr %729, i32 0, i32 7
  invoke void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %728, ptr noundef nonnull align 8 dereferenceable(24) %730, ptr noundef nonnull align 8 dereferenceable(24) %85)
          to label %731 unwind label %681

731:                                              ; preds = %726
  br label %732

732:                                              ; preds = %731, %725
  br label %773

733:                                              ; preds = %718
  %734 = load ptr, ptr %82, align 8, !tbaa !5
  %735 = load ptr, ptr %84, align 8, !tbaa !5
  %736 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %734, ptr noundef %735, i32 noundef 0, i32 noundef 2)
          to label %737 unwind label %681

737:                                              ; preds = %733
  br i1 %736, label %738, label %772

738:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %739 = load ptr, ptr %82, align 8, !tbaa !5
  %740 = invoke noundef i32 @_ZN5QMesh20GetCollisionBehaviorEv(ptr noundef nonnull align 8 dereferenceable(256) %739)
          to label %741 unwind label %763

741:                                              ; preds = %738
  %742 = icmp eq i32 %740, 0
  br i1 %742, label %743, label %745

743:                                              ; preds = %741
  %744 = load ptr, ptr %82, align 8, !tbaa !5
  br label %747

745:                                              ; preds = %741
  %746 = load ptr, ptr %84, align 8, !tbaa !5
  br label %747

747:                                              ; preds = %745, %743
  %748 = phi ptr [ %744, %743 ], [ %746, %745 ]
  store ptr %748, ptr %88, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #9
  %749 = load ptr, ptr %88, align 8, !tbaa !5
  %750 = load ptr, ptr %82, align 8, !tbaa !5
  %751 = icmp eq ptr %749, %750
  br i1 %751, label %752, label %754

752:                                              ; preds = %747
  %753 = load ptr, ptr %84, align 8, !tbaa !5
  br label %756

754:                                              ; preds = %747
  %755 = load ptr, ptr %82, align 8, !tbaa !5
  br label %756

756:                                              ; preds = %754, %752
  %757 = phi ptr [ %753, %752 ], [ %755, %754 ]
  store ptr %757, ptr %89, align 8, !tbaa !5
  %758 = load ptr, ptr %89, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.QMesh, ptr %758, i32 0, i32 7
  %760 = load ptr, ptr %88, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.QMesh, ptr %760, i32 0, i32 0
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %759, ptr noundef nonnull align 8 dereferenceable(24) %761, ptr noundef nonnull align 8 dereferenceable(24) %85)
          to label %762 unwind label %767

762:                                              ; preds = %756
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  br label %772

763:                                              ; preds = %738
  %764 = landingpad { ptr, i32 }
          cleanup
  %765 = extractvalue { ptr, i32 } %764, 0
  store ptr %765, ptr %40, align 8
  %766 = extractvalue { ptr, i32 } %764, 1
  store i32 %766, ptr %41, align 4
  br label %771

767:                                              ; preds = %756
  %768 = landingpad { ptr, i32 }
          cleanup
  %769 = extractvalue { ptr, i32 } %768, 0
  store ptr %769, ptr %40, align 8
  %770 = extractvalue { ptr, i32 } %768, 1
  store i32 %770, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  br label %771

771:                                              ; preds = %767, %763
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  br label %797

772:                                              ; preds = %762, %737
  br label %773

773:                                              ; preds = %772, %732
  %774 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %775 = icmp ugt i64 %774, 0
  br i1 %775, label %776, label %793

776:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 64, ptr %90) #9
  %777 = load ptr, ptr %80, align 8, !tbaa !5
  %778 = load ptr, ptr %80, align 8, !tbaa !5
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %90, ptr noundef %777, ptr noundef %778)
          to label %779 unwind label %784

779:                                              ; preds = %776
  %780 = getelementptr inbounds %class.QManifold, ptr %90, i32 0, i32 6
  %781 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %780, ptr noundef nonnull align 8 dereferenceable(24) %85)
          to label %782 unwind label %788

782:                                              ; preds = %779
  invoke void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %90)
          to label %783 unwind label %788

783:                                              ; preds = %782
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %90) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %90) #9
  br label %793

784:                                              ; preds = %776
  %785 = landingpad { ptr, i32 }
          cleanup
  %786 = extractvalue { ptr, i32 } %785, 0
  store ptr %786, ptr %40, align 8
  %787 = extractvalue { ptr, i32 } %785, 1
  store i32 %787, ptr %41, align 4
  br label %792

788:                                              ; preds = %782, %779
  %789 = landingpad { ptr, i32 }
          cleanup
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %40, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %41, align 4
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %90) #9
  br label %792

792:                                              ; preds = %788, %784
  call void @llvm.lifetime.end.p0(i64 64, ptr %90) #9
  br label %797

793:                                              ; preds = %783, %773
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  br label %794

794:                                              ; preds = %793
  %795 = load i32, ptr %83, align 4, !tbaa !56
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %83, align 4, !tbaa !56
  br label %661, !llvm.loop !84

797:                                              ; preds = %792, %771, %713, %681
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %819

798:                                              ; preds = %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  br label %799

799:                                              ; preds = %798
  %800 = load i32, ptr %81, align 4, !tbaa !56
  %801 = add nsw i32 %800, 1
  store i32 %801, ptr %81, align 4, !tbaa !56
  br label %651, !llvm.loop !85

802:                                              ; preds = %656
  store i32 0, ptr %6, align 4
  br label %803

803:                                              ; preds = %802, %649, %643
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  %804 = load i32, ptr %6, align 4
  switch i32 %804, label %807 [
    i32 0, label %805
  ]

805:                                              ; preds = %803
  br label %806

806:                                              ; preds = %805, %631
  store i32 0, ptr %6, align 4
  br label %807

807:                                              ; preds = %806, %803
  call void @llvm.lifetime.end.p0(i64 28, ptr %79) #9
  %808 = load i32, ptr %6, align 4
  switch i32 %808, label %810 [
    i32 0, label %809
  ]

809:                                              ; preds = %807
  store i32 0, ptr %6, align 4
  br label %810

810:                                              ; preds = %809, %807
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  %811 = load i32, ptr %6, align 4
  switch i32 %811, label %1364 [
    i32 0, label %812
    i32 36, label %813
  ]

812:                                              ; preds = %810
  br label %813

813:                                              ; preds = %812, %810
  %814 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %76) #9
  br label %628

815:                                              ; preds = %630
  br label %816

816:                                              ; preds = %815
  %817 = load i32, ptr %22, align 4, !tbaa !56
  %818 = add i32 %817, 1
  store i32 %818, ptr %22, align 4, !tbaa !56
  br label %301, !llvm.loop !86

819:                                              ; preds = %797, %575, %497, %400
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %1359

820:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %821 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %821, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #9
  %822 = load ptr, ptr %91, align 8, !tbaa !5
  %823 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %822) #9
  %824 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %92, i32 0, i32 0
  store ptr %823, ptr %824, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %825 = load ptr, ptr %91, align 8, !tbaa !5
  %826 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %825) #9
  %827 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %93, i32 0, i32 0
  store ptr %826, ptr %827, align 8
  br label %828

828:                                              ; preds = %858, %820
  %829 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %93) #9
  br i1 %829, label %831, label %830

830:                                              ; preds = %828
  store i32 43, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  br label %860

831:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #9
  %832 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #9
  %833 = load ptr, ptr %832, align 8, !tbaa !5
  store ptr %833, ptr %94, align 8, !tbaa !5
  %834 = load ptr, ptr %94, align 8, !tbaa !5
  %835 = getelementptr inbounds %class.QBody, ptr %834, i32 0, i32 32
  %836 = load i8, ptr %835, align 2, !tbaa !87, !range !48, !noundef !49
  %837 = trunc i8 %836 to i1
  br i1 %837, label %838, label %839

838:                                              ; preds = %831
  store i32 44, ptr %6, align 4
  br label %855

839:                                              ; preds = %831
  %840 = load ptr, ptr %94, align 8, !tbaa !5
  %841 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %840)
  %842 = icmp ne i32 %841, 1
  br i1 %842, label %843, label %854

843:                                              ; preds = %839
  %844 = load ptr, ptr %94, align 8, !tbaa !5
  %845 = call noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293) %844)
  %846 = icmp ne i32 %845, 1
  br i1 %846, label %847, label %854

847:                                              ; preds = %843
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #9
  %848 = load ptr, ptr %94, align 8, !tbaa !5
  store ptr %848, ptr %95, align 8, !tbaa !5
  %849 = load ptr, ptr %95, align 8, !tbaa !5
  %850 = call noundef zeroext i1 @_ZN9QSoftBody23GetShapeMatchingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %849)
  br i1 %850, label %851, label %853

851:                                              ; preds = %847
  %852 = load ptr, ptr %95, align 8, !tbaa !5
  call void @_ZN9QSoftBody18ApplyShapeMatchingEv(ptr noundef nonnull align 8 dereferenceable(360) %852)
  br label %853

853:                                              ; preds = %851, %847
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  br label %854

854:                                              ; preds = %853, %843, %839
  store i32 0, ptr %6, align 4
  br label %855

855:                                              ; preds = %854, %838
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #9
  %856 = load i32, ptr %6, align 4
  switch i32 %856, label %1364 [
    i32 0, label %857
    i32 44, label %858
  ]

857:                                              ; preds = %855
  br label %858

858:                                              ; preds = %857, %855
  %859 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #9
  br label %828

860:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #9
  %861 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %861, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %862 = load ptr, ptr %96, align 8, !tbaa !5
  %863 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %862) #9
  %864 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %97, i32 0, i32 0
  store ptr %863, ptr %864, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %865 = load ptr, ptr %96, align 8, !tbaa !5
  %866 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %865) #9
  %867 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %98, i32 0, i32 0
  store ptr %866, ptr %867, align 8
  br label %868

868:                                              ; preds = %875, %860
  %869 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull align 8 dereferenceable(8) %98) #9
  br i1 %869, label %871, label %870

870:                                              ; preds = %868
  store i32 45, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %877

871:                                              ; preds = %868
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #9
  %872 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  %873 = load ptr, ptr %872, align 8, !tbaa !5
  store ptr %873, ptr %99, align 8, !tbaa !5
  %874 = load ptr, ptr %99, align 8, !tbaa !5
  call void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293) %874)
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  br label %875

875:                                              ; preds = %871
  %876 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  br label %868

877:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #9
  %878 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 2
  store ptr %878, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %879 = load ptr, ptr %100, align 8, !tbaa !5
  %880 = call ptr @_ZNSt6vectorIP8QRaycastSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %879) #9
  %881 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.80", ptr %101, i32 0, i32 0
  store ptr %880, ptr %881, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #9
  %882 = load ptr, ptr %100, align 8, !tbaa !5
  %883 = call ptr @_ZNSt6vectorIP8QRaycastSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %882) #9
  %884 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.80", ptr %102, i32 0, i32 0
  store ptr %883, ptr %884, align 8
  br label %885

885:                                              ; preds = %892, %877
  %886 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP8QRaycastSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull align 8 dereferenceable(8) %102) #9
  br i1 %886, label %888, label %887

887:                                              ; preds = %885
  store i32 47, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  br label %894

888:                                              ; preds = %885
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #9
  %889 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP8QRaycastSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %890 = load ptr, ptr %889, align 8, !tbaa !5
  store ptr %890, ptr %103, align 8, !tbaa !5
  %891 = load ptr, ptr %103, align 8, !tbaa !5
  call void @_ZN8QRaycast14UpdateContactsEv(ptr noundef nonnull align 8 dereferenceable(72) %891)
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  br label %892

892:                                              ; preds = %888
  %893 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP8QRaycastSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  br label %885

894:                                              ; preds = %887
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #9
  %895 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %895, ptr %104, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #9
  %896 = load ptr, ptr %104, align 8, !tbaa !5
  %897 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %896) #9
  %898 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %105, i32 0, i32 0
  store ptr %897, ptr %898, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #9
  %899 = load ptr, ptr %104, align 8, !tbaa !5
  %900 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %899) #9
  %901 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %106, i32 0, i32 0
  store ptr %900, ptr %901, align 8
  br label %902

902:                                              ; preds = %919, %894
  %903 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(8) %106) #9
  br i1 %903, label %905, label %904

904:                                              ; preds = %902
  store i32 49, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  br label %921

905:                                              ; preds = %902
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %906 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %105) #9
  %907 = load ptr, ptr %906, align 8, !tbaa !5
  store ptr %907, ptr %107, align 8, !tbaa !5
  %908 = load ptr, ptr %107, align 8, !tbaa !5
  %909 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %908)
  %910 = icmp eq i32 %909, 1
  br i1 %910, label %911, label %918

911:                                              ; preds = %905
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %912 = load ptr, ptr %107, align 8, !tbaa !5
  store ptr %912, ptr %108, align 8, !tbaa !5
  %913 = load ptr, ptr %108, align 8, !tbaa !5
  %914 = icmp ne ptr %913, null
  br i1 %914, label %915, label %917

915:                                              ; preds = %911
  %916 = load ptr, ptr %108, align 8, !tbaa !5
  call void @_ZN9QAreaBody11CheckBodiesEv(ptr noundef nonnull align 8 dereferenceable(432) %916)
  br label %917

917:                                              ; preds = %915, %911
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  br label %918

918:                                              ; preds = %917, %905
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  br label %919

919:                                              ; preds = %918
  %920 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %105) #9
  br label %902

921:                                              ; preds = %904
  %922 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 10
  %923 = load i8, ptr %922, align 4, !tbaa !88, !range !48, !noundef !49
  %924 = trunc i8 %923 to i1
  br i1 %924, label %925, label %1330

925:                                              ; preds = %921
  %926 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 4
  call void @_ZNSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %926) #9
  %927 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  %928 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 4
  call void @_ZN6QWorld15GenerateIslandsERSt6vectorIP5QBodySaIS2_EERS0_IS4_SaIS4_EE(ptr noundef nonnull align 8 dereferenceable(272) %153, ptr noundef nonnull align 8 dereferenceable(24) %927, ptr noundef nonnull align 8 dereferenceable(24) %928)
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #9
  store i32 0, ptr %109, align 4, !tbaa !56
  br label %929

929:                                              ; preds = %1325, %925
  %930 = load i32, ptr %109, align 4, !tbaa !56
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 4
  %933 = call noundef i64 @_ZNKSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %932) #9
  %934 = icmp ult i64 %931, %933
  br i1 %934, label %936, label %935

935:                                              ; preds = %929
  store i32 51, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #9
  br label %1329

936:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 24, ptr %110) #9
  %937 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 4
  %938 = load i32, ptr %109, align 4, !tbaa !56
  %939 = sext i32 %938 to i64
  %940 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IP5QBodySaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %937, i64 noundef %939) #9
  call void @_ZNSt6vectorIP5QBodySaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef nonnull align 8 dereferenceable(24) %940)
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #9
  store float 0.000000e+00, ptr %111, align 4, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #9
  store float 0.000000e+00, ptr %112, align 4, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #9
  store float 0.000000e+00, ptr %113, align 4, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #9
  store i8 0, ptr %114, align 1, !tbaa !89
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #9
  store ptr %110, ptr %115, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %941 = load ptr, ptr %115, align 8, !tbaa !5
  %942 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %941) #9
  %943 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %116, i32 0, i32 0
  store ptr %942, ptr %943, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #9
  %944 = load ptr, ptr %115, align 8, !tbaa !5
  %945 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %944) #9
  %946 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %117, i32 0, i32 0
  store ptr %945, ptr %946, align 8
  br label %947

947:                                              ; preds = %1166, %936
  %948 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull align 8 dereferenceable(8) %117) #9
  br i1 %948, label %950, label %949

949:                                              ; preds = %947
  store i32 54, ptr %6, align 4
  br label %1169

950:                                              ; preds = %947
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #9
  %951 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  %952 = load ptr, ptr %951, align 8, !tbaa !5
  store ptr %952, ptr %118, align 8, !tbaa !5
  %953 = load ptr, ptr %118, align 8, !tbaa !5
  %954 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %953)
          to label %955 unwind label %1008

955:                                              ; preds = %950
  %956 = icmp eq i32 %954, 0
  br i1 %956, label %957, label %1031

957:                                              ; preds = %955
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #9
  %958 = load ptr, ptr %118, align 8, !tbaa !5
  %959 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %958)
          to label %960 unwind label %1012

960:                                              ; preds = %957
  store <2 x float> %959, ptr %119, align 4
  %961 = getelementptr inbounds %struct.QVector, ptr %119, i32 0, i32 0
  %962 = load float, ptr %961, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %963 = load ptr, ptr %118, align 8, !tbaa !5
  %964 = invoke <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %963)
          to label %965 unwind label %1016

965:                                              ; preds = %960
  store <2 x float> %964, ptr %120, align 4
  %966 = getelementptr inbounds %struct.QVector, ptr %120, i32 0, i32 0
  %967 = load float, ptr %966, align 4, !tbaa !62
  %968 = fsub float %962, %967
  %969 = invoke noundef float @_ZSt3absf(float noundef %968)
          to label %970 unwind label %1016

970:                                              ; preds = %965
  store float %969, ptr %111, align 4, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #9
  %971 = load ptr, ptr %118, align 8, !tbaa !5
  %972 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %971)
          to label %973 unwind label %1021

973:                                              ; preds = %970
  store <2 x float> %972, ptr %121, align 4
  %974 = getelementptr inbounds %struct.QVector, ptr %121, i32 0, i32 1
  %975 = load float, ptr %974, align 4, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #9
  %976 = load ptr, ptr %118, align 8, !tbaa !5
  %977 = invoke <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %976)
          to label %978 unwind label %1025

978:                                              ; preds = %973
  store <2 x float> %977, ptr %122, align 4
  %979 = getelementptr inbounds %struct.QVector, ptr %122, i32 0, i32 1
  %980 = load float, ptr %979, align 4, !tbaa !63
  %981 = fsub float %975, %980
  %982 = invoke noundef float @_ZSt3absf(float noundef %981)
          to label %983 unwind label %1025

983:                                              ; preds = %978
  store float %982, ptr %112, align 4, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  %984 = load ptr, ptr %118, align 8, !tbaa !5
  %985 = invoke noundef float @_ZN5QBody11GetRotationEv(ptr noundef nonnull align 8 dereferenceable(293) %984)
          to label %986 unwind label %1008

986:                                              ; preds = %983
  %987 = load ptr, ptr %118, align 8, !tbaa !5
  %988 = invoke noundef float @_ZN5QBody19GetPreviousRotationEv(ptr noundef nonnull align 8 dereferenceable(293) %987)
          to label %989 unwind label %1008

989:                                              ; preds = %986
  %990 = fsub float %985, %988
  %991 = invoke noundef float @_ZSt3absf(float noundef %990)
          to label %992 unwind label %1008

992:                                              ; preds = %989
  store float %991, ptr %113, align 4, !tbaa !83
  %993 = load float, ptr %111, align 4, !tbaa !83
  %994 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 14
  %995 = load float, ptr %994, align 8, !tbaa !90
  %996 = fcmp ogt float %993, %995
  br i1 %996, label %1007, label %997

997:                                              ; preds = %992
  %998 = load float, ptr %112, align 4, !tbaa !83
  %999 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 14
  %1000 = load float, ptr %999, align 8, !tbaa !90
  %1001 = fcmp ogt float %998, %1000
  br i1 %1001, label %1007, label %1002

1002:                                             ; preds = %997
  %1003 = load float, ptr %113, align 4, !tbaa !83
  %1004 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 15
  %1005 = load float, ptr %1004, align 4, !tbaa !91
  %1006 = fcmp ogt float %1003, %1005
  br i1 %1006, label %1007, label %1030

1007:                                             ; preds = %1002, %997, %992
  store i8 1, ptr %114, align 1, !tbaa !89
  store i32 54, ptr %6, align 4
  br label %1163

1008:                                             ; preds = %989, %986, %983, %950
  %1009 = landingpad { ptr, i32 }
          cleanup
  %1010 = extractvalue { ptr, i32 } %1009, 0
  store ptr %1010, ptr %40, align 8
  %1011 = extractvalue { ptr, i32 } %1009, 1
  store i32 %1011, ptr %41, align 4
  br label %1168

1012:                                             ; preds = %957
  %1013 = landingpad { ptr, i32 }
          cleanup
  %1014 = extractvalue { ptr, i32 } %1013, 0
  store ptr %1014, ptr %40, align 8
  %1015 = extractvalue { ptr, i32 } %1013, 1
  store i32 %1015, ptr %41, align 4
  br label %1020

1016:                                             ; preds = %965, %960
  %1017 = landingpad { ptr, i32 }
          cleanup
  %1018 = extractvalue { ptr, i32 } %1017, 0
  store ptr %1018, ptr %40, align 8
  %1019 = extractvalue { ptr, i32 } %1017, 1
  store i32 %1019, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  br label %1020

1020:                                             ; preds = %1016, %1012
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  br label %1168

1021:                                             ; preds = %970
  %1022 = landingpad { ptr, i32 }
          cleanup
  %1023 = extractvalue { ptr, i32 } %1022, 0
  store ptr %1023, ptr %40, align 8
  %1024 = extractvalue { ptr, i32 } %1022, 1
  store i32 %1024, ptr %41, align 4
  br label %1029

1025:                                             ; preds = %978, %973
  %1026 = landingpad { ptr, i32 }
          cleanup
  %1027 = extractvalue { ptr, i32 } %1026, 0
  store ptr %1027, ptr %40, align 8
  %1028 = extractvalue { ptr, i32 } %1026, 1
  store i32 %1028, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #9
  br label %1029

1029:                                             ; preds = %1025, %1021
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  br label %1168

1030:                                             ; preds = %1002
  br label %1162

1031:                                             ; preds = %955
  call void @llvm.lifetime.start.p0(i64 1, ptr %123) #9
  store i8 0, ptr %123, align 1, !tbaa !89
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #9
  store i32 0, ptr %124, align 4, !tbaa !56
  br label %1032

1032:                                             ; preds = %1146, %1031
  %1033 = load i32, ptr %124, align 4, !tbaa !56
  %1034 = load ptr, ptr %118, align 8, !tbaa !5
  %1035 = invoke noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %1034)
          to label %1036 unwind label %1039

1036:                                             ; preds = %1032
  %1037 = icmp slt i32 %1033, %1035
  br i1 %1037, label %1043, label %1038

1038:                                             ; preds = %1036
  store i32 56, ptr %6, align 4
  br label %1150

1039:                                             ; preds = %1032
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %40, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %41, align 4
  br label %1151

1043:                                             ; preds = %1036
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #9
  %1044 = load ptr, ptr %118, align 8, !tbaa !5
  %1045 = load i32, ptr %124, align 4, !tbaa !56
  %1046 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %1044, i32 noundef %1045)
          to label %1047 unwind label %1055

1047:                                             ; preds = %1043
  store ptr %1046, ptr %125, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #9
  store i32 0, ptr %126, align 4, !tbaa !56
  br label %1048

1048:                                             ; preds = %1130, %1047
  %1049 = load i32, ptr %126, align 4, !tbaa !56
  %1050 = load ptr, ptr %125, align 8, !tbaa !5
  %1051 = invoke noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256) %1050)
          to label %1052 unwind label %1059

1052:                                             ; preds = %1048
  %1053 = icmp slt i32 %1049, %1051
  br i1 %1053, label %1063, label %1054

1054:                                             ; preds = %1052
  store i32 59, ptr %6, align 4
  br label %1134

1055:                                             ; preds = %1043
  %1056 = landingpad { ptr, i32 }
          cleanup
  %1057 = extractvalue { ptr, i32 } %1056, 0
  store ptr %1057, ptr %40, align 8
  %1058 = extractvalue { ptr, i32 } %1056, 1
  store i32 %1058, ptr %41, align 4
  br label %1149

1059:                                             ; preds = %1048
  %1060 = landingpad { ptr, i32 }
          cleanup
  %1061 = extractvalue { ptr, i32 } %1060, 0
  store ptr %1061, ptr %40, align 8
  %1062 = extractvalue { ptr, i32 } %1060, 1
  store i32 %1062, ptr %41, align 4
  br label %1135

1063:                                             ; preds = %1052
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #9
  %1064 = load ptr, ptr %125, align 8, !tbaa !5
  %1065 = load i32, ptr %126, align 4, !tbaa !56
  %1066 = invoke noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256) %1064, i32 noundef %1065)
          to label %1067 unwind label %1104

1067:                                             ; preds = %1063
  store ptr %1066, ptr %127, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #9
  %1068 = load ptr, ptr %127, align 8, !tbaa !5
  %1069 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %1068)
          to label %1070 unwind label %1108

1070:                                             ; preds = %1067
  store <2 x float> %1069, ptr %128, align 4
  %1071 = getelementptr inbounds %struct.QVector, ptr %128, i32 0, i32 0
  %1072 = load float, ptr %1071, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1073 = load ptr, ptr %127, align 8, !tbaa !5
  %1074 = invoke <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %1073)
          to label %1075 unwind label %1112

1075:                                             ; preds = %1070
  store <2 x float> %1074, ptr %129, align 4
  %1076 = getelementptr inbounds %struct.QVector, ptr %129, i32 0, i32 0
  %1077 = load float, ptr %1076, align 4, !tbaa !62
  %1078 = fsub float %1072, %1077
  %1079 = invoke noundef float @_ZSt3absf(float noundef %1078)
          to label %1080 unwind label %1112

1080:                                             ; preds = %1075
  store float %1079, ptr %111, align 4, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #9
  %1081 = load ptr, ptr %127, align 8, !tbaa !5
  %1082 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %1081)
          to label %1083 unwind label %1117

1083:                                             ; preds = %1080
  store <2 x float> %1082, ptr %130, align 4
  %1084 = getelementptr inbounds %struct.QVector, ptr %130, i32 0, i32 1
  %1085 = load float, ptr %1084, align 4, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #9
  %1086 = load ptr, ptr %127, align 8, !tbaa !5
  %1087 = invoke <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %1086)
          to label %1088 unwind label %1121

1088:                                             ; preds = %1083
  store <2 x float> %1087, ptr %131, align 4
  %1089 = getelementptr inbounds %struct.QVector, ptr %131, i32 0, i32 1
  %1090 = load float, ptr %1089, align 4, !tbaa !63
  %1091 = fsub float %1085, %1090
  %1092 = invoke noundef float @_ZSt3absf(float noundef %1091)
          to label %1093 unwind label %1121

1093:                                             ; preds = %1088
  store float %1092, ptr %112, align 4, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #9
  %1094 = load float, ptr %111, align 4, !tbaa !83
  %1095 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 14
  %1096 = load float, ptr %1095, align 8, !tbaa !90
  %1097 = fcmp ogt float %1094, %1096
  br i1 %1097, label %1103, label %1098

1098:                                             ; preds = %1093
  %1099 = load float, ptr %112, align 4, !tbaa !83
  %1100 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 14
  %1101 = load float, ptr %1100, align 8, !tbaa !90
  %1102 = fcmp ogt float %1099, %1101
  br i1 %1102, label %1103, label %1126

1103:                                             ; preds = %1098, %1093
  store i8 1, ptr %123, align 1, !tbaa !89
  store i32 59, ptr %6, align 4
  br label %1127

1104:                                             ; preds = %1063
  %1105 = landingpad { ptr, i32 }
          cleanup
  %1106 = extractvalue { ptr, i32 } %1105, 0
  store ptr %1106, ptr %40, align 8
  %1107 = extractvalue { ptr, i32 } %1105, 1
  store i32 %1107, ptr %41, align 4
  br label %1133

1108:                                             ; preds = %1067
  %1109 = landingpad { ptr, i32 }
          cleanup
  %1110 = extractvalue { ptr, i32 } %1109, 0
  store ptr %1110, ptr %40, align 8
  %1111 = extractvalue { ptr, i32 } %1109, 1
  store i32 %1111, ptr %41, align 4
  br label %1116

1112:                                             ; preds = %1075, %1070
  %1113 = landingpad { ptr, i32 }
          cleanup
  %1114 = extractvalue { ptr, i32 } %1113, 0
  store ptr %1114, ptr %40, align 8
  %1115 = extractvalue { ptr, i32 } %1113, 1
  store i32 %1115, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1116

1116:                                             ; preds = %1112, %1108
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br label %1133

1117:                                             ; preds = %1080
  %1118 = landingpad { ptr, i32 }
          cleanup
  %1119 = extractvalue { ptr, i32 } %1118, 0
  store ptr %1119, ptr %40, align 8
  %1120 = extractvalue { ptr, i32 } %1118, 1
  store i32 %1120, ptr %41, align 4
  br label %1125

1121:                                             ; preds = %1088, %1083
  %1122 = landingpad { ptr, i32 }
          cleanup
  %1123 = extractvalue { ptr, i32 } %1122, 0
  store ptr %1123, ptr %40, align 8
  %1124 = extractvalue { ptr, i32 } %1122, 1
  store i32 %1124, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  br label %1125

1125:                                             ; preds = %1121, %1117
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #9
  br label %1133

1126:                                             ; preds = %1098
  store i32 0, ptr %6, align 4
  br label %1127

1127:                                             ; preds = %1126, %1103
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #9
  %1128 = load i32, ptr %6, align 4
  switch i32 %1128, label %1134 [
    i32 0, label %1129
  ]

1129:                                             ; preds = %1127
  br label %1130

1130:                                             ; preds = %1129
  %1131 = load i32, ptr %126, align 4, !tbaa !56
  %1132 = add nsw i32 %1131, 1
  store i32 %1132, ptr %126, align 4, !tbaa !56
  br label %1048, !llvm.loop !92

1133:                                             ; preds = %1125, %1116, %1104
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #9
  br label %1135

1134:                                             ; preds = %1127, %1054
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #9
  br label %1136

1135:                                             ; preds = %1133, %1059
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #9
  br label %1149

1136:                                             ; preds = %1134
  %1137 = load i8, ptr %123, align 1, !tbaa !89, !range !48, !noundef !49
  %1138 = trunc i8 %1137 to i1
  %1139 = zext i1 %1138 to i32
  %1140 = icmp eq i32 %1139, 1
  br i1 %1140, label %1141, label %1142

1141:                                             ; preds = %1136
  store i32 56, ptr %6, align 4
  br label %1143

1142:                                             ; preds = %1136
  store i32 0, ptr %6, align 4
  br label %1143

1143:                                             ; preds = %1142, %1141
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  %1144 = load i32, ptr %6, align 4
  switch i32 %1144, label %1150 [
    i32 0, label %1145
  ]

1145:                                             ; preds = %1143
  br label %1146

1146:                                             ; preds = %1145
  %1147 = load i32, ptr %124, align 4, !tbaa !56
  %1148 = add nsw i32 %1147, 1
  store i32 %1148, ptr %124, align 4, !tbaa !56
  br label %1032, !llvm.loop !93

1149:                                             ; preds = %1135, %1055
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  br label %1151

1150:                                             ; preds = %1143, %1038
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  br label %1152

1151:                                             ; preds = %1149, %1039
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #9
  br label %1168

1152:                                             ; preds = %1150
  %1153 = load i8, ptr %123, align 1, !tbaa !89, !range !48, !noundef !49
  %1154 = trunc i8 %1153 to i1
  %1155 = zext i1 %1154 to i32
  %1156 = icmp eq i32 %1155, 1
  br i1 %1156, label %1157, label %1158

1157:                                             ; preds = %1152
  store i8 1, ptr %114, align 1, !tbaa !89
  store i32 54, ptr %6, align 4
  br label %1159

1158:                                             ; preds = %1152
  store i32 0, ptr %6, align 4
  br label %1159

1159:                                             ; preds = %1158, %1157
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #9
  %1160 = load i32, ptr %6, align 4
  switch i32 %1160, label %1163 [
    i32 0, label %1161
  ]

1161:                                             ; preds = %1159
  br label %1162

1162:                                             ; preds = %1161, %1030
  store i32 0, ptr %6, align 4
  br label %1163

1163:                                             ; preds = %1162, %1159, %1007
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  %1164 = load i32, ptr %6, align 4
  switch i32 %1164, label %1169 [
    i32 0, label %1165
  ]

1165:                                             ; preds = %1163
  br label %1166

1166:                                             ; preds = %1165
  %1167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %116) #9
  br label %947

1168:                                             ; preds = %1151, %1029, %1020, %1008
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  br label %1328

1169:                                             ; preds = %1163, %949
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  br label %1170

1170:                                             ; preds = %1169
  %1171 = load i8, ptr %114, align 1, !tbaa !89, !range !48, !noundef !49
  %1172 = trunc i8 %1171 to i1
  %1173 = zext i1 %1172 to i32
  %1174 = icmp eq i32 %1173, 0
  br i1 %1174, label %1175, label %1302

1175:                                             ; preds = %1170
  call void @llvm.lifetime.start.p0(i64 1, ptr %132) #9
  store i8 1, ptr %132, align 1, !tbaa !89
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #9
  store ptr %110, ptr %133, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #9
  %1176 = load ptr, ptr %133, align 8, !tbaa !5
  %1177 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1176) #9
  %1178 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %134, i32 0, i32 0
  store ptr %1177, ptr %1178, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #9
  %1179 = load ptr, ptr %133, align 8, !tbaa !5
  %1180 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1179) #9
  %1181 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %135, i32 0, i32 0
  store ptr %1180, ptr %1181, align 8
  br label %1182

1182:                                             ; preds = %1202, %1175
  %1183 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %134, ptr noundef nonnull align 8 dereferenceable(8) %135) #9
  br i1 %1183, label %1185, label %1184

1184:                                             ; preds = %1182
  store i32 62, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #9
  br label %1204

1185:                                             ; preds = %1182
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #9
  %1186 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %134) #9
  %1187 = load ptr, ptr %1186, align 8, !tbaa !5
  store ptr %1187, ptr %136, align 8, !tbaa !5
  %1188 = load ptr, ptr %136, align 8, !tbaa !5
  %1189 = getelementptr inbounds %class.QBody, ptr %1188, i32 0, i32 35
  %1190 = load i32, ptr %1189, align 4, !tbaa !94
  %1191 = add nsw i32 %1190, 1
  store i32 %1191, ptr %1189, align 4, !tbaa !94
  %1192 = load ptr, ptr %136, align 8, !tbaa !5
  %1193 = getelementptr inbounds %class.QBody, ptr %1192, i32 0, i32 36
  %1194 = load i32, ptr %1193, align 8, !tbaa !95
  %1195 = add nsw i32 %1194, 1
  store i32 %1195, ptr %1193, align 8, !tbaa !95
  %1196 = load ptr, ptr %136, align 8, !tbaa !5
  %1197 = getelementptr inbounds %class.QBody, ptr %1196, i32 0, i32 35
  %1198 = load i32, ptr %1197, align 4, !tbaa !94
  %1199 = icmp slt i32 %1198, 120
  br i1 %1199, label %1200, label %1201

1200:                                             ; preds = %1185
  store i8 0, ptr %132, align 1, !tbaa !89
  br label %1201

1201:                                             ; preds = %1200, %1185
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #9
  br label %1202

1202:                                             ; preds = %1201
  %1203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %134) #9
  br label %1182

1204:                                             ; preds = %1184
  %1205 = load i8, ptr %132, align 1, !tbaa !89, !range !48, !noundef !49
  %1206 = trunc i8 %1205 to i1
  br i1 %1206, label %1207, label %1301

1207:                                             ; preds = %1204
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #9
  store ptr %110, ptr %137, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #9
  %1208 = load ptr, ptr %137, align 8, !tbaa !5
  %1209 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1208) #9
  %1210 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %138, i32 0, i32 0
  store ptr %1209, ptr %1210, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #9
  %1211 = load ptr, ptr %137, align 8, !tbaa !5
  %1212 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1211) #9
  %1213 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %139, i32 0, i32 0
  store ptr %1212, ptr %1213, align 8
  br label %1214

1214:                                             ; preds = %1297, %1207
  %1215 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %138, ptr noundef nonnull align 8 dereferenceable(8) %139) #9
  br i1 %1215, label %1217, label %1216

1216:                                             ; preds = %1214
  store i32 64, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  br label %1300

1217:                                             ; preds = %1214
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #9
  %1218 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %138) #9
  %1219 = load ptr, ptr %1218, align 8, !tbaa !5
  store ptr %1219, ptr %140, align 8, !tbaa !5
  %1220 = load ptr, ptr %140, align 8, !tbaa !5
  %1221 = getelementptr inbounds %class.QBody, ptr %1220, i32 0, i32 32
  store i8 1, ptr %1221, align 2, !tbaa !87
  %1222 = load ptr, ptr %140, align 8, !tbaa !5
  %1223 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %1222)
          to label %1224 unwind label %1236

1224:                                             ; preds = %1217
  %1225 = icmp eq i32 %1223, 0
  br i1 %1225, label %1226, label %1240

1226:                                             ; preds = %1224
  %1227 = load ptr, ptr %140, align 8, !tbaa !5
  %1228 = getelementptr inbounds %class.QBody, ptr %1227, i32 0, i32 4
  %1229 = load ptr, ptr %140, align 8, !tbaa !5
  %1230 = getelementptr inbounds %class.QBody, ptr %1229, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1230, ptr align 8 %1228, i64 8, i1 false), !tbaa.struct !96
  %1231 = load ptr, ptr %140, align 8, !tbaa !5
  %1232 = getelementptr inbounds %class.QBody, ptr %1231, i32 0, i32 6
  %1233 = load float, ptr %1232, align 8, !tbaa !97
  %1234 = load ptr, ptr %140, align 8, !tbaa !5
  %1235 = getelementptr inbounds %class.QBody, ptr %1234, i32 0, i32 7
  store float %1233, ptr %1235, align 4, !tbaa !98
  br label %1296

1236:                                             ; preds = %1217
  %1237 = landingpad { ptr, i32 }
          cleanup
  %1238 = extractvalue { ptr, i32 } %1237, 0
  store ptr %1238, ptr %40, align 8
  %1239 = extractvalue { ptr, i32 } %1237, 1
  store i32 %1239, ptr %41, align 4
  br label %1299

1240:                                             ; preds = %1224
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #9
  store i32 0, ptr %141, align 4, !tbaa !56
  br label %1241

1241:                                             ; preds = %1291, %1240
  %1242 = load i32, ptr %141, align 4, !tbaa !56
  %1243 = load ptr, ptr %140, align 8, !tbaa !5
  %1244 = invoke noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %1243)
          to label %1245 unwind label %1248

1245:                                             ; preds = %1241
  %1246 = icmp slt i32 %1242, %1244
  br i1 %1246, label %1252, label %1247

1247:                                             ; preds = %1245
  store i32 66, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #9
  br label %1295

1248:                                             ; preds = %1241
  %1249 = landingpad { ptr, i32 }
          cleanup
  %1250 = extractvalue { ptr, i32 } %1249, 0
  store ptr %1250, ptr %40, align 8
  %1251 = extractvalue { ptr, i32 } %1249, 1
  store i32 %1251, ptr %41, align 4
  br label %1294

1252:                                             ; preds = %1245
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #9
  store i32 0, ptr %142, align 4, !tbaa !56
  br label %1253

1253:                                             ; preds = %1282, %1252
  %1254 = load i32, ptr %142, align 4, !tbaa !56
  %1255 = load ptr, ptr %140, align 8, !tbaa !5
  %1256 = load i32, ptr %141, align 4, !tbaa !56
  %1257 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %1255, i32 noundef %1256)
          to label %1258 unwind label %1263

1258:                                             ; preds = %1253
  %1259 = invoke noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256) %1257)
          to label %1260 unwind label %1263

1260:                                             ; preds = %1258
  %1261 = icmp slt i32 %1254, %1259
  br i1 %1261, label %1267, label %1262

1262:                                             ; preds = %1260
  store i32 69, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #9
  br label %1290

1263:                                             ; preds = %1258, %1253
  %1264 = landingpad { ptr, i32 }
          cleanup
  %1265 = extractvalue { ptr, i32 } %1264, 0
  store ptr %1265, ptr %40, align 8
  %1266 = extractvalue { ptr, i32 } %1264, 1
  store i32 %1266, ptr %41, align 4
  br label %1289

1267:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1268 = load ptr, ptr %140, align 8, !tbaa !5
  %1269 = load i32, ptr %141, align 4, !tbaa !56
  %1270 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %1268, i32 noundef %1269)
          to label %1271 unwind label %1285

1271:                                             ; preds = %1267
  %1272 = load i32, ptr %142, align 4, !tbaa !56
  %1273 = invoke noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256) %1270, i32 noundef %1272)
          to label %1274 unwind label %1285

1274:                                             ; preds = %1271
  store ptr %1273, ptr %143, align 8, !tbaa !5
  %1275 = load ptr, ptr %143, align 8, !tbaa !5
  %1276 = load ptr, ptr %143, align 8, !tbaa !5
  %1277 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %1276)
          to label %1278 unwind label %1285

1278:                                             ; preds = %1274
  store <2 x float> %1277, ptr %144, align 4
  %1279 = load <2 x float>, ptr %144, align 4
  %1280 = invoke noundef ptr @_ZN9QParticle25SetPreviousGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %1275, <2 x float> %1279)
          to label %1281 unwind label %1285

1281:                                             ; preds = %1278
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1282

1282:                                             ; preds = %1281
  %1283 = load i32, ptr %142, align 4, !tbaa !56
  %1284 = add nsw i32 %1283, 1
  store i32 %1284, ptr %142, align 4, !tbaa !56
  br label %1253, !llvm.loop !99

1285:                                             ; preds = %1278, %1274, %1271, %1267
  %1286 = landingpad { ptr, i32 }
          cleanup
  %1287 = extractvalue { ptr, i32 } %1286, 0
  store ptr %1287, ptr %40, align 8
  %1288 = extractvalue { ptr, i32 } %1286, 1
  store i32 %1288, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %1289

1289:                                             ; preds = %1285, %1263
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #9
  br label %1294

1290:                                             ; preds = %1262
  br label %1291

1291:                                             ; preds = %1290
  %1292 = load i32, ptr %141, align 4, !tbaa !56
  %1293 = add nsw i32 %1292, 1
  store i32 %1293, ptr %141, align 4, !tbaa !56
  br label %1241, !llvm.loop !100

1294:                                             ; preds = %1289, %1248
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #9
  br label %1299

1295:                                             ; preds = %1247
  br label %1296

1296:                                             ; preds = %1295, %1226
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  br label %1297

1297:                                             ; preds = %1296
  %1298 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %138) #9
  br label %1214

1299:                                             ; preds = %1294, %1236
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %132) #9
  br label %1328

1300:                                             ; preds = %1216
  br label %1301

1301:                                             ; preds = %1300, %1204
  call void @llvm.lifetime.end.p0(i64 1, ptr %132) #9
  br label %1324

1302:                                             ; preds = %1170
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #9
  store ptr %110, ptr %145, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %1303 = load ptr, ptr %145, align 8, !tbaa !5
  %1304 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1303) #9
  %1305 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %146, i32 0, i32 0
  store ptr %1304, ptr %1305, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #9
  %1306 = load ptr, ptr %145, align 8, !tbaa !5
  %1307 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1306) #9
  %1308 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %147, i32 0, i32 0
  store ptr %1307, ptr %1308, align 8
  br label %1309

1309:                                             ; preds = %1321, %1302
  %1310 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %146, ptr noundef nonnull align 8 dereferenceable(8) %147) #9
  br i1 %1310, label %1312, label %1311

1311:                                             ; preds = %1309
  store i32 72, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  br label %1323

1312:                                             ; preds = %1309
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #9
  %1313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %146) #9
  %1314 = load ptr, ptr %1313, align 8, !tbaa !5
  store ptr %1314, ptr %148, align 8, !tbaa !5
  %1315 = load ptr, ptr %148, align 8, !tbaa !5
  %1316 = getelementptr inbounds %class.QBody, ptr %1315, i32 0, i32 35
  store i32 0, ptr %1316, align 4, !tbaa !94
  %1317 = load ptr, ptr %148, align 8, !tbaa !5
  %1318 = getelementptr inbounds %class.QBody, ptr %1317, i32 0, i32 36
  store i32 0, ptr %1318, align 8, !tbaa !95
  %1319 = load ptr, ptr %148, align 8, !tbaa !5
  %1320 = getelementptr inbounds %class.QBody, ptr %1319, i32 0, i32 32
  store i8 0, ptr %1320, align 2, !tbaa !87
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  br label %1321

1321:                                             ; preds = %1312
  %1322 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %146) #9
  br label %1309

1323:                                             ; preds = %1311
  br label %1324

1324:                                             ; preds = %1323, %1301
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #9
  call void @_ZNSt6vectorIP5QBodySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %110) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %110) #9
  br label %1325

1325:                                             ; preds = %1324
  %1326 = load i32, ptr %109, align 4, !tbaa !56
  %1327 = add nsw i32 %1326, 1
  store i32 %1327, ptr %109, align 4, !tbaa !56
  br label %929, !llvm.loop !101

1328:                                             ; preds = %1299, %1168
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #9
  call void @_ZNSt6vectorIP5QBodySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %110) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #9
  br label %1359

1329:                                             ; preds = %935
  br label %1330

1330:                                             ; preds = %1329, %921
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #9
  %1331 = getelementptr inbounds %class.QWorld, ptr %153, i32 0, i32 18
  store ptr %1331, ptr %149, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #9
  %1332 = load ptr, ptr %149, align 8, !tbaa !5
  %1333 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1332) #9
  %1334 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %150, i32 0, i32 0
  store ptr %1333, ptr %1334, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #9
  %1335 = load ptr, ptr %149, align 8, !tbaa !5
  %1336 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1335) #9
  %1337 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %151, i32 0, i32 0
  store ptr %1336, ptr %1337, align 8
  br label %1338

1338:                                             ; preds = %1356, %1330
  %1339 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %150, ptr noundef nonnull align 8 dereferenceable(8) %151) #9
  br i1 %1339, label %1341, label %1340

1340:                                             ; preds = %1338
  store i32 74, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %1358

1341:                                             ; preds = %1338
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #9
  %1342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %150) #9
  %1343 = load ptr, ptr %1342, align 8, !tbaa !5
  store ptr %1343, ptr %152, align 8, !tbaa !5
  %1344 = load ptr, ptr %152, align 8, !tbaa !5
  %1345 = getelementptr inbounds %class.QBody, ptr %1344, i32 0, i32 40
  %1346 = call noundef zeroext i1 @_ZStneIvJP5QBodyEEbRKSt8functionIFT_DpT0_EEDn(ptr noundef nonnull align 8 dereferenceable(32) %1345, ptr null) #9
  br i1 %1346, label %1347, label %1351

1347:                                             ; preds = %1341
  %1348 = load ptr, ptr %152, align 8, !tbaa !5
  %1349 = getelementptr inbounds %class.QBody, ptr %1348, i32 0, i32 40
  %1350 = load ptr, ptr %152, align 8, !tbaa !5
  call void @_ZNKSt8functionIFvP5QBodyEEclES1_(ptr noundef nonnull align 8 dereferenceable(32) %1349, ptr noundef %1350)
  br label %1351

1351:                                             ; preds = %1347, %1341
  %1352 = load ptr, ptr %152, align 8, !tbaa !5
  %1353 = load ptr, ptr %1352, align 8, !tbaa !50
  %1354 = getelementptr inbounds ptr, ptr %1353, i64 6
  %1355 = load ptr, ptr %1354, align 8
  call void %1355(ptr noundef nonnull align 8 dereferenceable(293) %1352)
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  br label %1356

1356:                                             ; preds = %1351
  %1357 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %150) #9
  br label %1338

1358:                                             ; preds = %1340, %159
  ret void

1359:                                             ; preds = %1328, %819
  %1360 = load ptr, ptr %40, align 8
  %1361 = load i32, ptr %41, align 4
  %1362 = insertvalue { ptr, i32 } poison, ptr %1360, 0
  %1363 = insertvalue { ptr, i32 } %1362, i32 %1361, 1
  resume { ptr, i32 } %1363

1364:                                             ; preds = %855, %810, %577, %250, %213, %184
  unreachable
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS3_SaIS3_EEEEPFbPKS2_SA_EEvT_SD_T0_(ptr, ptr, ptr noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6QWorld20SortBodiesHorizontalEPK5QBodyS2_(ptr noundef, ptr noundef) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272)) #5 align 2

declare void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293)) #0

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

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

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

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

declare void @_ZN5QMesh22UpdatePolygonBisectorsEv(ptr noundef nonnull align 8 dereferenceable(256)) #0

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind noalias writable sret(%"class.std::vector.74") align 8, ptr noundef, ptr noundef) #5 align 2

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

declare void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, ptr noundef) unnamed_addr #0

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef, ptr noundef, i1 noundef zeroext) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind noalias writable sret(%class.QAABB) align 4, ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28)) #7 align 2

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

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

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

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

declare void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64)) #0

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

declare void @_ZN9QManifold26SolveFrictionAndVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(64)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody24GetSelfCollisionsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

declare noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293)) #0

declare noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293), i32 noundef) #0

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

declare void @_ZN10QCollision19CircleAndCircleSelfERSt6vectorIP9QParticleSaIS2_EERS0_IPNS_7ContactESaIS7_EEf(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), float noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

declare void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef byval(%class.QAABB) align 8, ptr noundef nonnull align 8 dereferenceable(24), float noundef, i1 noundef zeroext) #0

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

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

declare noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody24GetAreaPreservingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

declare void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN5QMesh20GetCollisionBehaviorEv(ptr noundef nonnull align 8 dereferenceable(256)) #5 align 2

declare void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody23GetShapeMatchingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

declare void @_ZN9QSoftBody18ApplyShapeMatchingEv(ptr noundef nonnull align 8 dereferenceable(360)) #0

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

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

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

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

declare void @_ZN8QRaycast14UpdateContactsEv(ptr noundef nonnull align 8 dereferenceable(72)) #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

declare void @_ZN9QAreaBody11CheckBodiesEv(ptr noundef nonnull align 8 dereferenceable(432)) #0

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN5QBody11GetRotationEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN5QBody19GetPreviousRotationEv(ptr noundef nonnull align 8 dereferenceable(293)) #1 align 2

declare noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256)) #0

declare noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290)) #7 align 2

declare noundef ptr @_ZN9QParticle25SetPreviousGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290), <2 x float>) #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { mustprogress nounwind 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 #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { 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, !41, i64 208}
!10 = !{!"_ZTS6QWorld", !11, i64 0, !15, i64 24, !19, i64 48, !23, i64 72, !27, i64 96, !31, i64 120, !37, i64 176, !6, i64 200, !41, i64 208, !42, i64 212, !41, i64 220, !41, i64 221, !43, i64 224, !36, i64 228, !36, i64 232, !36, i64 236, !43, i64 240, !43, i64 244, !44, i64 248}
!11 = !{!"_ZTSSt6vectorIP6QJointSaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIP6QJointSaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!"_ZTSSt6vectorIP7QSpringSaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIP7QSpringSaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSSt6vectorIP8QRaycastSaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIP8QRaycastSaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTSSt6vectorIP6QGizmoSaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIP6QGizmoSaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!"_ZTSSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE", !32, i64 0}
!32 = !{!"_ZTSSt10_HashtableISt4pairIP5QBodyS2_ES3_SaIS3_ENSt8__detail9_IdentityENS1_13BodyPairEqualENS1_12BodyPairHashENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !33, i64 8, !34, i64 16, !33, i64 24, !35, i64 32, !6, i64 48}
!33 = !{!"long", !7, i64 0}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !33, i64 8}
!36 = !{!"float", !7, i64 0}
!37 = !{!"_ZTSSt6vectorI9QManifoldSaIS0_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseI9QManifoldSaIS0_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!41 = !{!"bool", !7, i64 0}
!42 = !{!"_ZTS7QVector", !36, i64 0, !36, i64 4}
!43 = !{!"int", !7, i64 0}
!44 = !{!"_ZTSSt6vectorIP5QBodySaIS1_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIP5QBodySaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{i8 0, i8 2}
!49 = !{}
!50 = !{!51, !51, i64 0}
!51 = !{!"vtable pointer", !8, i64 0}
!52 = !{!10, !43, i64 240}
!53 = !{!10, !43, i64 244}
!54 = !{!10, !41, i64 221}
!55 = !{!10, !6, i64 200}
!56 = !{!43, !43, i64 0}
!57 = !{!10, !43, i64 224}
!58 = !{!59, !6, i64 0}
!59 = !{!"_ZTSSt4pairIP5QBodyS1_E", !6, i64 0, !6, i64 8}
!60 = !{!59, !6, i64 8}
!61 = !{!33, !33, i64 0}
!62 = !{!42, !36, i64 0}
!63 = !{!42, !36, i64 4}
!64 = distinct !{!64, !65}
!65 = !{!"llvm.loop.mustprogress"}
!66 = distinct !{!66, !65}
!67 = distinct !{!67, !65}
!68 = distinct !{!68, !65}
!69 = !{!70, !81, i64 288}
!70 = !{!"_ZTS5QBody", !36, i64 8, !36, i64 12, !6, i64 16, !42, i64 24, !42, i64 32, !36, i64 40, !36, i64 44, !71, i64 48, !72, i64 76, !41, i64 80, !41, i64 81, !41, i64 82, !36, i64 84, !73, i64 88, !41, i64 92, !36, i64 96, !41, i64 100, !41, i64 101, !42, i64 104, !36, i64 112, !36, i64 116, !36, i64 120, !36, i64 124, !36, i64 128, !43, i64 132, !43, i64 136, !41, i64 140, !41, i64 141, !41, i64 142, !43, i64 144, !43, i64 148, !43, i64 152, !41, i64 156, !74, i64 160, !74, i64 192, !76, i64 224, !41, i64 256, !77, i64 264, !81, i64 288, !41, i64 292}
!71 = !{!"_ZTS5QAABB", !42, i64 0, !42, i64 8, !42, i64 16, !36, i64 24}
!72 = !{!"_ZTSN5QBody5ModesE", !7, i64 0}
!73 = !{!"_ZTSN5QBody9BodyTypesE", !7, i64 0}
!74 = !{!"_ZTSSt8functionIFvP5QBodyEE", !75, i64 0, !6, i64 24}
!75 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!76 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !75, i64 0, !6, i64 24}
!77 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !78, i64 0}
!78 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !79, i64 0}
!79 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !80, i64 0}
!80 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!81 = !{!"_ZTSN5QBody16SimulationModelsE", !7, i64 0}
!82 = !{i64 0, i64 4, !83, i64 4, i64 4, !83, i64 8, i64 4, !83, i64 12, i64 4, !83, i64 16, i64 4, !83, i64 20, i64 4, !83, i64 24, i64 4, !83}
!83 = !{!36, !36, i64 0}
!84 = distinct !{!84, !65}
!85 = distinct !{!85, !65}
!86 = distinct !{!86, !65}
!87 = !{!70, !41, i64 142}
!88 = !{!10, !41, i64 220}
!89 = !{!41, !41, i64 0}
!90 = !{!10, !36, i64 232}
!91 = !{!10, !36, i64 236}
!92 = distinct !{!92, !65}
!93 = distinct !{!93, !65}
!94 = !{!70, !43, i64 148}
!95 = !{!70, !43, i64 152}
!96 = !{i64 0, i64 4, !83, i64 4, i64 4, !83}
!97 = !{!70, !36, i64 40}
!98 = !{!70, !36, i64 44}
!99 = distinct !{!99, !65}
!100 = distinct !{!100, !65}
!101 = distinct !{!101, !65}


; 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.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.43" = type { ptr }
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"class.std::vector.74" = type { %"struct.std::_Vector_base.75" }
%"struct.std::_Vector_base.75" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QManifold = type { %struct.QVector, float, float, i8, ptr, ptr, %"class.std::vector.74" }
%struct.QVector = type { float, float }
%class.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%"class.__gnu_cxx::__normal_iterator.79" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.80" = type { ptr }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

declare i32 @__gxx_personality_v0(...)

declare noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv() local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6QWorld11ClearGizmosEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld6UpdateEv(ptr noundef nonnull align 8 dereferenceable(272) %0) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.43", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.43", align 8
  %14 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %15 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %16 = alloca %"class.std::vector.74", align 8
  %17 = alloca %class.QManifold, align 8
  %18 = alloca %class.QAABB, align 4
  %19 = alloca %class.QAABB, align 4
  %20 = alloca %class.QAABB, align 4
  %21 = alloca %class.QAABB, align 4
  %22 = alloca %class.QAABB, align 4
  %23 = alloca %class.QAABB, align 4
  %24 = alloca %"class.std::vector.74", align 8
  %25 = alloca %class.QManifold, align 8
  %26 = alloca %"class.std::vector.74", align 8
  %27 = alloca %class.QManifold, align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.79", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %34 = alloca %class.QAABB, align 4
  %35 = alloca %"class.std::vector.74", align 8
  %36 = alloca %class.QAABB, align 8
  %37 = alloca %class.QManifold, align 8
  %38 = alloca %class.QManifold, align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.80", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.80", align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %47 = alloca %"class.std::vector.30", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %50 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %51 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %53 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %55 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %58 = getelementptr inbounds i8, ptr %0, i64 208
  %59 = load i8, ptr %58, align 8, !tbaa !5, !range !47, !noundef !48
  %60 = icmp eq i8 %59, 0
  br i1 %60, label %566, label %61

61:                                               ; preds = %1
  tail call void @_ZN6QWorld11ClearGizmosEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  %62 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #9
  %63 = tail call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %63, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %64 = tail call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %64, ptr %3, align 8
  %65 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br i1 %65, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %75, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  %66 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %66, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  %67 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %67, ptr %5, align 8
  %68 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  br i1 %68, label %.lr.ph368, label %._crit_edge369

.lr.ph:                                           ; preds = %61, %75
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  %70 = load ptr, ptr %69, align 8, !tbaa !49
  %71 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %70)
  br i1 %71, label %72, label %75

72:                                               ; preds = %.lr.ph
  %73 = load ptr, ptr %70, align 8, !tbaa !50
  %74 = load ptr, ptr %73, align 8
  call void %74(ptr noundef nonnull align 8 dereferenceable(293) %70)
  br label %75

75:                                               ; preds = %.lr.ph, %72
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #9
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  br i1 %77, label %.lr.ph, label %._crit_edge

._crit_edge369:                                   ; preds = %88, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  %78 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %78, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  %79 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %79, ptr %7, align 8
  %80 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  br i1 %80, label %.lr.ph371, label %._crit_edge372

.lr.ph368:                                        ; preds = %._crit_edge, %88
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  %82 = load ptr, ptr %81, align 8, !tbaa !49
  %83 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %82)
  br i1 %83, label %84, label %88

84:                                               ; preds = %.lr.ph368
  %85 = load ptr, ptr %82, align 8, !tbaa !50
  %86 = getelementptr inbounds i8, ptr %85, i64 8
  %87 = load ptr, ptr %86, align 8
  call void %87(ptr noundef nonnull align 8 dereferenceable(293) %82)
  br label %88

88:                                               ; preds = %.lr.ph368, %84
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  %90 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  br i1 %90, label %.lr.ph368, label %._crit_edge369

._crit_edge372:                                   ; preds = %106, %._crit_edge369
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  %91 = getelementptr inbounds i8, ptr %0, i64 240
  store i32 0, ptr %91, align 8, !tbaa !52
  %92 = getelementptr inbounds i8, ptr %0, i64 244
  store i32 0, ptr %92, align 4, !tbaa !53
  %93 = getelementptr inbounds i8, ptr %0, i64 221
  %94 = load i8, ptr %93, align 1, !tbaa !54, !range !47, !noundef !48
  %95 = trunc nuw i8 %94 to i1
  br i1 %95, label %109, label %127

.lr.ph371:                                        ; preds = %._crit_edge369, %106
  %96 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #9
  %97 = load ptr, ptr %96, align 8, !tbaa !49
  %98 = call noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293) %97)
  br i1 %98, label %99, label %106

99:                                               ; preds = %.lr.ph371
  %100 = load ptr, ptr %97, align 8, !tbaa !50
  %101 = getelementptr inbounds i8, ptr %100, i64 40
  %102 = load ptr, ptr %101, align 8
  call void %102(ptr noundef nonnull align 8 dereferenceable(293) %97)
  %103 = getelementptr inbounds i8, ptr %97, i64 160
  %104 = call noundef zeroext i1 @_ZStneIvJP5QBodyEEbRKSt8functionIFT_DpT0_EEDn(ptr noundef nonnull align 8 dereferenceable(32) %103, ptr null) #9
  br i1 %104, label %105, label %106

105:                                              ; preds = %99
  call void @_ZNKSt8functionIFvP5QBodyEEclES1_(ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull %97)
  br label %106

106:                                              ; preds = %99, %105, %.lr.ph371
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #9
  %108 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  br i1 %108, label %.lr.ph371, label %._crit_edge372

109:                                              ; preds = %._crit_edge372
  %110 = getelementptr inbounds i8, ptr %0, i64 200
  %111 = load ptr, ptr %110, align 8, !tbaa !55
  %.not = icmp eq ptr %111, null
  br i1 %.not, label %124, label %112

112:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  %113 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %113, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  %114 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %114, ptr %9, align 8
  %115 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br i1 %115, label %.lr.ph374, label %._crit_edge375

._crit_edge375:                                   ; preds = %.lr.ph374, %112
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  br label %127

.lr.ph374:                                        ; preds = %112, %.lr.ph374
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  %117 = load ptr, ptr %116, align 8, !tbaa !49
  %118 = load ptr, ptr %110, align 8, !tbaa !55
  %119 = load ptr, ptr %118, align 8, !tbaa !50
  %120 = getelementptr inbounds i8, ptr %119, i64 16
  %121 = load ptr, ptr %120, align 8
  call void %121(ptr noundef nonnull align 8 dereferenceable(72) %118, ptr noundef %117)
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  %123 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br i1 %123, label %.lr.ph374, label %._crit_edge375

124:                                              ; preds = %109
  %125 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %126 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  call void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS3_SaIS3_EEEEPFbPKS2_SA_EEvT_SD_T0_(ptr %125, ptr %126, ptr noundef nonnull @_ZN6QWorld20SortBodiesHorizontalEPK5QBodyS2_)
  br label %127

127:                                              ; preds = %._crit_edge375, %124, %._crit_edge372
  %128 = getelementptr inbounds i8, ptr %0, i64 224
  %129 = load i32, ptr %128, align 8, !tbaa !56
  %.not448 = icmp eq i32 %129, 0
  br i1 %.not448, label %._crit_edge416, label %.lr.ph415

.lr.ph415:                                        ; preds = %127
  %130 = getelementptr inbounds i8, ptr %0, i64 176
  %131 = getelementptr inbounds i8, ptr %27, i64 40
  %132 = getelementptr inbounds i8, ptr %0, i64 200
  %133 = getelementptr inbounds i8, ptr %17, i64 40
  %134 = getelementptr inbounds i8, ptr %25, i64 40
  %135 = getelementptr inbounds i8, ptr %37, i64 40
  %136 = getelementptr inbounds i8, ptr %38, i64 40
  br label %140

._crit_edge416:                                   ; preds = %._crit_edge412, %127
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #9
  %137 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %137, ptr %39, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #9
  %138 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %138, ptr %40, align 8
  %139 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  br i1 %139, label %.lr.ph418, label %._crit_edge419

140:                                              ; preds = %.lr.ph415, %._crit_edge412
  %.0241413 = phi i32 [ 0, %.lr.ph415 ], [ %281, %._crit_edge412 ]
  %141 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  call void @_ZN11QObjectPoolIN10QCollision7ContactEE7FreeAllEv(ptr noundef nonnull align 8 dereferenceable(40) %141)
  call void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  %142 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %142, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %143 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %143, ptr %11, align 8
  %144 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %144, label %.lr.ph380, label %._crit_edge381

._crit_edge381:                                   ; preds = %._crit_edge378, %140
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  call void @_ZNSt6vectorI9QManifoldSaIS0_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #9
  %145 = load i8, ptr %93, align 1, !tbaa !54, !range !47, !noundef !48
  %146 = trunc nuw i8 %145 to i1
  br i1 %146, label %160, label %.preheader359

.preheader359:                                    ; preds = %._crit_edge381
  %147 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %.not449 = icmp eq i64 %147, 0
  br i1 %.not449, label %.loopexit358, label %.lr.ph386

.lr.ph380:                                        ; preds = %140, %._crit_edge378
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  %149 = load ptr, ptr %148, align 8, !tbaa !49
  call void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293) %149)
  %150 = getelementptr inbounds i8, ptr %149, i64 264
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  %151 = call ptr @_ZNSt6vectorIP5QMeshSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %150) #9
  store ptr %151, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  %152 = call ptr @_ZNSt6vectorIP5QMeshSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %150) #9
  store ptr %152, ptr %13, align 8
  %153 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QMeshSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  br i1 %153, label %.lr.ph377, label %._crit_edge378

._crit_edge378:                                   ; preds = %.lr.ph377, %.lr.ph380
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  %155 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %155, label %.lr.ph380, label %._crit_edge381

.lr.ph377:                                        ; preds = %.lr.ph380, %.lr.ph377
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QMeshSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  %157 = load ptr, ptr %156, align 8, !tbaa !49
  call void @_ZN5QMesh22UpdatePolygonBisectorsEv(ptr noundef nonnull align 8 dereferenceable(256) %157)
  %158 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QMeshSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  %159 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QMeshSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  br i1 %159, label %.lr.ph377, label %._crit_edge378

160:                                              ; preds = %._crit_edge381
  %161 = load ptr, ptr %132, align 8, !tbaa !55
  %.not311 = icmp eq ptr %161, null
  br i1 %.not311, label %188, label %162

162:                                              ; preds = %160
  %163 = load ptr, ptr %161, align 8, !tbaa !50
  %164 = getelementptr inbounds i8, ptr %163, i64 8
  %165 = load ptr, ptr %164, align 8
  %166 = call noundef nonnull align 8 dereferenceable(56) ptr %165(ptr noundef nonnull align 8 dereferenceable(72) %161)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %167 = call ptr @_ZNSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %166) #9
  store ptr %167, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %168 = call ptr @_ZNSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %166) #9
  store ptr %168, ptr %15, align 8
  %169 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIP5QBodyS3_ELb1EEES7_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  br i1 %169, label %.lr.ph388, label %._crit_edge389

._crit_edge389:                                   ; preds = %185, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %.loopexit358

.lr.ph388:                                        ; preds = %162, %185
  %170 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIP5QBodyS3_ELb1ELb1EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  %171 = load ptr, ptr %170, align 8, !tbaa !57
  %172 = getelementptr inbounds i8, ptr %170, i64 8
  %173 = load ptr, ptr %172, align 8, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #9
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.74") align 8 %16, ptr noundef %171, ptr noundef %173)
  %174 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  %.not325 = icmp eq i64 %174, 0
  br i1 %.not325, label %185, label %175

175:                                              ; preds = %.lr.ph388
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #9
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %17, ptr noundef %171, ptr noundef %173)
          to label %176 unwind label %180

176:                                              ; preds = %175
  %177 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %178 unwind label %182

178:                                              ; preds = %176
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull align 8 dereferenceable(64) %17)
          to label %179 unwind label %182

179:                                              ; preds = %178
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #9
  br label %185

180:                                              ; preds = %175
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %184

182:                                              ; preds = %178, %176
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %17) #9
  br label %184

184:                                              ; preds = %182, %180
  %.pn326 = phi { ptr, i32 } [ %183, %182 ], [ %181, %180 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  br label %567

185:                                              ; preds = %179, %.lr.ph388
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #9
  %186 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIP5QBodyS3_ELb1ELb1EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  %187 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIP5QBodyS3_ELb1EEES7_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  br i1 %187, label %.lr.ph388, label %._crit_edge389

188:                                              ; preds = %160
  %189 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %.not450 = icmp eq i64 %189, 0
  br i1 %.not450, label %.loopexit358, label %.lr.ph397

.lr.ph397:                                        ; preds = %188, %._crit_edge393
  %190 = phi i64 [ %194, %._crit_edge393 ], [ 0, %188 ]
  %.0264395 = phi i32 [ %193, %._crit_edge393 ], [ 0, %188 ]
  %191 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %190) #9
  %192 = load ptr, ptr %191, align 8, !tbaa !49
  %193 = add i32 %.0264395, 1
  %194 = zext i32 %193 to i64
  %195 = icmp ugt i64 %189, %194
  br i1 %195, label %.lr.ph392, label %.loopexit358

.lr.ph392:                                        ; preds = %.lr.ph397, %229
  %196 = phi i64 [ %231, %229 ], [ %194, %.lr.ph397 ]
  %.0265390 = phi i32 [ %230, %229 ], [ %193, %.lr.ph397 ]
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %196) #9
  %198 = load ptr, ptr %197, align 8, !tbaa !49
  %199 = call noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef %192, ptr noundef %198, i1 noundef zeroext true)
  br i1 %199, label %200, label %229

200:                                              ; preds = %.lr.ph392
  %201 = load i32, ptr %91, align 8, !tbaa !52
  %202 = add nsw i32 %201, 1
  store i32 %202, ptr %91, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %18) #9
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %18, ptr noundef nonnull align 8 dereferenceable(293) %192)
  %203 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %18)
  %.sroa.0171.0.vec.extract = extractelement <2 x float> %203, i64 0
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %19) #9
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %19, ptr noundef nonnull align 8 dereferenceable(293) %198)
  %204 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %19)
  %.sroa.0170.0.vec.extract = extractelement <2 x float> %204, i64 0
  %205 = fcmp ult float %.sroa.0171.0.vec.extract, %.sroa.0170.0.vec.extract
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %18) #9
  br i1 %205, label %._crit_edge393, label %206

206:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %20) #9
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %20, ptr noundef nonnull align 8 dereferenceable(293) %192)
  %207 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %20)
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %21) #9
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %21, ptr noundef nonnull align 8 dereferenceable(293) %198)
  %208 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %21)
  %209 = fcmp ugt <2 x float> %207, %208
  %210 = extractelement <2 x i1> %209, i64 1
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %22) #9
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %23) #9
  br i1 %210, label %.critedge, label %211

211:                                              ; preds = %206
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %22, ptr noundef nonnull align 8 dereferenceable(293) %192)
  %212 = call <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28) %22)
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %23, ptr noundef nonnull align 8 dereferenceable(293) %198)
  %213 = call <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28) %23)
  %214 = fcmp ult <2 x float> %212, %213
  %215 = extractelement <2 x i1> %214, i64 1
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %23) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %20) #9
  br i1 %215, label %229, label %216

216:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #9
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.74") align 8 %24, ptr noundef nonnull %192, ptr noundef nonnull %198)
  %217 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  %.not312 = icmp eq i64 %217, 0
  br i1 %.not312, label %228, label %218

218:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %25) #9
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %25, ptr noundef nonnull %192, ptr noundef nonnull %198)
          to label %219 unwind label %223

219:                                              ; preds = %218
  %220 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %134, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %221 unwind label %225

221:                                              ; preds = %219
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull align 8 dereferenceable(64) %25)
          to label %222 unwind label %225

222:                                              ; preds = %221
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %25) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #9
  br label %228

223:                                              ; preds = %218
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %227

225:                                              ; preds = %221, %219
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %25) #9
  br label %227

227:                                              ; preds = %225, %223
  %.pn313 = phi { ptr, i32 } [ %226, %225 ], [ %224, %223 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #9
  br label %567

228:                                              ; preds = %222, %216
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #9
  br label %229

.critedge:                                        ; preds = %206
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %23) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %20) #9
  br label %229

229:                                              ; preds = %.lr.ph392, %211, %228, %.critedge
  %230 = add i32 %.0265390, 1
  %231 = zext i32 %230 to i64
  %232 = icmp ugt i64 %189, %231
  br i1 %232, label %.lr.ph392, label %._crit_edge393, !llvm.loop !60

._crit_edge393:                                   ; preds = %229, %200
  br i1 %195, label %.lr.ph397, label %.loopexit358, !llvm.loop !62

.loopexit357:                                     ; preds = %261, %.lr.ph386
  %233 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %234 = icmp ugt i64 %233, %239
  br i1 %234, label %.lr.ph386, label %.loopexit358, !llvm.loop !63

.lr.ph386:                                        ; preds = %.preheader359, %.loopexit357
  %235 = phi i64 [ %239, %.loopexit357 ], [ 0, %.preheader359 ]
  %.0268385 = phi i32 [ %238, %.loopexit357 ], [ 0, %.preheader359 ]
  %236 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %235) #9
  %237 = load ptr, ptr %236, align 8, !tbaa !49
  %238 = add i32 %.0268385, 1
  %239 = zext i32 %238 to i64
  %240 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %241 = icmp ugt i64 %240, %239
  br i1 %241, label %.lr.ph384, label %.loopexit357

.lr.ph384:                                        ; preds = %.lr.ph386, %261
  %242 = phi i64 [ %263, %261 ], [ %239, %.lr.ph386 ]
  %.0269382 = phi i32 [ %262, %261 ], [ %238, %.lr.ph386 ]
  %243 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QBodySaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %242) #9
  %244 = load ptr, ptr %243, align 8, !tbaa !49
  %245 = load i32, ptr %91, align 8, !tbaa !52
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %91, align 8, !tbaa !52
  %247 = call noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef %237, ptr noundef %244, i1 noundef zeroext true)
  br i1 %247, label %248, label %261

248:                                              ; preds = %.lr.ph384
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #9
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.74") align 8 %26, ptr noundef %237, ptr noundef %244)
  %249 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #9
  %.not308 = icmp eq i64 %249, 0
  br i1 %.not308, label %260, label %250

250:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %27) #9
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %27, ptr noundef %237, ptr noundef %244)
          to label %251 unwind label %255

251:                                              ; preds = %250
  %252 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %131, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %253 unwind label %257

253:                                              ; preds = %251
  invoke void @_ZNSt6vectorI9QManifoldSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull align 8 dereferenceable(64) %27)
          to label %254 unwind label %257

254:                                              ; preds = %253
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %27) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #9
  br label %260

255:                                              ; preds = %250
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %259

257:                                              ; preds = %253, %251
  %258 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %27) #9
  br label %259

259:                                              ; preds = %257, %255
  %.pn309 = phi { ptr, i32 } [ %258, %257 ], [ %256, %255 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #9
  br label %567

260:                                              ; preds = %254, %248
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #9
  br label %261

261:                                              ; preds = %.lr.ph384, %260
  %262 = add i32 %.0269382, 1
  %263 = zext i32 %262 to i64
  %264 = call noundef i64 @_ZNKSt6vectorIP5QBodySaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  %265 = icmp ugt i64 %264, %263
  br i1 %265, label %.lr.ph384, label %.loopexit357, !llvm.loop !64

.loopexit358:                                     ; preds = %.loopexit357, %.lr.ph397, %._crit_edge393, %.preheader359, %188, %._crit_edge389
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #9
  %266 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #9
  store ptr %266, ptr %28, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #9
  %267 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #9
  store ptr %267, ptr %29, align 8
  %268 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  br i1 %268, label %.lr.ph399, label %._crit_edge400

._crit_edge400:                                   ; preds = %.lr.ph399, %.loopexit358
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #9
  %269 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #9
  store ptr %269, ptr %30, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #9
  %270 = call ptr @_ZNSt6vectorI9QManifoldSaIS0_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #9
  store ptr %270, ptr %31, align 8
  %271 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #9
  br i1 %271, label %.lr.ph402, label %._crit_edge403

.lr.ph399:                                        ; preds = %.loopexit358, %.lr.ph399
  %272 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  call void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %272)
  %273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #9
  %274 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #9
  br i1 %274, label %.lr.ph399, label %._crit_edge400

._crit_edge403:                                   ; preds = %.lr.ph402, %._crit_edge400
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #9
  %275 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %275, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #9
  %276 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %276, ptr %33, align 8
  %277 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #9
  br i1 %277, label %.lr.ph411, label %._crit_edge412

.lr.ph402:                                        ; preds = %._crit_edge400, %.lr.ph402
  %278 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  call void @_ZN9QManifold26SolveFrictionAndVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(64) %278)
  %279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIP9QManifoldSt6vectorIS1_SaIS1_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #9
  %280 = call noundef zeroext i1 @_ZN9__gnu_cxxneIP9QManifoldSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #9
  br i1 %280, label %.lr.ph402, label %._crit_edge403

._crit_edge412:                                   ; preds = %.critedge331, %._crit_edge403
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #9
  %281 = add nuw i32 %.0241413, 1
  %282 = load i32, ptr %128, align 8, !tbaa !56
  %283 = icmp ult i32 %281, %282
  br i1 %283, label %140, label %._crit_edge416, !llvm.loop !65

.lr.ph411:                                        ; preds = %._crit_edge403, %.critedge331
  %284 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #9
  %285 = load ptr, ptr %284, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %34) #9
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %34, ptr noundef nonnull align 8 dereferenceable(293) %285)
  %286 = getelementptr inbounds i8, ptr %285, i64 288
  %287 = load i32, ptr %286, align 8, !tbaa !66
  %.not315 = icmp eq i32 %287, 1
  br i1 %.not315, label %.critedge331, label %288

288:                                              ; preds = %.lr.ph411
  %289 = call noundef zeroext i1 @_ZN9QSoftBody24GetSelfCollisionsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %285)
  br i1 %289, label %.preheader356, label %.critedge331

.preheader356:                                    ; preds = %288
  %290 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %285)
  %291 = icmp sgt i32 %290, 0
  br i1 %291, label %.lr.ph409, label %.critedge331

.lr.ph409:                                        ; preds = %.preheader356, %._crit_edge407
  %.0270408 = phi i32 [ %296, %._crit_edge407 ], [ 0, %.preheader356 ]
  %292 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %285, i32 noundef %.0270408)
  %293 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %285)
  %294 = icmp sgt i32 %293, 0
  br i1 %294, label %.lr.ph406, label %._crit_edge407

.lr.ph406:                                        ; preds = %.lr.ph409
  %295 = getelementptr inbounds i8, ptr %292, i64 96
  br label %299

._crit_edge407:                                   ; preds = %354, %.lr.ph409
  %296 = add nuw nsw i32 %.0270408, 1
  %297 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %285)
  %298 = icmp slt i32 %296, %297
  br i1 %298, label %.lr.ph409, label %.critedge331, !llvm.loop !79

299:                                              ; preds = %.lr.ph406, %354
  %.0271404 = phi i32 [ 0, %.lr.ph406 ], [ %355, %354 ]
  %300 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %285, i32 noundef %.0271404)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %35) #9
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %301 = icmp eq ptr %292, %300
  br i1 %301, label %302, label %306

302:                                              ; preds = %299
  %303 = call noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360) %285)
  invoke void @_ZN10QCollision19CircleAndCircleSelfERSt6vectorIP9QParticleSaIS2_EERS0_IPNS_7ContactESaIS7_EEf(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef nonnull align 8 dereferenceable(24) %35, float noundef %303)
          to label %308 unwind label %304

304:                                              ; preds = %327, %325, %320, %306, %302
  %305 = landingpad { ptr, i32 }
          cleanup
  br label %358

306:                                              ; preds = %299
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(28) %36, ptr noundef nonnull align 4 dereferenceable(28) %34, i64 28, i1 false), !tbaa.struct !80
  %307 = call noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360) %285)
  invoke void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24) %292, ptr noundef nonnull align 8 dereferenceable(24) %300, ptr noundef nonnull byval(%class.QAABB) align 8 %36, ptr noundef nonnull align 8 dereferenceable(24) %35, float noundef %307, i1 noundef zeroext false)
          to label %308 unwind label %304

308:                                              ; preds = %306, %302
  %309 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %.not316 = icmp eq i64 %309, 0
  br i1 %.not316, label %320, label %310

310:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %37) #9
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %37, ptr noundef nonnull %285, ptr noundef nonnull %285)
          to label %311 unwind label %315

311:                                              ; preds = %310
  %312 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %135, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %313 unwind label %317

313:                                              ; preds = %311
  invoke void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %37)
          to label %314 unwind label %317

314:                                              ; preds = %313
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %37) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %37) #9
  br label %320

315:                                              ; preds = %310
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %319

317:                                              ; preds = %313, %311
  %318 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %37) #9
  br label %319

319:                                              ; preds = %317, %315
  %.pn317 = phi { ptr, i32 } [ %318, %317 ], [ %316, %315 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %37) #9
  br label %358

320:                                              ; preds = %314, %308
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %321 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %292, ptr noundef %300, i32 noundef 2, i32 noundef 2)
          to label %322 unwind label %304

322:                                              ; preds = %320
  br i1 %321, label %323, label %327

323:                                              ; preds = %322
  %324 = call noundef zeroext i1 @_ZN9QSoftBody24GetAreaPreservingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %285)
  br i1 %324, label %342, label %325

325:                                              ; preds = %323
  %326 = getelementptr inbounds i8, ptr %300, i64 96
  invoke void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %295, ptr noundef nonnull align 8 dereferenceable(24) %326, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %342 unwind label %304

327:                                              ; preds = %322
  %328 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %292, ptr noundef %300, i32 noundef 0, i32 noundef 2)
          to label %329 unwind label %304

329:                                              ; preds = %327
  br i1 %328, label %330, label %342

330:                                              ; preds = %329
  %331 = invoke noundef i32 @_ZN5QMesh20GetCollisionBehaviorEv(ptr noundef nonnull align 8 dereferenceable(256) %292)
          to label %332 unwind label %338

332:                                              ; preds = %330
  %333 = icmp eq i32 %331, 0
  %334 = select i1 %333, ptr %292, ptr %300
  %335 = icmp eq ptr %334, %292
  %336 = select i1 %335, ptr %300, ptr %292
  %337 = getelementptr inbounds i8, ptr %336, i64 96
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %337, ptr noundef nonnull align 8 dereferenceable(24) %334, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %342 unwind label %340

338:                                              ; preds = %330
  %339 = landingpad { ptr, i32 }
          cleanup
  br label %358

340:                                              ; preds = %332
  %341 = landingpad { ptr, i32 }
          cleanup
  br label %358

342:                                              ; preds = %332, %329, %323, %325
  %343 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  %.not321 = icmp eq i64 %343, 0
  br i1 %.not321, label %354, label %344

344:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %38) #9
  invoke void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64) %38, ptr noundef nonnull %285, ptr noundef nonnull %285)
          to label %345 unwind label %349

345:                                              ; preds = %344
  %346 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(24) %136, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %347 unwind label %351

347:                                              ; preds = %345
  invoke void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64) %38)
          to label %348 unwind label %351

348:                                              ; preds = %347
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %38) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %38) #9
  br label %354

349:                                              ; preds = %344
  %350 = landingpad { ptr, i32 }
          cleanup
  br label %353

351:                                              ; preds = %347, %345
  %352 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %38) #9
  br label %353

353:                                              ; preds = %351, %349
  %.pn322 = phi { ptr, i32 } [ %352, %351 ], [ %350, %349 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %38) #9
  br label %358

354:                                              ; preds = %348, %342
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #9
  %355 = add nuw nsw i32 %.0271404, 1
  %356 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %285)
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %299, label %._crit_edge407, !llvm.loop !82

358:                                              ; preds = %338, %340, %353, %319, %304
  %.pn322.pn = phi { ptr, i32 } [ %.pn322, %353 ], [ %305, %304 ], [ %.pn317, %319 ], [ %341, %340 ], [ %339, %338 ]
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #9
  br label %567

.critedge331:                                     ; preds = %._crit_edge407, %.preheader356, %288, %.lr.ph411
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %34) #9
  %359 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #9
  %360 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #9
  br i1 %360, label %.lr.ph411, label %._crit_edge412

._crit_edge419:                                   ; preds = %376, %._crit_edge416
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #9
  %361 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %361, ptr %41, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #9
  %362 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %362, ptr %42, align 8
  %363 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  br i1 %363, label %.lr.ph421, label %._crit_edge422

.lr.ph418:                                        ; preds = %._crit_edge416, %376
  %364 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #9
  %365 = load ptr, ptr %364, align 8, !tbaa !49
  %366 = getelementptr inbounds i8, ptr %365, i64 142
  %367 = load i8, ptr %366, align 2, !tbaa !83, !range !47, !noundef !48
  %368 = trunc nuw i8 %367 to i1
  br i1 %368, label %376, label %369

369:                                              ; preds = %.lr.ph418
  %370 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %365)
  %.not306 = icmp eq i32 %370, 1
  br i1 %.not306, label %376, label %371

371:                                              ; preds = %369
  %372 = call noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293) %365)
  %.not307 = icmp eq i32 %372, 1
  br i1 %.not307, label %376, label %373

373:                                              ; preds = %371
  %374 = call noundef zeroext i1 @_ZN9QSoftBody23GetShapeMatchingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %365)
  br i1 %374, label %375, label %376

375:                                              ; preds = %373
  call void @_ZN9QSoftBody18ApplyShapeMatchingEv(ptr noundef nonnull align 8 dereferenceable(360) %365)
  br label %376

376:                                              ; preds = %369, %371, %375, %373, %.lr.ph418
  %377 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #9
  %378 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40) #9
  br i1 %378, label %.lr.ph418, label %._crit_edge419

._crit_edge422:                                   ; preds = %.lr.ph421, %._crit_edge419
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #9
  %379 = getelementptr inbounds i8, ptr %0, i64 48
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #9
  %380 = call ptr @_ZNSt6vectorIP8QRaycastSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %379) #9
  store ptr %380, ptr %43, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #9
  %381 = call ptr @_ZNSt6vectorIP8QRaycastSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %379) #9
  store ptr %381, ptr %44, align 8
  %382 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP8QRaycastSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  br i1 %382, label %.lr.ph424, label %._crit_edge425

.lr.ph421:                                        ; preds = %._crit_edge419, %.lr.ph421
  %383 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  %384 = load ptr, ptr %383, align 8, !tbaa !49
  call void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293) %384)
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #9
  %386 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #9
  br i1 %386, label %.lr.ph421, label %._crit_edge422

._crit_edge425:                                   ; preds = %.lr.ph424, %._crit_edge422
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #9
  %387 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %387, ptr %45, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #9
  %388 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %388, ptr %46, align 8
  %389 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  br i1 %389, label %.lr.ph427, label %._crit_edge428

.lr.ph424:                                        ; preds = %._crit_edge422, %.lr.ph424
  %390 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP8QRaycastSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  %391 = load ptr, ptr %390, align 8, !tbaa !49
  call void @_ZN8QRaycast14UpdateContactsEv(ptr noundef nonnull align 8 dereferenceable(72) %391)
  %392 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP8QRaycastSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #9
  %393 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP8QRaycastSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  br i1 %393, label %.lr.ph424, label %._crit_edge425

._crit_edge428:                                   ; preds = %402, %._crit_edge425
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #9
  %394 = getelementptr inbounds i8, ptr %0, i64 220
  %395 = load i8, ptr %394, align 4, !tbaa !84, !range !47, !noundef !48
  %396 = trunc nuw i8 %395 to i1
  br i1 %396, label %405, label %.loopexit355

.lr.ph427:                                        ; preds = %._crit_edge425, %402
  %397 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  %398 = load ptr, ptr %397, align 8, !tbaa !49
  %399 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %398)
  %400 = icmp eq i32 %399, 1
  br i1 %400, label %401, label %402

401:                                              ; preds = %.lr.ph427
  call void @_ZN9QAreaBody11CheckBodiesEv(ptr noundef nonnull align 8 dereferenceable(432) %398)
  br label %402

402:                                              ; preds = %401, %.lr.ph427
  %403 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #9
  %404 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #9
  br i1 %404, label %.lr.ph427, label %._crit_edge428

405:                                              ; preds = %._crit_edge428
  %406 = getelementptr inbounds i8, ptr %0, i64 96
  call void @_ZNSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #9
  call void @_ZN6QWorld15GenerateIslandsERSt6vectorIP5QBodySaIS2_EERS0_IS4_SaIS4_EE(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(24) %406)
  %407 = call noundef i64 @_ZNKSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #9
  %.not451 = icmp eq i64 %407, 0
  br i1 %.not451, label %.loopexit355, label %.lr.ph443

.lr.ph443:                                        ; preds = %405
  %408 = getelementptr inbounds i8, ptr %0, i64 232
  %409 = getelementptr inbounds i8, ptr %0, i64 236
  br label %410

410:                                              ; preds = %.lr.ph443, %548
  %indvars.iv = phi i64 [ 0, %.lr.ph443 ], [ %indvars.iv.next, %548 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %47) #9
  %411 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IP5QBodySaIS1_EESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %406, i64 noundef %indvars.iv) #9
  call void @_ZNSt6vectorIP5QBodySaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(24) %411)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #9
  %412 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %412, ptr %48, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #9
  %413 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %413, ptr %49, align 8
  %414 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  br i1 %414, label %.lr.ph430, label %.loopexit461

.lr.ph430:                                        ; preds = %410, %.thread337
  %415 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  %416 = load ptr, ptr %415, align 8, !tbaa !49
  %417 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %418 = icmp eq i32 %417, 0
  br i1 %418, label %419, label %.preheader354

419:                                              ; preds = %.lr.ph430
  %420 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %421 = call <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %422 = fsub <2 x float> %420, %421
  %423 = extractelement <2 x float> %422, i64 0
  %424 = call noundef float @_ZSt3absf(float noundef %423)
  %425 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %426 = call <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %427 = fsub <2 x float> %425, %426
  %428 = extractelement <2 x float> %427, i64 1
  %429 = call noundef float @_ZSt3absf(float noundef %428)
  %430 = call noundef float @_ZN5QBody11GetRotationEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %431 = call noundef float @_ZN5QBody19GetPreviousRotationEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
  %432 = fsub float %430, %431
  %433 = call noundef float @_ZSt3absf(float noundef %432)
  %434 = load float, ptr %408, align 8, !tbaa !85
  %435 = fcmp ogt float %424, %434
  %436 = fcmp ogt float %429, %434
  %or.cond = or i1 %435, %436
  %437 = load float, ptr %409, align 4
  %438 = fcmp ogt float %433, %437
  %or.cond334 = select i1 %or.cond, i1 true, i1 %438
  br i1 %or.cond334, label %.thread346, label %.thread337

.thread346:                                       ; preds = %419
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #9
  br label %537

.preheader354:                                    ; preds = %.lr.ph430, %472
  %.0286 = phi i32 [ %474, %472 ], [ 0, %.lr.ph430 ]
  %.0281 = phi i8 [ %.3284, %472 ], [ 0, %.lr.ph430 ]
  %439 = invoke noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %416)
          to label %440 unwind label %442

440:                                              ; preds = %.preheader354
  %441 = icmp slt i32 %.0286, %439
  br i1 %441, label %444, label %475

442:                                              ; preds = %.preheader354
  %443 = landingpad { ptr, i32 }
          cleanup
  br label %477

444:                                              ; preds = %440
  %445 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %416, i32 noundef %.0286)
          to label %.preheader352 unwind label %449

.preheader352:                                    ; preds = %444, %455
  %.0280 = phi i32 [ %469, %455 ], [ 0, %444 ]
  %446 = invoke noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256) %445)
          to label %447 unwind label %451

447:                                              ; preds = %.preheader352
  %448 = icmp slt i32 %.0280, %446
  br i1 %448, label %453, label %472

449:                                              ; preds = %444
  %450 = landingpad { ptr, i32 }
          cleanup
  br label %477

451:                                              ; preds = %.preheader352
  %452 = landingpad { ptr, i32 }
          cleanup
  br label %477

453:                                              ; preds = %447
  %454 = invoke noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256) %445, i32 noundef %.0280)
          to label %455 unwind label %470

455:                                              ; preds = %453
  %456 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %454)
  %457 = call <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %454)
  %458 = fsub <2 x float> %456, %457
  %459 = extractelement <2 x float> %458, i64 0
  %460 = call noundef float @_ZSt3absf(float noundef %459)
  %461 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %454)
  %462 = call <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %454)
  %463 = fsub <2 x float> %461, %462
  %464 = extractelement <2 x float> %463, i64 1
  %465 = call noundef float @_ZSt3absf(float noundef %464)
  %466 = load float, ptr %408, align 8, !tbaa !85
  %467 = fcmp ule float %460, %466
  %468 = fcmp ule float %465, %466
  %or.cond335.not = and i1 %467, %468
  %469 = add nuw nsw i32 %.0280, 1
  br i1 %or.cond335.not, label %.preheader352, label %472, !llvm.loop !86

470:                                              ; preds = %453
  %471 = landingpad { ptr, i32 }
          cleanup
  br label %477

472:                                              ; preds = %447, %455
  %.3284 = phi i8 [ 1, %455 ], [ %.0281, %447 ]
  %473 = trunc nuw i8 %.3284 to i1
  %474 = add nuw nsw i32 %.0286, 1
  br i1 %473, label %475, label %.preheader354, !llvm.loop !87

475:                                              ; preds = %440, %472
  %.4285 = phi i8 [ %.3284, %472 ], [ %.0281, %440 ]
  %476 = trunc nuw i8 %.4285 to i1
  br i1 %476, label %480, label %.thread337

477:                                              ; preds = %449, %470, %451, %442
  %.pn.pn.pn = phi { ptr, i32 } [ %443, %442 ], [ %450, %449 ], [ %471, %470 ], [ %452, %451 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #9
  br label %551

.thread337:                                       ; preds = %419, %475
  %478 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #9
  %479 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #9
  br i1 %479, label %.lr.ph430, label %.loopexit461

480:                                              ; preds = %475
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #9
  br label %537

.loopexit461:                                     ; preds = %.thread337, %410
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #9
  %481 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %481, ptr %50, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #9
  %482 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %482, ptr %51, align 8
  %483 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  br i1 %483, label %.lr.ph433, label %.critedge447

._crit_edge434:                                   ; preds = %.lr.ph433
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #9
  br i1 %spec.select, label %493, label %548

.lr.ph433:                                        ; preds = %.loopexit461, %.lr.ph433
  %.0272431 = phi i1 [ %spec.select, %.lr.ph433 ], [ true, %.loopexit461 ]
  %484 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %50) #9
  %485 = load ptr, ptr %484, align 8, !tbaa !49
  %486 = getelementptr inbounds i8, ptr %485, i64 148
  %487 = load <2 x i32>, ptr %486, align 4, !tbaa !88
  %488 = add nsw <2 x i32> %487, <i32 1, i32 1>
  store <2 x i32> %488, ptr %486, align 4, !tbaa !88
  %489 = extractelement <2 x i32> %487, i64 0
  %490 = icmp sgt i32 %489, 118
  %spec.select = select i1 %490, i1 %.0272431, i1 false
  %491 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %50) #9
  %492 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %51) #9
  br i1 %492, label %.lr.ph433, label %._crit_edge434

.critedge447:                                     ; preds = %.loopexit461
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #9
  br label %493

493:                                              ; preds = %.critedge447, %._crit_edge434
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #9
  %494 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %494, ptr %52, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #9
  %495 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %495, ptr %53, align 8
  %496 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  br i1 %496, label %.lr.ph436, label %._crit_edge437

._crit_edge437:                                   ; preds = %.loopexit, %493
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #9
  br label %548

.lr.ph436:                                        ; preds = %493, %.loopexit
  %497 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #9
  %498 = load ptr, ptr %497, align 8, !tbaa !49
  %499 = getelementptr inbounds i8, ptr %498, i64 142
  store i8 1, ptr %499, align 2, !tbaa !83
  %500 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %498)
  %501 = icmp eq i32 %500, 0
  br i1 %501, label %502, label %.preheader353

502:                                              ; preds = %.lr.ph436
  %503 = getelementptr inbounds i8, ptr %498, i64 24
  %504 = getelementptr inbounds i8, ptr %498, i64 32
  %505 = load i64, ptr %503, align 8
  store i64 %505, ptr %504, align 8
  %506 = getelementptr inbounds i8, ptr %498, i64 40
  %507 = load float, ptr %506, align 8, !tbaa !89
  %508 = getelementptr inbounds i8, ptr %498, i64 44
  store float %507, ptr %508, align 4, !tbaa !90
  br label %.loopexit

.preheader353:                                    ; preds = %.lr.ph436, %519
  %.0267 = phi i32 [ %520, %519 ], [ 0, %.lr.ph436 ]
  %509 = invoke noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %498)
          to label %510 unwind label %512

510:                                              ; preds = %.preheader353
  %511 = icmp slt i32 %.0267, %509
  br i1 %511, label %.preheader, label %.loopexit

512:                                              ; preds = %.preheader353
  %513 = landingpad { ptr, i32 }
          cleanup
  br label %534

.preheader:                                       ; preds = %510, %530
  %.0266 = phi i32 [ %531, %530 ], [ 0, %510 ]
  %514 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %498, i32 noundef %.0267)
          to label %515 unwind label %521

515:                                              ; preds = %.preheader
  %516 = invoke noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256) %514)
          to label %517 unwind label %521

517:                                              ; preds = %515
  %518 = icmp slt i32 %.0266, %516
  br i1 %518, label %523, label %519

519:                                              ; preds = %517
  %520 = add nuw nsw i32 %.0267, 1
  br label %.preheader353, !llvm.loop !91

521:                                              ; preds = %515, %.preheader
  %522 = landingpad { ptr, i32 }
          cleanup
  br label %534

523:                                              ; preds = %517
  %524 = invoke noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %498, i32 noundef %.0267)
          to label %525 unwind label %532

525:                                              ; preds = %523
  %526 = invoke noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256) %524, i32 noundef %.0266)
          to label %527 unwind label %532

527:                                              ; preds = %525
  %528 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %526)
  %529 = invoke noundef ptr @_ZN9QParticle25SetPreviousGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %526, <2 x float> %528)
          to label %530 unwind label %532

530:                                              ; preds = %527
  %531 = add nuw nsw i32 %.0266, 1
  br label %.preheader, !llvm.loop !92

532:                                              ; preds = %527, %525, %523
  %533 = landingpad { ptr, i32 }
          cleanup
  br label %534

534:                                              ; preds = %521, %532, %512
  %.pn302.pn = phi { ptr, i32 } [ %513, %512 ], [ %533, %532 ], [ %522, %521 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #9
  br label %551

.loopexit:                                        ; preds = %510, %502
  %535 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #9
  %536 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #9
  br i1 %536, label %.lr.ph436, label %._crit_edge437

537:                                              ; preds = %480, %.thread346
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #9
  %538 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %538, ptr %54, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #9
  %539 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  store ptr %539, ptr %55, align 8
  %540 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #9
  br i1 %540, label %.lr.ph439, label %._crit_edge440

._crit_edge440:                                   ; preds = %.lr.ph439, %537
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #9
  br label %548

.lr.ph439:                                        ; preds = %537, %.lr.ph439
  %541 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #9
  %542 = load ptr, ptr %541, align 8, !tbaa !49
  %543 = getelementptr inbounds i8, ptr %542, i64 148
  store i32 0, ptr %543, align 4, !tbaa !93
  %544 = getelementptr inbounds i8, ptr %542, i64 152
  store i32 0, ptr %544, align 8, !tbaa !94
  %545 = getelementptr inbounds i8, ptr %542, i64 142
  store i8 0, ptr %545, align 2, !tbaa !83
  %546 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #9
  %547 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #9
  br i1 %547, label %.lr.ph439, label %._crit_edge440

548:                                              ; preds = %._crit_edge434, %._crit_edge437, %._crit_edge440
  call void @_ZNSt6vectorIP5QBodySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %47) #9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %549 = call noundef i64 @_ZNKSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %406) #9
  %550 = icmp ugt i64 %549, %indvars.iv.next
  br i1 %550, label %410, label %.loopexit355, !llvm.loop !95

551:                                              ; preds = %534, %477
  %.pn302.pn.pn = phi { ptr, i32 } [ %.pn302.pn, %534 ], [ %.pn.pn.pn, %477 ]
  call void @_ZNSt6vectorIP5QBodySaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %47) #9
  br label %567

.loopexit355:                                     ; preds = %548, %405, %._crit_edge428
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #9
  %552 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %552, ptr %56, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #9
  %553 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #9
  store ptr %553, ptr %57, align 8
  %554 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #9
  br i1 %554, label %.lr.ph445, label %._crit_edge446

._crit_edge446:                                   ; preds = %560, %.loopexit355
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #9
  br label %566

.lr.ph445:                                        ; preds = %.loopexit355, %560
  %555 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  %556 = load ptr, ptr %555, align 8, !tbaa !49
  %557 = getelementptr inbounds i8, ptr %556, i64 192
  %558 = call noundef zeroext i1 @_ZStneIvJP5QBodyEEbRKSt8functionIFT_DpT0_EEDn(ptr noundef nonnull align 8 dereferenceable(32) %557, ptr null) #9
  br i1 %558, label %559, label %560

559:                                              ; preds = %.lr.ph445
  call void @_ZNKSt8functionIFvP5QBodyEEclES1_(ptr noundef nonnull align 8 dereferenceable(32) %557, ptr noundef %556)
  br label %560

560:                                              ; preds = %559, %.lr.ph445
  %561 = load ptr, ptr %556, align 8, !tbaa !50
  %562 = getelementptr inbounds i8, ptr %561, i64 48
  %563 = load ptr, ptr %562, align 8
  call void %563(ptr noundef nonnull align 8 dereferenceable(293) %556)
  %564 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #9
  %565 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #9
  br i1 %565, label %.lr.ph445, label %._crit_edge446

566:                                              ; preds = %1, %._crit_edge446
  ret void

567:                                              ; preds = %184, %227, %259, %358, %551
  %.pn326.pn.pn = phi { ptr, i32 } [ %.pn302.pn.pn, %551 ], [ %.pn326, %184 ], [ %.pn322.pn, %358 ], [ %.pn313, %227 ], [ %.pn309, %259 ]
  resume { ptr, i32 } %.pn326.pn.pn
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN5QBody10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS3_SaIS3_EEEEPFbPKS2_SA_EEvT_SD_T0_(ptr, ptr, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6QWorld20SortBodiesHorizontalEPK5QBodyS2_(ptr noundef, ptr noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11QObjectPoolIN10QCollision7ContactEE7FreeAllEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #5 align 2

declare void @_ZN5QBody10UpdateAABBEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #0

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

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

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

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

declare void @_ZN5QMesh22UpdatePolygonBisectorsEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #0

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind noalias writable sret(%"class.std::vector.74") align 8, ptr noundef, ptr noundef) local_unnamed_addr #5 align 2

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

declare void @_ZN9QManifoldC1EP5QBodyS1_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef, ptr noundef) unnamed_addr #0

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN5QBody10CanCollideEPS_S0_b(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind noalias writable sret(%class.QAABB) align 4, ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QAABB6GetMaxEv(ptr noundef nonnull align 4 dereferenceable(28)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QAABB6GetMinEv(ptr noundef nonnull align 4 dereferenceable(28)) local_unnamed_addr #7 align 2

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

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

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

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

declare void @_ZN9QManifold5SolveEv(ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #0

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

declare void @_ZN9QManifold26SolveFrictionAndVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody24GetSelfCollisionsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

declare noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #0

declare noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293), i32 noundef) local_unnamed_addr #0

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

declare void @_ZN10QCollision19CircleAndCircleSelfERSt6vectorIP9QParticleSaIS2_EERS0_IPNS_7ContactESaIS7_EEf(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), float noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN9QSoftBody32GetSelfCollisionsSpecifiedRadiusEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

declare void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef byval(%class.QAABB) align 8, ptr noundef nonnull align 8 dereferenceable(24), float noundef, i1 noundef zeroext) local_unnamed_addr #0

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

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

declare noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody24GetAreaPreservingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

declare void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN5QMesh20GetCollisionBehaviorEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #5 align 2

declare void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody23GetShapeMatchingEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

declare void @_ZN9QSoftBody18ApplyShapeMatchingEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #0

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

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

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

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

declare void @_ZN8QRaycast14UpdateContactsEv(ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

declare void @_ZN9QAreaBody11CheckBodiesEv(ptr noundef nonnull align 8 dereferenceable(432)) local_unnamed_addr #0

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN5QBody11GetRotationEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN5QBody19GetPreviousRotationEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #1 align 2

declare noundef i32 @_ZN5QMesh16GetParticleCountEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #0

declare noundef ptr @_ZN5QMesh13GetParticleAtEi(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local <2 x float> @_ZN9QParticle25GetPreviousGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #7 align 2

declare noundef ptr @_ZN9QParticle25SetPreviousGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290), <2 x float>) local_unnamed_addr #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { mustprogress nounwind 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 #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { 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, !40, i64 208}
!6 = !{!"_ZTS6QWorld", !7, i64 0, !14, i64 24, !18, i64 48, !22, i64 72, !26, i64 96, !30, i64 120, !36, i64 176, !11, i64 200, !40, i64 208, !41, i64 212, !40, i64 220, !40, i64 221, !42, i64 224, !35, i64 228, !35, i64 232, !35, i64 236, !42, i64 240, !42, i64 244, !43, i64 248}
!7 = !{!"_ZTSSt6vectorIP6QJointSaIS1_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseIP6QJointSaIS1_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSSt6vectorIP7QSpringSaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIP7QSpringSaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!18 = !{!"_ZTSSt6vectorIP8QRaycastSaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIP8QRaycastSaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!22 = !{!"_ZTSSt6vectorIP6QGizmoSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIP6QGizmoSaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!26 = !{!"_ZTSSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!30 = !{!"_ZTSSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE", !31, i64 0}
!31 = !{!"_ZTSSt10_HashtableISt4pairIP5QBodyS2_ES3_SaIS3_ENSt8__detail9_IdentityENS1_13BodyPairEqualENS1_12BodyPairHashENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !11, i64 0, !32, i64 8, !33, i64 16, !32, i64 24, !34, i64 32, !11, i64 48}
!32 = !{!"long", !12, i64 0}
!33 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !11, i64 0}
!34 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !35, i64 0, !32, i64 8}
!35 = !{!"float", !12, i64 0}
!36 = !{!"_ZTSSt6vectorI9QManifoldSaIS0_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseI9QManifoldSaIS0_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!40 = !{!"bool", !12, i64 0}
!41 = !{!"_ZTS7QVector", !35, i64 0, !35, i64 4}
!42 = !{!"int", !12, i64 0}
!43 = !{!"_ZTSSt6vectorIP5QBodySaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseIP5QBodySaIS1_EE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!11, !11, i64 0}
!50 = !{!51, !51, i64 0}
!51 = !{!"vtable pointer", !13, i64 0}
!52 = !{!6, !42, i64 240}
!53 = !{!6, !42, i64 244}
!54 = !{!6, !40, i64 221}
!55 = !{!6, !11, i64 200}
!56 = !{!6, !42, i64 224}
!57 = !{!58, !11, i64 0}
!58 = !{!"_ZTSSt4pairIP5QBodyS1_E", !11, i64 0, !11, i64 8}
!59 = !{!58, !11, i64 8}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = distinct !{!62, !61}
!63 = distinct !{!63, !61}
!64 = distinct !{!64, !61}
!65 = distinct !{!65, !61}
!66 = !{!67, !78, i64 288}
!67 = !{!"_ZTS5QBody", !35, i64 8, !35, i64 12, !11, i64 16, !41, i64 24, !41, i64 32, !35, i64 40, !35, i64 44, !68, i64 48, !69, i64 76, !40, i64 80, !40, i64 81, !40, i64 82, !35, i64 84, !70, i64 88, !40, i64 92, !35, i64 96, !40, i64 100, !40, i64 101, !41, i64 104, !35, i64 112, !35, i64 116, !35, i64 120, !35, i64 124, !35, i64 128, !42, i64 132, !42, i64 136, !40, i64 140, !40, i64 141, !40, i64 142, !42, i64 144, !42, i64 148, !42, i64 152, !40, i64 156, !71, i64 160, !71, i64 192, !73, i64 224, !40, i64 256, !74, i64 264, !78, i64 288, !40, i64 292}
!68 = !{!"_ZTS5QAABB", !41, i64 0, !41, i64 8, !41, i64 16, !35, i64 24}
!69 = !{!"_ZTSN5QBody5ModesE", !12, i64 0}
!70 = !{!"_ZTSN5QBody9BodyTypesE", !12, i64 0}
!71 = !{!"_ZTSSt8functionIFvP5QBodyEE", !72, i64 0, !11, i64 24}
!72 = !{!"_ZTSSt14_Function_base", !12, i64 0, !11, i64 16}
!73 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !72, i64 0, !11, i64 24}
!74 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !75, i64 0}
!75 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!78 = !{!"_ZTSN5QBody16SimulationModelsE", !12, i64 0}
!79 = distinct !{!79, !61}
!80 = !{i64 0, i64 4, !81, i64 4, i64 4, !81, i64 8, i64 4, !81, i64 12, i64 4, !81, i64 16, i64 4, !81, i64 20, i64 4, !81, i64 24, i64 4, !81}
!81 = !{!35, !35, i64 0}
!82 = distinct !{!82, !61}
!83 = !{!67, !40, i64 142}
!84 = !{!6, !40, i64 220}
!85 = !{!6, !35, i64 232}
!86 = distinct !{!86, !61}
!87 = distinct !{!87, !61}
!88 = !{!42, !42, i64 0}
!89 = !{!67, !35, i64 40}
!90 = !{!67, !35, i64 44}
!91 = distinct !{!91, !61}
!92 = distinct !{!92, !61}
!93 = !{!67, !42, i64 148}
!94 = !{!67, !42, i64 152}
!95 = distinct !{!95, !61}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass