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

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

%"class.std::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.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%struct.QVector = type { float, float }
%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.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 }
%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 }
%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 }

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind noalias writable sret(%"class.std::vector.74") align 8 %0, ptr noundef %1, ptr noundef %2) #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i1, align 1
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %class.QAABB, align 4
  %13 = alloca %class.QAABB, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i8, align 1
  %24 = alloca %class.QAABB, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i8, align 1
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca %class.QAABB, align 8
  %32 = alloca %class.QAABB, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %class.QAABB, align 4
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  store i1 false, ptr %7, align 1
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = invoke noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293) %36)
          to label %38 unwind label %53

38:                                               ; preds = %3
  store ptr %37, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = invoke noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293) %39)
          to label %41 unwind label %57

41:                                               ; preds = %38
  store ptr %40, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 28, ptr %12) #5
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %12, ptr noundef nonnull align 8 dereferenceable(293) %42)
          to label %43 unwind label %61

43:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 28, ptr %13) #5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %13, ptr noundef nonnull align 8 dereferenceable(293) %44)
          to label %45 unwind label %65

45:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %396, %45
  %47 = load i32, ptr %14, align 4, !tbaa !9
  %48 = sext i32 %47 to i64
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %49) #5
  %51 = icmp ult i64 %48, %50
  br i1 %51, label %69, label %52

52:                                               ; preds = %46
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %400

53:                                               ; preds = %3
  %54 = landingpad { ptr, i32 }
          cleanup
  %55 = extractvalue { ptr, i32 } %54, 0
  store ptr %55, ptr %9, align 8
  %56 = extractvalue { ptr, i32 } %54, 1
  store i32 %56, ptr %10, align 4
  br label %405

57:                                               ; preds = %38
  %58 = landingpad { ptr, i32 }
          cleanup
  %59 = extractvalue { ptr, i32 } %58, 0
  store ptr %59, ptr %9, align 8
  %60 = extractvalue { ptr, i32 } %58, 1
  store i32 %60, ptr %10, align 4
  br label %404

61:                                               ; preds = %41
  %62 = landingpad { ptr, i32 }
          cleanup
  %63 = extractvalue { ptr, i32 } %62, 0
  store ptr %63, ptr %9, align 8
  %64 = extractvalue { ptr, i32 } %62, 1
  store i32 %64, ptr %10, align 4
  br label %403

65:                                               ; preds = %43
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = extractvalue { ptr, i32 } %66, 0
  store ptr %67, ptr %9, align 8
  %68 = extractvalue { ptr, i32 } %66, 1
  store i32 %68, ptr %10, align 4
  br label %402

69:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  %71 = load i32, ptr %14, align 4, !tbaa !9
  %72 = sext i32 %71 to i64
  %73 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QMeshSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %72)
          to label %74 unwind label %83

74:                                               ; preds = %69
  %75 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %75, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %76

76:                                               ; preds = %391, %74
  %77 = load i32, ptr %17, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %79) #5
  %81 = icmp ult i64 %78, %80
  br i1 %81, label %87, label %82

82:                                               ; preds = %76
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %395

83:                                               ; preds = %69
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %9, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %10, align 4
  br label %399

87:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %88 = load ptr, ptr %11, align 8, !tbaa !5
  %89 = load i32, ptr %17, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QMeshSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %88, i64 noundef %90)
          to label %92 unwind label %112

92:                                               ; preds = %87
  %93 = load ptr, ptr %91, align 8, !tbaa !5
  store ptr %93, ptr %18, align 8, !tbaa !5
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = invoke noundef ptr @_ZN5QBody8GetWorldEv(ptr noundef nonnull align 8 dereferenceable(293) %94)
          to label %96 unwind label %112

96:                                               ; preds = %92
  %97 = getelementptr inbounds %class.QWorld, ptr %95, i32 0, i32 17
  %98 = load i32, ptr %97, align 4, !tbaa !11
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %97, align 4, !tbaa !11
  %100 = load ptr, ptr %16, align 8, !tbaa !5
  %101 = load ptr, ptr %18, align 8, !tbaa !5
  %102 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %100, ptr noundef %101, i32 noundef 1, i32 noundef 1)
          to label %103 unwind label %112

103:                                              ; preds = %96
  br i1 %102, label %104, label %151

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

105:                                              ; preds = %146, %104
  %106 = load i32, ptr %19, align 4, !tbaa !9
  %107 = load ptr, ptr %16, align 8, !tbaa !5
  %108 = invoke noundef i32 @_ZN5QMesh24GetSubConvexPolygonCountEv(ptr noundef nonnull align 8 dereferenceable(256) %107)
          to label %109 unwind label %116

109:                                              ; preds = %105
  %110 = icmp slt i32 %106, %108
  br i1 %110, label %120, label %111

111:                                              ; preds = %109
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %150

112:                                              ; preds = %339, %284, %215, %187, %151, %96, %92, %87
  %113 = landingpad { ptr, i32 }
          cleanup
  %114 = extractvalue { ptr, i32 } %113, 0
  store ptr %114, ptr %9, align 8
  %115 = extractvalue { ptr, i32 } %113, 1
  store i32 %115, ptr %10, align 4
  br label %394

116:                                              ; preds = %105
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %9, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %10, align 4
  br label %149

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

121:                                              ; preds = %142, %120
  %122 = load i32, ptr %20, align 4, !tbaa !9
  %123 = load ptr, ptr %18, align 8, !tbaa !5
  %124 = invoke noundef i32 @_ZN5QMesh24GetSubConvexPolygonCountEv(ptr noundef nonnull align 8 dereferenceable(256) %123)
          to label %125 unwind label %128

125:                                              ; preds = %121
  %126 = icmp slt i32 %122, %124
  br i1 %126, label %132, label %127

127:                                              ; preds = %125
  store i32 11, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %145

128:                                              ; preds = %140, %136, %132, %121
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %9, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %149

132:                                              ; preds = %125
  %133 = load ptr, ptr %16, align 8, !tbaa !5
  %134 = load i32, ptr %19, align 4, !tbaa !9
  %135 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256) %133, i32 noundef %134)
          to label %136 unwind label %128

136:                                              ; preds = %132
  %137 = load ptr, ptr %18, align 8, !tbaa !5
  %138 = load i32, ptr %20, align 4, !tbaa !9
  %139 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256) %137, i32 noundef %138)
          to label %140 unwind label %128

140:                                              ; preds = %136
  invoke void @_ZN10QCollision17PolygonAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %135, ptr noundef nonnull align 8 dereferenceable(24) %139, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %141 unwind label %128

141:                                              ; preds = %140
  br label %142

142:                                              ; preds = %141
  %143 = load i32, ptr %20, align 4, !tbaa !9
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %20, align 4, !tbaa !9
  br label %121, !llvm.loop !49

145:                                              ; preds = %127
  br label %146

146:                                              ; preds = %145
  %147 = load i32, ptr %19, align 4, !tbaa !9
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr %19, align 4, !tbaa !9
  br label %105, !llvm.loop !51

149:                                              ; preds = %128, %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %394

150:                                              ; preds = %111
  br label %390

151:                                              ; preds = %103
  %152 = load ptr, ptr %16, align 8, !tbaa !5
  %153 = load ptr, ptr %18, align 8, !tbaa !5
  %154 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %152, ptr noundef %153, i32 noundef 0, i32 noundef 1)
          to label %155 unwind label %112

155:                                              ; preds = %151
  br i1 %154, label %156, label %187

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %157 = load ptr, ptr %16, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.QMesh, ptr %157, i32 0, i32 12
  %159 = load i32, ptr %158, align 8, !tbaa !52
  %160 = icmp eq i32 %159, 0
  br i1 %160, label %161, label %163

161:                                              ; preds = %156
  %162 = load ptr, ptr %16, align 8, !tbaa !5
  br label %165

163:                                              ; preds = %156
  %164 = load ptr, ptr %18, align 8, !tbaa !5
  br label %165

165:                                              ; preds = %163, %161
  %166 = phi ptr [ %162, %161 ], [ %164, %163 ]
  store ptr %166, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %167 = load ptr, ptr %21, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.QMesh, ptr %167, i32 0, i32 0
  %169 = load ptr, ptr %16, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.QMesh, ptr %169, i32 0, i32 0
  %171 = icmp eq ptr %168, %170
  br i1 %171, label %172, label %174

172:                                              ; preds = %165
  %173 = load ptr, ptr %18, align 8, !tbaa !5
  br label %176

174:                                              ; preds = %165
  %175 = load ptr, ptr %16, align 8, !tbaa !5
  br label %176

176:                                              ; preds = %174, %172
  %177 = phi ptr [ %173, %172 ], [ %175, %174 ]
  store ptr %177, ptr %22, align 8, !tbaa !5
  %178 = load ptr, ptr %21, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.QMesh, ptr %178, i32 0, i32 0
  %180 = load ptr, ptr %22, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.QMesh, ptr %180, i32 0, i32 7
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %179, ptr noundef nonnull align 8 dereferenceable(24) %181, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %182 unwind label %183

182:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %389

183:                                              ; preds = %176
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %9, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %394

187:                                              ; preds = %155
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %188, ptr noundef %189, i32 noundef 0, i32 noundef 0)
          to label %191 unwind label %112

191:                                              ; preds = %187
  br i1 %190, label %192, label %215

192:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  store i8 0, ptr %23, align 1, !tbaa !79
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %193)
          to label %195 unwind label %203

195:                                              ; preds = %192
  %196 = icmp eq i32 %194, 0
  br i1 %196, label %197, label %207

197:                                              ; preds = %195
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %198)
          to label %200 unwind label %203

200:                                              ; preds = %197
  %201 = icmp eq i32 %199, 0
  br i1 %201, label %202, label %207

202:                                              ; preds = %200
  store i8 1, ptr %23, align 1, !tbaa !79
  br label %207

203:                                              ; preds = %207, %197, %192
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %9, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  br label %394

207:                                              ; preds = %202, %200, %195
  %208 = load ptr, ptr %16, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.QMesh, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.QMesh, ptr %210, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %13, i64 28, i1 false), !tbaa.struct !80
  %212 = load i8, ptr %23, align 1, !tbaa !79, !range !82, !noundef !83
  %213 = trunc i8 %212 to i1
  invoke void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24) %209, ptr noundef nonnull align 8 dereferenceable(24) %211, ptr noundef byval(%class.QAABB) align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %0, float noundef 0.000000e+00, i1 noundef zeroext %213)
          to label %214 unwind label %203

214:                                              ; preds = %207
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  br label %388

215:                                              ; preds = %191
  %216 = load ptr, ptr %16, align 8, !tbaa !5
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %216, ptr noundef %217, i32 noundef 2, i32 noundef 1)
          to label %219 unwind label %112

219:                                              ; preds = %215
  br i1 %218, label %220, label %284

220:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %221 = load ptr, ptr %16, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.QMesh, ptr %221, i32 0, i32 12
  %223 = load i32, ptr %222, align 8, !tbaa !52
  %224 = icmp eq i32 %223, 2
  br i1 %224, label %225, label %227

225:                                              ; preds = %220
  %226 = load ptr, ptr %16, align 8, !tbaa !5
  br label %229

227:                                              ; preds = %220
  %228 = load ptr, ptr %18, align 8, !tbaa !5
  br label %229

229:                                              ; preds = %227, %225
  %230 = phi ptr [ %226, %225 ], [ %228, %227 ]
  store ptr %230, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %231 = load ptr, ptr %16, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.QMesh, ptr %231, i32 0, i32 12
  %233 = load i32, ptr %232, align 8, !tbaa !52
  %234 = icmp eq i32 %233, 1
  br i1 %234, label %235, label %237

235:                                              ; preds = %229
  %236 = load ptr, ptr %16, align 8, !tbaa !5
  br label %239

237:                                              ; preds = %229
  %238 = load ptr, ptr %18, align 8, !tbaa !5
  br label %239

239:                                              ; preds = %237, %235
  %240 = phi ptr [ %236, %235 ], [ %238, %237 ]
  store ptr %240, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #5
  store i8 0, ptr %27, align 1, !tbaa !79
  %241 = load ptr, ptr %26, align 8, !tbaa !5
  %242 = invoke noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %241)
          to label %243 unwind label %253

243:                                              ; preds = %239
  %244 = icmp ne ptr %242, null
  br i1 %244, label %245, label %258

245:                                              ; preds = %243
  %246 = load ptr, ptr %26, align 8, !tbaa !5
  %247 = invoke noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %246)
          to label %248 unwind label %253

248:                                              ; preds = %245
  %249 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %247)
          to label %250 unwind label %253

250:                                              ; preds = %248
  %251 = icmp eq i32 %249, 1
  br i1 %251, label %252, label %257

252:                                              ; preds = %250
  store i8 1, ptr %27, align 1, !tbaa !79
  br label %257

253:                                              ; preds = %277, %272, %266, %261, %248, %245, %239
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %9, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %394

257:                                              ; preds = %252, %250
  br label %258

258:                                              ; preds = %257, %243
  %259 = load i8, ptr %27, align 1, !tbaa !79, !range !82, !noundef !83
  %260 = trunc i8 %259 to i1
  br i1 %260, label %261, label %272

261:                                              ; preds = %258
  %262 = load ptr, ptr %25, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.QMesh, ptr %262, i32 0, i32 7
  %264 = load ptr, ptr %26, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.QMesh, ptr %264, i32 0, i32 7
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %263, ptr noundef nonnull align 8 dereferenceable(24) %265, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %266 unwind label %253

266:                                              ; preds = %261
  %267 = load ptr, ptr %26, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.QMesh, ptr %267, i32 0, i32 7
  %269 = load ptr, ptr %25, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.QMesh, ptr %269, i32 0, i32 7
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %268, ptr noundef nonnull align 8 dereferenceable(24) %270, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %271 unwind label %253

271:                                              ; preds = %266
  br label %283

272:                                              ; preds = %258
  %273 = load ptr, ptr %25, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.QMesh, ptr %273, i32 0, i32 7
  %275 = load ptr, ptr %26, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.QMesh, ptr %275, i32 0, i32 7
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %274, ptr noundef nonnull align 8 dereferenceable(24) %276, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %277 unwind label %253

277:                                              ; preds = %272
  %278 = load ptr, ptr %25, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.QMesh, ptr %278, i32 0, i32 7
  %280 = load ptr, ptr %26, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.QMesh, ptr %280, i32 0, i32 7
  invoke void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %279, ptr noundef nonnull align 8 dereferenceable(24) %281, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %282 unwind label %253

282:                                              ; preds = %277
  br label %283

283:                                              ; preds = %282, %271
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %387

284:                                              ; preds = %219
  %285 = load ptr, ptr %16, align 8, !tbaa !5
  %286 = load ptr, ptr %18, align 8, !tbaa !5
  %287 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %285, ptr noundef %286, i32 noundef 2, i32 noundef 2)
          to label %288 unwind label %112

288:                                              ; preds = %284
  br i1 %287, label %289, label %339

289:                                              ; preds = %288
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = getelementptr inbounds %class.QBody, ptr %290, i32 0, i32 45
  %292 = load i32, ptr %291, align 8, !tbaa !84
  %293 = icmp eq i32 %292, 0
  br i1 %293, label %294, label %338

294:                                              ; preds = %289
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %class.QBody, ptr %295, i32 0, i32 45
  %297 = load i32, ptr %296, align 8, !tbaa !84
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %338

299:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %300 = load ptr, ptr %16, align 8, !tbaa !5
  %301 = invoke noundef float @_ZN5QMesh14GetPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %300)
          to label %302 unwind label %324

302:                                              ; preds = %299
  %303 = load ptr, ptr %16, align 8, !tbaa !5
  %304 = invoke noundef float @_ZN5QMesh21GetInitialPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %303)
          to label %305 unwind label %324

305:                                              ; preds = %302
  %306 = fdiv float %301, %304
  store float %306, ptr %28, align 4, !tbaa !81
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = invoke noundef float @_ZN5QMesh14GetPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %307)
          to label %309 unwind label %328

309:                                              ; preds = %305
  %310 = load ptr, ptr %18, align 8, !tbaa !5
  %311 = invoke noundef float @_ZN5QMesh21GetInitialPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %310)
          to label %312 unwind label %328

312:                                              ; preds = %309
  %313 = fdiv float %308, %311
  store float %313, ptr %29, align 4, !tbaa !81
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  store float 2.500000e-01, ptr %30, align 4, !tbaa !81
  %314 = load ptr, ptr %16, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.QMesh, ptr %314, i32 0, i32 7
  %316 = load ptr, ptr %18, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.QMesh, ptr %316, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %13, i64 28, i1 false), !tbaa.struct !80
  invoke void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(24) %315, ptr noundef nonnull align 8 dereferenceable(24) %317, ptr noundef byval(%class.QAABB) align 8 %31, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %318 unwind label %332

318:                                              ; preds = %312
  %319 = load ptr, ptr %18, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.QMesh, ptr %319, i32 0, i32 7
  %321 = load ptr, ptr %16, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.QMesh, ptr %321, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %12, i64 28, i1 false), !tbaa.struct !80
  invoke void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(24) %320, ptr noundef nonnull align 8 dereferenceable(24) %322, ptr noundef byval(%class.QAABB) align 8 %32, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %323 unwind label %332

323:                                              ; preds = %318
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %338

324:                                              ; preds = %302, %299
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %9, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %10, align 4
  br label %337

328:                                              ; preds = %309, %305
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %9, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %10, align 4
  br label %336

332:                                              ; preds = %318, %312
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %9, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  br label %336

336:                                              ; preds = %332, %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %337

337:                                              ; preds = %336, %324
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %394

338:                                              ; preds = %323, %294, %289
  br label %386

339:                                              ; preds = %288
  %340 = load ptr, ptr %16, align 8, !tbaa !5
  %341 = load ptr, ptr %18, align 8, !tbaa !5
  %342 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %340, ptr noundef %341, i32 noundef 2, i32 noundef 0)
          to label %343 unwind label %112

343:                                              ; preds = %339
  br i1 %342, label %344, label %385

344:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %345 = load ptr, ptr %16, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.QMesh, ptr %345, i32 0, i32 12
  %347 = load i32, ptr %346, align 8, !tbaa !52
  %348 = icmp eq i32 %347, 0
  br i1 %348, label %349, label %351

349:                                              ; preds = %344
  %350 = load ptr, ptr %16, align 8, !tbaa !5
  br label %353

351:                                              ; preds = %344
  %352 = load ptr, ptr %18, align 8, !tbaa !5
  br label %353

353:                                              ; preds = %351, %349
  %354 = phi ptr [ %350, %349 ], [ %352, %351 ]
  store ptr %354, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %355 = load ptr, ptr %16, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.QMesh, ptr %355, i32 0, i32 12
  %357 = load i32, ptr %356, align 8, !tbaa !52
  %358 = icmp eq i32 %357, 2
  br i1 %358, label %359, label %361

359:                                              ; preds = %353
  %360 = load ptr, ptr %16, align 8, !tbaa !5
  br label %363

361:                                              ; preds = %353
  %362 = load ptr, ptr %18, align 8, !tbaa !5
  br label %363

363:                                              ; preds = %361, %359
  %364 = phi ptr [ %360, %359 ], [ %362, %361 ]
  store ptr %364, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 28, ptr %35) #5
  %365 = load ptr, ptr %16, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.QMesh, ptr %365, i32 0, i32 12
  %367 = load i32, ptr %366, align 8, !tbaa !52
  %368 = icmp eq i32 %367, 2
  br i1 %368, label %369, label %372

369:                                              ; preds = %363
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %35, ptr noundef nonnull align 8 dereferenceable(293) %370)
          to label %371 unwind label %381

371:                                              ; preds = %369
  br label %375

372:                                              ; preds = %363
  %373 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind writable sret(%class.QAABB) align 4 %35, ptr noundef nonnull align 8 dereferenceable(293) %373)
          to label %374 unwind label %381

374:                                              ; preds = %372
  br label %375

375:                                              ; preds = %374, %371
  %376 = load ptr, ptr %33, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.QMesh, ptr %376, i32 0, i32 0
  %378 = load ptr, ptr %34, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.QMesh, ptr %378, i32 0, i32 7
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %377, ptr noundef nonnull align 8 dereferenceable(24) %379, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %380 unwind label %381

380:                                              ; preds = %375
  call void @llvm.lifetime.end.p0(i64 28, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %385

381:                                              ; preds = %375, %372, %369
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %9, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %394

385:                                              ; preds = %380, %343
  br label %386

386:                                              ; preds = %385, %338
  br label %387

387:                                              ; preds = %386, %283
  br label %388

388:                                              ; preds = %387, %214
  br label %389

389:                                              ; preds = %388, %182
  br label %390

390:                                              ; preds = %389, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %17, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %17, align 4, !tbaa !9
  br label %76, !llvm.loop !97

394:                                              ; preds = %381, %337, %253, %203, %183, %149, %112
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %399

395:                                              ; preds = %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %396

396:                                              ; preds = %395
  %397 = load i32, ptr %14, align 4, !tbaa !9
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %14, align 4, !tbaa !9
  br label %46, !llvm.loop !98

399:                                              ; preds = %394, %83
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %402

400:                                              ; preds = %52
  store i1 true, ptr %7, align 1
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 28, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 28, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  %401 = load i1, ptr %7, align 1
  br i1 %401, label %407, label %406

402:                                              ; preds = %399, %65
  call void @llvm.lifetime.end.p0(i64 28, ptr %13) #5
  br label %403

403:                                              ; preds = %402, %61
  call void @llvm.lifetime.end.p0(i64 28, ptr %12) #5
  br label %404

404:                                              ; preds = %403, %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %405

405:                                              ; preds = %404, %53
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  br label %408

406:                                              ; preds = %400
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  br label %407

407:                                              ; preds = %406, %400
  ret void

408:                                              ; preds = %405
  %409 = load ptr, ptr %9, align 8
  %410 = load i32, ptr %10, align 4
  %411 = insertvalue { ptr, i32 } poison, ptr %409, 0
  %412 = insertvalue { ptr, i32 } %411, i32 %410, 1
  resume { ptr, i32 } %412
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 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) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

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

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

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

declare noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293)) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef) #1 align 2

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

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

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

declare void @_ZN10QCollision17PolygonAndPolygonERSt6vectorIP9QParticleSaIS2_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)) #3

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

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

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

declare void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(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)) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 244}
!12 = !{!"_ZTS6QWorld", !13, i64 0, !17, i64 24, !21, i64 48, !25, i64 72, !29, i64 96, !33, i64 120, !39, i64 176, !6, i64 200, !43, i64 208, !44, i64 212, !43, i64 220, !43, i64 221, !10, i64 224, !38, i64 228, !38, i64 232, !38, i64 236, !10, i64 240, !10, i64 244, !45, i64 248}
!13 = !{!"_ZTSSt6vectorIP6QJointSaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIP6QJointSaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIP6QJointSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTSSt6vectorIP7QSpringSaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIP7QSpringSaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorIP8QRaycastSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIP8QRaycastSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP8QRaycastSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSSt6vectorIP6QGizmoSaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIP6QGizmoSaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIP6QGizmoSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSSt6vectorIS_IP5QBodySaIS1_EESaIS3_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP5QBodySaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt13unordered_setISt4pairIP5QBodyS2_ENS1_12BodyPairHashENS1_13BodyPairEqualESaIS3_EE", !34, i64 0}
!34 = !{!"_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, !35, i64 8, !36, i64 16, !35, i64 24, !37, i64 32, !6, i64 48}
!35 = !{!"long", !7, i64 0}
!36 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !38, i64 0, !35, i64 8}
!38 = !{!"float", !7, i64 0}
!39 = !{!"_ZTSSt6vectorI9QManifoldSaIS0_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseI9QManifoldSaIS0_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseI9QManifoldSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"bool", !7, i64 0}
!44 = !{!"_ZTS7QVector", !38, i64 0, !38, i64 4}
!45 = !{!"_ZTSSt6vectorIP5QBodySaIS1_EE", !46, i64 0}
!46 = !{!"_ZTSSt12_Vector_baseIP5QBodySaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE12_Vector_implE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIP5QBodySaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = distinct !{!51, !50}
!52 = !{!53, !70, i64 184}
!53 = !{!"_ZTS5QMesh", !54, i64 0, !44, i64 24, !44, i64 32, !38, i64 40, !38, i64 44, !17, i64 48, !58, i64 72, !54, i64 96, !62, i64 120, !66, i64 144, !38, i64 168, !6, i64 176, !70, i64 184, !71, i64 192, !43, i64 216, !43, i64 217, !75, i64 224, !38, i64 248, !43, i64 252, !43, i64 253, !43, i64 254, !43, i64 255}
!54 = !{!"_ZTSSt6vectorIP9QParticleSaIS1_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseIP9QParticleSaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"_ZTSSt6vectorIP16QAngleConstraintSaIS1_EE", !59, i64 0}
!59 = !{!"_ZTSSt12_Vector_baseIP16QAngleConstraintSaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE12_Vector_implE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!62 = !{!"_ZTSSt6vectorIS_IP9QParticleSaIS1_EESaIS3_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!66 = !{!"_ZTSSt6vectorI7QVectorSaIS0_EE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseI7QVectorSaIS0_EE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!"_ZTSN5QMesh18CollisionBehaviorsE", !7, i64 0}
!71 = !{!"_ZTSSt6vectorIS_IiSaIiEESaIS1_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!75 = !{!"_ZTSSt6vectorIfSaIfEE", !76, i64 0}
!76 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!79 = !{!43, !43, i64 0}
!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 = !{!38, !38, i64 0}
!82 = !{i8 0, i8 2}
!83 = !{}
!84 = !{!85, !96, i64 288}
!85 = !{!"_ZTS5QBody", !38, i64 8, !38, i64 12, !6, i64 16, !44, i64 24, !44, i64 32, !38, i64 40, !38, i64 44, !86, i64 48, !87, i64 76, !43, i64 80, !43, i64 81, !43, i64 82, !38, i64 84, !88, i64 88, !43, i64 92, !38, i64 96, !43, i64 100, !43, i64 101, !44, i64 104, !38, i64 112, !38, i64 116, !38, i64 120, !38, i64 124, !38, i64 128, !10, i64 132, !10, i64 136, !43, i64 140, !43, i64 141, !43, i64 142, !10, i64 144, !10, i64 148, !10, i64 152, !43, i64 156, !89, i64 160, !89, i64 192, !91, i64 224, !43, i64 256, !92, i64 264, !96, i64 288, !43, i64 292}
!86 = !{!"_ZTS5QAABB", !44, i64 0, !44, i64 8, !44, i64 16, !38, i64 24}
!87 = !{!"_ZTSN5QBody5ModesE", !7, i64 0}
!88 = !{!"_ZTSN5QBody9BodyTypesE", !7, i64 0}
!89 = !{!"_ZTSSt8functionIFvP5QBodyEE", !90, i64 0, !6, i64 24}
!90 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!91 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !90, i64 0, !6, i64 24}
!92 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !93, i64 0}
!93 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !94, i64 0}
!94 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !95, i64 0}
!95 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!96 = !{!"_ZTSN5QBody16SimulationModelsE", !7, i64 0}
!97 = distinct !{!97, !50}
!98 = distinct !{!98, !50}


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

%"class.std::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.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%struct.QVector = type { float, float }

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::vector.74") align 8 %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %class.QAABB, align 8
  %5 = alloca %class.QAABB, align 8
  %6 = alloca %class.QAABB, align 4
  tail call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #4
  %7 = invoke noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293) %1)
          to label %8 unwind label %14

8:                                                ; preds = %3
  %9 = invoke noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293) %2)
          to label %10 unwind label %16

10:                                               ; preds = %8
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %4) #4
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %4, ptr noundef nonnull align 8 dereferenceable(293) %1)
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %5) #4
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %5, ptr noundef nonnull align 8 dereferenceable(293) %2)
  %11 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #4
  %.not121 = icmp eq i64 %11, 0
  br i1 %.not121, label %._crit_edge120, label %.lr.ph119

.lr.ph119:                                        ; preds = %10
  %12 = getelementptr inbounds i8, ptr %1, i64 288
  %13 = getelementptr inbounds i8, ptr %2, i64 288
  br label %18

._crit_edge120:                                   ; preds = %._crit_edge, %10
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %4) #4
  ret void

14:                                               ; preds = %3
  %15 = landingpad { ptr, i32 }
          cleanup
  br label %149

16:                                               ; preds = %8
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %149

18:                                               ; preds = %.lr.ph119, %._crit_edge
  %indvars.iv124 = phi i64 [ 0, %.lr.ph119 ], [ %indvars.iv.next125, %._crit_edge ]
  %19 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QMeshSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv124)
          to label %20 unwind label %27

20:                                               ; preds = %18
  %21 = load ptr, ptr %19, align 8, !tbaa !5
  %22 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #4
  %.not122 = icmp eq i64 %22, 0
  br i1 %.not122, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %20
  %23 = getelementptr inbounds i8, ptr %21, i64 184
  %24 = getelementptr inbounds i8, ptr %21, i64 96
  br label %29

._crit_edge:                                      ; preds = %.loopexit, %20
  %indvars.iv.next125 = add nuw nsw i64 %indvars.iv124, 1
  %25 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #4
  %26 = icmp ugt i64 %25, %indvars.iv.next125
  br i1 %26, label %18, label %._crit_edge120, !llvm.loop !9

27:                                               ; preds = %18
  %28 = landingpad { ptr, i32 }
          cleanup
  br label %148

29:                                               ; preds = %.lr.ph, %.loopexit
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %.loopexit ]
  %30 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP5QMeshSaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %indvars.iv)
          to label %31 unwind label %42

31:                                               ; preds = %29
  %32 = load ptr, ptr %30, align 8, !tbaa !5
  %33 = call noundef ptr @_ZN5QBody8GetWorldEv(ptr noundef nonnull align 8 dereferenceable(293) %1)
  %34 = getelementptr inbounds i8, ptr %33, i64 244
  %35 = load i32, ptr %34, align 4, !tbaa !11
  %36 = add nsw i32 %35, 1
  store i32 %36, ptr %34, align 4, !tbaa !11
  %37 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 1, i32 noundef 1)
          to label %38 unwind label %42

38:                                               ; preds = %31
  br i1 %37, label %.preheader115, label %60

.preheader115:                                    ; preds = %38, %49
  %.0101 = phi i32 [ %50, %49 ], [ 0, %38 ]
  %39 = invoke noundef i32 @_ZN5QMesh24GetSubConvexPolygonCountEv(ptr noundef nonnull align 8 dereferenceable(256) %21)
          to label %40 unwind label %44

40:                                               ; preds = %.preheader115
  %41 = icmp slt i32 %.0101, %39
  br i1 %41, label %.preheader, label %.loopexit

42:                                               ; preds = %133, %107, %84, %72, %60, %31, %29
  %43 = landingpad { ptr, i32 }
          cleanup
  br label %148

44:                                               ; preds = %.preheader115
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %148

.preheader:                                       ; preds = %40, %58
  %.0103 = phi i32 [ %59, %58 ], [ 0, %40 ]
  %46 = invoke noundef i32 @_ZN5QMesh24GetSubConvexPolygonCountEv(ptr noundef nonnull align 8 dereferenceable(256) %32)
          to label %47 unwind label %51

47:                                               ; preds = %.preheader
  %48 = icmp slt i32 %.0103, %46
  br i1 %48, label %53, label %49

49:                                               ; preds = %47
  %50 = add nuw nsw i32 %.0101, 1
  br label %.preheader115, !llvm.loop !50

51:                                               ; preds = %57, %55, %53, %.preheader
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %148

53:                                               ; preds = %47
  %54 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256) %21, i32 noundef %.0101)
          to label %55 unwind label %51

55:                                               ; preds = %53
  %56 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256) %32, i32 noundef %.0103)
          to label %57 unwind label %51

57:                                               ; preds = %55
  invoke void @_ZN10QCollision17PolygonAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %54, ptr noundef nonnull align 8 dereferenceable(24) %56, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %58 unwind label %51

58:                                               ; preds = %57
  %59 = add nuw nsw i32 %.0103, 1
  br label %.preheader, !llvm.loop !51

60:                                               ; preds = %38
  %61 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 0, i32 noundef 1)
          to label %62 unwind label %42

62:                                               ; preds = %60
  br i1 %61, label %63, label %72

63:                                               ; preds = %62
  %64 = load i32, ptr %23, align 8, !tbaa !52
  %65 = icmp eq i32 %64, 0
  %66 = select i1 %65, ptr %21, ptr %32
  %67 = icmp eq ptr %66, %21
  %68 = select i1 %67, ptr %32, ptr %21
  %69 = getelementptr inbounds i8, ptr %68, i64 96
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %66, ptr noundef nonnull align 8 dereferenceable(24) %69, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %.loopexit unwind label %70

70:                                               ; preds = %63
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %148

72:                                               ; preds = %62
  %73 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 0, i32 noundef 0)
          to label %74 unwind label %42

74:                                               ; preds = %72
  br i1 %73, label %75, label %84

75:                                               ; preds = %74
  %76 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %1)
  %77 = icmp eq i32 %76, 0
  br i1 %77, label %78, label %83

78:                                               ; preds = %75
  %79 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %2)
  %80 = icmp eq i32 %79, 0
  br label %83

81:                                               ; preds = %83
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %148

83:                                               ; preds = %78, %75
  %.0102 = phi i1 [ false, %75 ], [ %80, %78 ]
  invoke void @_ZN10QCollision15CircleAndCircleERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EEfb(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull byval(%class.QAABB) align 8 %5, ptr noundef nonnull align 8 dereferenceable(24) %0, float noundef 0.000000e+00, i1 noundef zeroext %.0102)
          to label %.loopexit unwind label %81

84:                                               ; preds = %74
  %85 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 2, i32 noundef 1)
          to label %86 unwind label %42

86:                                               ; preds = %84
  br i1 %85, label %87, label %107

87:                                               ; preds = %86
  %88 = load i32, ptr %23, align 8, !tbaa !52
  %89 = icmp eq i32 %88, 2
  %90 = select i1 %89, ptr %21, ptr %32
  %91 = icmp eq i32 %88, 1
  %92 = select i1 %91, ptr %21, ptr %32
  %93 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %92)
  %.not = icmp eq ptr %93, null
  br i1 %.not, label %.critedge, label %94

94:                                               ; preds = %87
  %95 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %92)
  %96 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %95)
  %97 = icmp eq i32 %96, 1
  br i1 %97, label %100, label %.critedge

98:                                               ; preds = %106, %.critedge, %103, %100
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %148

100:                                              ; preds = %94
  %101 = getelementptr inbounds i8, ptr %90, i64 96
  %102 = getelementptr inbounds i8, ptr %92, i64 96
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %103 unwind label %98

103:                                              ; preds = %100
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %.loopexit unwind label %98

.critedge:                                        ; preds = %87, %94
  %104 = getelementptr inbounds i8, ptr %90, i64 96
  %105 = getelementptr inbounds i8, ptr %92, i64 96
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %104, ptr noundef nonnull align 8 dereferenceable(24) %105, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %106 unwind label %98

106:                                              ; preds = %.critedge
  invoke void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %104, ptr noundef nonnull align 8 dereferenceable(24) %105, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %.loopexit unwind label %98

107:                                              ; preds = %86
  %108 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 2, i32 noundef 2)
          to label %109 unwind label %42

109:                                              ; preds = %107
  br i1 %108, label %110, label %133

110:                                              ; preds = %109
  %111 = load i32, ptr %12, align 8, !tbaa !79
  %112 = icmp eq i32 %111, 0
  br i1 %112, label %113, label %.loopexit

113:                                              ; preds = %110
  %114 = load i32, ptr %13, align 8, !tbaa !79
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %.loopexit

116:                                              ; preds = %113
  %117 = invoke noundef float @_ZN5QMesh14GetPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %21)
          to label %118 unwind label %127

118:                                              ; preds = %116
  %119 = invoke noundef float @_ZN5QMesh21GetInitialPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %21)
          to label %120 unwind label %127

120:                                              ; preds = %118
  %121 = invoke noundef float @_ZN5QMesh14GetPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %32)
          to label %122 unwind label %129

122:                                              ; preds = %120
  %123 = invoke noundef float @_ZN5QMesh21GetInitialPolygonAreaEv(ptr noundef nonnull align 8 dereferenceable(256) %32)
          to label %124 unwind label %129

124:                                              ; preds = %122
  %125 = getelementptr inbounds i8, ptr %32, i64 96
  invoke void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %125, ptr noundef nonnull byval(%class.QAABB) align 8 %5, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %126 unwind label %131

126:                                              ; preds = %124
  invoke void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(24) %125, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull byval(%class.QAABB) align 8 %4, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %.loopexit unwind label %131

127:                                              ; preds = %118, %116
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %148

129:                                              ; preds = %122, %120
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %148

131:                                              ; preds = %126, %124
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %148

133:                                              ; preds = %109
  %134 = invoke noundef zeroext i1 @_ZN5QMesh23CheckCollisionBehaviorsEPS_S0_NS_18CollisionBehaviorsES1_(ptr noundef %21, ptr noundef %32, i32 noundef 2, i32 noundef 0)
          to label %135 unwind label %42

135:                                              ; preds = %133
  br i1 %134, label %136, label %.loopexit

136:                                              ; preds = %135
  %137 = load i32, ptr %23, align 8, !tbaa !52
  %138 = icmp eq i32 %137, 0
  %139 = select i1 %138, ptr %21, ptr %32
  %140 = icmp eq i32 %137, 2
  %141 = select i1 %140, ptr %21, ptr %32
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %6) #4
  %. = select i1 %140, ptr %1, ptr %2
  call void @_ZNK5QBody7GetAABBEv(ptr dead_on_unwind nonnull writable sret(%class.QAABB) align 4 %6, ptr noundef nonnull align 8 dereferenceable(293) %.)
  %142 = getelementptr inbounds i8, ptr %141, i64 96
  invoke void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %139, ptr noundef nonnull align 8 dereferenceable(24) %142, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %143 unwind label %144

143:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %6) #4
  br label %.loopexit

144:                                              ; preds = %136
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %6) #4
  br label %148

.loopexit:                                        ; preds = %40, %126, %103, %106, %83, %63, %135, %143, %110, %113
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %146 = call noundef i64 @_ZNKSt6vectorIP5QMeshSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #4
  %147 = icmp ugt i64 %146, %indvars.iv.next
  br i1 %147, label %29, label %._crit_edge, !llvm.loop !92

148:                                              ; preds = %42, %70, %81, %98, %144, %51, %44, %129, %131, %127, %27
  %.pn108.pn.pn = phi { ptr, i32 } [ %28, %27 ], [ %71, %70 ], [ %82, %81 ], [ %99, %98 ], [ %145, %144 ], [ %43, %42 ], [ %52, %51 ], [ %45, %44 ], [ %128, %127 ], [ %132, %131 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %4) #4
  br label %149

149:                                              ; preds = %16, %148, %14
  %.pn108.pn.pn.pn.pn = phi { ptr, i32 } [ %15, %14 ], [ %.pn108.pn.pn, %148 ], [ %17, %16 ]
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #4
  resume { ptr, i32 } %.pn108.pn.pn.pn.pn
}

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

; 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 #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 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 #3

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

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

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

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

declare noundef ptr @_ZN5QBody9GetMeshesEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN5QMesh21GetSubConvexPolygonAtEi(ptr noundef nonnull align 8 dereferenceable(256), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

declare void @_ZN10QCollision17PolygonAndPolygonERSt6vectorIP9QParticleSaIS2_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 #3

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

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

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

declare void @_ZN10QCollision19PolylineAndPolylineERSt6vectorIP9QParticleSaIS2_EES5_5QAABBRS0_IPNS_7ContactESaIS8_EE(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)) local_unnamed_addr #3

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass