; LLVM IR from erayzesen/QuarkPhysics :: QuarkPhysics/extensions/qplatformerbody.ll (ZN15QPlatformerBody10PostUpdateEv)

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

%"struct.QPlatformerBody::CollisionTestInfo" = type <{ ptr, %struct.QVector, float, %struct.QVector, [4 x i8] }>
%struct.QVector = type { float, float }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = 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.42" = type { %"struct.std::_Vector_base.43" }
%"struct.std::_Vector_base.43" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QManifold = type { %struct.QVector, float, float, i8, ptr, ptr, %"class.std::vector.42" }
%class.QPlatformerBody = type { %class.QRigidBody.base, i8, i8, i32, float, float, ptr, %struct.QVector, float, %struct.QVector, %struct.QVector, %struct.QVector, float, %struct.QVector, %struct.QVector, i8, i8, i32, float, float, i32, float, i32, i32, i32, i32, float, float }
%class.QRigidBody.base = type { %class.QBody.base, i8, %struct.QVector, float }
%class.QBody.base = 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.0", i8, [7 x i8], %"class.std::vector", i32, i8 }>
%class.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%"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.0" = type { %"class.std::_Function_base", ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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 }
%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.0", i8, [7 x i8], %"class.std::vector", i32, i8, [3 x i8] }>
%"struct.QCollision::Contact" = type <{ %struct.QVector, ptr, %struct.QVector, float, [4 x i8], %"class.std::vector.47", i8, [7 x i8] }>
%"class.std::vector.47" = type { %"struct.std::_Vector_base.48" }
%"struct.std::_Vector_base.48" = 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 }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZN7QVector4ZeroEv() #0 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8)) #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody21GetPlatformCollisionsE7QVectorb(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), <2 x float>, i1 noundef zeroext) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293), <2 x float>, i1 noundef zeroext) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zmi7QVectorS_(<2 x float>, <2 x float>) #0

declare void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind writable sret(%"class.std::vector.2") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) #5

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #7 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8), <2 x float>) #8 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody12GetRightWallEf(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), float noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zml7QVectorf(<2 x float>, float noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zpl7QVectorS_(<2 x float>, <2 x float>) #0

declare noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float>, <2 x float>) #5

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody11GetLeftWallEf(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), float noundef) #10 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zmlf7QVector(float noundef, <2 x float>) #0

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15QPlatformerBody10PostUpdateEv(ptr noundef nonnull align 8 dereferenceable(440) %0) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.QVector, align 4
  %4 = alloca %struct.QVector, align 4
  %5 = alloca %struct.QVector, align 4
  %6 = alloca %struct.QVector, align 4
  %7 = alloca %struct.QVector, align 4
  %8 = alloca %struct.QVector, align 4
  %9 = alloca %struct.QVector, align 4
  %10 = alloca %struct.QVector, align 4
  %11 = alloca i8, align 1
  %12 = alloca %struct.QVector, align 4
  %13 = alloca %struct.QVector, align 4
  %14 = alloca %struct.QVector, align 4
  %15 = alloca %struct.QVector, align 4
  %16 = alloca %struct.QVector, align 4
  %17 = alloca %struct.QVector, align 4
  %18 = alloca %struct.QVector, align 4
  %19 = alloca %"class.std::vector.42", align 8
  %20 = alloca %struct.QVector, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i8, align 1
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca %struct.QVector, align 4
  %28 = alloca float, align 4
  %29 = alloca %struct.QVector, align 4
  %30 = alloca %struct.QVector, align 4
  %31 = alloca %struct.QVector, align 4
  %32 = alloca %struct.QVector, align 4
  %33 = alloca %struct.QVector, align 4
  %34 = alloca %struct.QVector, align 4
  %35 = alloca %struct.QVector, align 4
  %36 = alloca %struct.QVector, align 4
  %37 = alloca %struct.QVector, align 4
  %38 = alloca %"class.std::vector.2", align 8
  %39 = alloca %struct.QVector, align 4
  %40 = alloca i64, align 8
  %41 = alloca %class.QManifold, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i64, align 8
  %44 = alloca ptr, align 8
  %45 = alloca %struct.QVector, align 4
  %46 = alloca float, align 4
  %47 = alloca %struct.QVector, align 4
  %48 = alloca %struct.QVector, align 4
  %49 = alloca ptr, align 8
  %50 = alloca %struct.QVector, align 4
  %51 = alloca %struct.QVector, align 4
  %52 = alloca %struct.QVector, align 4
  %53 = alloca %"class.std::vector.2", align 8
  %54 = alloca %struct.QVector, align 4
  %55 = alloca i64, align 8
  %56 = alloca %class.QManifold, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i64, align 8
  %59 = alloca ptr, align 8
  %60 = alloca %struct.QVector, align 4
  %61 = alloca float, align 4
  %62 = alloca %struct.QVector, align 4
  %63 = alloca %struct.QVector, align 4
  %64 = alloca %struct.QVector, align 4
  %65 = alloca %struct.QVector, align 4
  %66 = alloca %struct.QVector, align 4
  %67 = alloca %struct.QVector, align 4
  %68 = alloca %struct.QVector, align 4
  %69 = alloca %struct.QVector, align 4
  %70 = alloca %struct.QVector, align 4
  %71 = alloca %struct.QVector, align 4
  %72 = alloca %struct.QVector, align 4
  %73 = alloca %struct.QVector, align 4
  %74 = alloca %struct.QVector, align 4
  %75 = alloca %struct.QVector, align 4
  %76 = alloca %struct.QVector, align 4
  %77 = alloca %struct.QVector, align 4
  %78 = alloca %struct.QVector, align 4
  %79 = alloca %struct.QVector, align 4
  %80 = alloca %struct.QVector, align 4
  %81 = alloca %struct.QVector, align 4
  %82 = alloca %struct.QVector, align 4
  %83 = alloca %struct.QVector, align 4
  %84 = alloca %struct.QVector, align 4
  %85 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %86 = alloca %struct.QVector, align 4
  %87 = alloca %struct.QVector, align 4
  %88 = alloca %struct.QVector, align 4
  %89 = alloca %struct.QVector, align 4
  %90 = alloca float, align 4
  %91 = alloca %struct.QVector, align 4
  %92 = alloca %struct.QVector, align 4
  %93 = alloca %struct.QVector, align 4
  %94 = alloca %struct.QVector, align 4
  %95 = alloca %struct.QVector, align 4
  %96 = alloca %struct.QVector, align 4
  %97 = alloca %struct.QVector, align 4
  %98 = alloca %struct.QVector, align 4
  %99 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %100 = alloca %struct.QVector, align 4
  %101 = alloca %struct.QVector, align 4
  %102 = alloca %struct.QVector, align 4
  %103 = alloca %struct.QVector, align 4
  %104 = alloca %struct.QVector, align 4
  %105 = alloca %struct.QVector, align 4
  %106 = alloca %struct.QVector, align 4
  %107 = alloca %struct.QVector, align 4
  %108 = alloca %struct.QVector, align 4
  %109 = alloca %struct.QVector, align 4
  %110 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %111 = alloca %struct.QVector, align 4
  %112 = alloca %struct.QVector, align 4
  %113 = alloca %struct.QVector, align 4
  %114 = alloca %struct.QVector, align 4
  %115 = alloca %struct.QVector, align 4
  %116 = alloca %struct.QVector, align 4
  %117 = alloca %struct.QVector, align 4
  %118 = alloca %struct.QVector, align 4
  %119 = alloca %struct.QVector, align 4
  %120 = alloca %struct.QVector, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %121 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #11
  %122 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3, ptr align 4 %122, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #11
  %123 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  %124 = call <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %123)
  store <2 x float> %124, ptr %4, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #11
  %125 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %3, float noundef 0xBFF921FB60000000)
  store <2 x float> %125, ptr %5, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #11
  %126 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %3, float noundef 0x3FF921FB60000000)
  store <2 x float> %126, ptr %6, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #11
  %127 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 8 %127, i64 8, i1 false), !tbaa.struct !9
  %128 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 8
  %129 = load float, ptr %128, align 8, !tbaa !12
  %130 = load <2 x float>, ptr %8, align 4
  %131 = call <2 x float> @_Zml7QVectorf(<2 x float> %130, float noundef %129)
  store <2 x float> %131, ptr %7, align 4
  %132 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 46
  %133 = load i8, ptr %132, align 4, !tbaa !31, !range !32, !noundef !33
  %134 = trunc i8 %133 to i1
  br i1 %134, label %135, label %137

135:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  %136 = call <2 x float> @_ZN7QVector4ZeroEv()
  store <2 x float> %136, ptr %9, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %7, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  br label %137

137:                                              ; preds = %135, %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #11
  %138 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
  store <2 x float> %138, ptr %10, align 4
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #11
  store i8 0, ptr %11, align 1, !tbaa !34
  %139 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  %140 = load ptr, ptr %139, align 8, !tbaa !35
  %141 = icmp ne ptr %140, null
  br i1 %141, label %142, label %242

142:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  %143 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  %144 = load ptr, ptr %143, align 8, !tbaa !35
  %145 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %144)
  store <2 x float> %145, ptr %13, align 4
  %146 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  %147 = load ptr, ptr %146, align 8, !tbaa !35
  %148 = call <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %147)
  store <2 x float> %148, ptr %14, align 4
  %149 = load <2 x float>, ptr %13, align 4
  %150 = load <2 x float>, ptr %14, align 4
  %151 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %149, <2 x float> %150)
  store <2 x float> %151, ptr %12, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !9
  %152 = load <2 x float>, ptr %15, align 4
  %153 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %152, i1 noundef zeroext true)
  store i8 1, ptr %11, align 1, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  %154 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
  store <2 x float> %154, ptr %16, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %16, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %4, i64 8, i1 false), !tbaa.struct !9
  %155 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 5
  %156 = load float, ptr %155, align 8, !tbaa !36
  %157 = load <2 x float>, ptr %18, align 4
  %158 = call <2 x float> @_Zml7QVectorf(<2 x float> %157, float noundef %156)
  store <2 x float> %158, ptr %17, align 4
  %159 = load <2 x float>, ptr %17, align 4
  %160 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %159, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #11
  %161 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 3
  %162 = load ptr, ptr %161, align 8, !tbaa !37
  %163 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  %164 = load ptr, ptr %163, align 8, !tbaa !35
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.42") align 8 %19, ptr noundef %121, ptr noundef %164)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %20, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !9
  %165 = load <2 x float>, ptr %20, align 4
  %166 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %165, i1 noundef zeroext true)
          to label %167 unwind label %172

167:                                              ; preds = %142
  %168 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %169 = icmp eq i64 %168, 0
  br i1 %169, label %170, label %176

170:                                              ; preds = %167
  %171 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  store ptr null, ptr %171, align 8, !tbaa !35
  br label %240

172:                                              ; preds = %142
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %21, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %22, align 4
  br label %241

176:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #11
  store i8 0, ptr %23, align 1, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  store i64 0, ptr %24, align 8, !tbaa !38
  br label %177

177:                                              ; preds = %227, %176
  %178 = load i64, ptr %24, align 8, !tbaa !38
  %179 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %180 = icmp ult i64 %178, %179
  br i1 %180, label %182, label %181

181:                                              ; preds = %177
  store i32 2, ptr %25, align 4
  br label %231

182:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %183 = load i64, ptr %24, align 8, !tbaa !38
  %184 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %183) #11
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  store ptr %185, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %186 = load ptr, ptr %26, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.QCollision::Contact", ptr %186, i32 0, i32 1
  %188 = load ptr, ptr %187, align 8, !tbaa !40
  %189 = invoke noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %188)
          to label %190 unwind label %215

190:                                              ; preds = %182
  %191 = invoke noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %189)
          to label %192 unwind label %215

192:                                              ; preds = %190
  %193 = icmp eq ptr %191, %121
  br i1 %193, label %194, label %197

194:                                              ; preds = %192
  %195 = load ptr, ptr %26, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.QCollision::Contact", ptr %195, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 8 %196, i64 8, i1 false), !tbaa.struct !9
  br label %202

197:                                              ; preds = %192
  %198 = load ptr, ptr %26, align 8, !tbaa !5
  %199 = getelementptr inbounds %"struct.QCollision::Contact", ptr %198, i32 0, i32 2
  %200 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %199)
          to label %201 unwind label %215

201:                                              ; preds = %197
  store <2 x float> %200, ptr %27, align 4
  br label %202

202:                                              ; preds = %201, %194
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %27, i64 8, i1 false), !tbaa.struct !9
  %203 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %203, i64 8, i1 false), !tbaa.struct !9
  %204 = load <2 x float>, ptr %29, align 4
  %205 = load <2 x float>, ptr %30, align 4
  %206 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %204, <2 x float> %205)
          to label %207 unwind label %219

207:                                              ; preds = %202
  store float %206, ptr %28, align 4, !tbaa !10
  %208 = load float, ptr %28, align 4, !tbaa !10
  %209 = invoke noundef float @_ZSt3absf(float noundef %208)
          to label %210 unwind label %219

210:                                              ; preds = %207
  %211 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 4
  %212 = load float, ptr %211, align 4, !tbaa !46
  %213 = fcmp olt float %209, %212
  br i1 %213, label %214, label %223

214:                                              ; preds = %210
  store i8 1, ptr %23, align 1, !tbaa !34
  store i32 2, ptr %25, align 4
  br label %224

215:                                              ; preds = %197, %190, %182
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %21, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %22, align 4
  br label %230

219:                                              ; preds = %207, %202
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %21, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  br label %230

223:                                              ; preds = %210
  store i32 0, ptr %25, align 4
  br label %224

224:                                              ; preds = %223, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  %225 = load i32, ptr %25, align 4
  switch i32 %225, label %231 [
    i32 0, label %226
  ]

226:                                              ; preds = %224
  br label %227

227:                                              ; preds = %226
  %228 = load i64, ptr %24, align 8, !tbaa !38
  %229 = add i64 %228, 1
  store i64 %229, ptr %24, align 8, !tbaa !38
  br label %177, !llvm.loop !47

230:                                              ; preds = %219, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  br label %241

231:                                              ; preds = %224, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %232

232:                                              ; preds = %231
  %233 = load i8, ptr %23, align 1, !tbaa !34, !range !32, !noundef !33
  %234 = trunc i8 %233 to i1
  %235 = zext i1 %234 to i32
  %236 = icmp eq i32 %235, 0
  br i1 %236, label %237, label %239

237:                                              ; preds = %232
  %238 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  store ptr null, ptr %238, align 8, !tbaa !35
  br label %239

239:                                              ; preds = %237, %232
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  br label %240

240:                                              ; preds = %239, %170
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  br label %242

241:                                              ; preds = %230, %172
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  br label %1005

242:                                              ; preds = %240, %137
  %243 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 20
  %244 = load i32, ptr %243, align 8, !tbaa !49
  %245 = icmp eq i32 %244, 1
  br i1 %245, label %246, label %253

246:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  %247 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 21
  %248 = load float, ptr %247, align 4, !tbaa !50
  %249 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %249, i64 8, i1 false), !tbaa.struct !9
  %250 = load <2 x float>, ptr %32, align 4
  %251 = call <2 x float> @_Zmlf7QVector(float noundef %248, <2 x float> %250)
  store <2 x float> %251, ptr %31, align 4
  %252 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %252, ptr align 4 %31, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  br label %283

253:                                              ; preds = %242
  %254 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 20
  %255 = load i32, ptr %254, align 8, !tbaa !49
  %256 = icmp eq i32 %255, 2
  br i1 %256, label %257, label %267

257:                                              ; preds = %253
  %258 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %259 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %259, i64 8, i1 false), !tbaa.struct !9
  %260 = load <2 x float>, ptr %33, align 4
  %261 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %258, <2 x float> %260)
  %262 = fcmp ogt float %261, 0.000000e+00
  br i1 %262, label %263, label %266

263:                                              ; preds = %257
  %264 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 26
  %265 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormLERKf(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(4) %264)
  br label %266

266:                                              ; preds = %263, %257
  br label %282

267:                                              ; preds = %253
  %268 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 20
  %269 = load i32, ptr %268, align 8, !tbaa !49
  %270 = icmp eq i32 %269, 0
  br i1 %270, label %271, label %281

271:                                              ; preds = %267
  %272 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %273 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %273, i64 8, i1 false), !tbaa.struct !9
  %274 = load <2 x float>, ptr %34, align 4
  %275 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %272, <2 x float> %274)
  %276 = fcmp ogt float %275, 0.000000e+00
  br i1 %276, label %277, label %280

277:                                              ; preds = %271
  %278 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 27
  %279 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormLERKf(ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(4) %278)
  br label %280

280:                                              ; preds = %277, %271
  br label %281

281:                                              ; preds = %280, %267
  br label %282

282:                                              ; preds = %281, %266
  br label %283

283:                                              ; preds = %282, %246
  %284 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 25
  %285 = load i32, ptr %284, align 4, !tbaa !51
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %284, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %287 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
  store <2 x float> %287, ptr %35, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %35, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  %288 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 1
  store i8 0, ptr %288, align 4, !tbaa !52
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %4, i64 8, i1 false), !tbaa.struct !9
  %289 = load <2 x float>, ptr %37, align 4
  %290 = call <2 x float> @_Zml7QVectorf(<2 x float> %289, float noundef 1.000000e+00)
  store <2 x float> %290, ptr %36, align 4
  %291 = load <2 x float>, ptr %36, align 4
  %292 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %291, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr %38) #11
  %293 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 3
  %294 = load ptr, ptr %293, align 8, !tbaa !37
  call void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind writable sret(%"class.std::vector.2") align 8 %38, ptr noundef nonnull align 8 dereferenceable(272) %294, ptr noundef %121)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !9
  %295 = load <2 x float>, ptr %39, align 4
  %296 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %295, i1 noundef zeroext true)
          to label %297 unwind label %303

297:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  store i64 0, ptr %40, align 8, !tbaa !38
  br label %298

298:                                              ; preds = %432, %297
  %299 = load i64, ptr %40, align 8, !tbaa !38
  %300 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  %301 = icmp ult i64 %299, %300
  br i1 %301, label %307, label %302

302:                                              ; preds = %298
  store i32 5, ptr %25, align 4
  br label %437

303:                                              ; preds = %444, %441, %283
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %21, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %22, align 4
  br label %1004

307:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 64, ptr %41) #11
  %308 = load i64, ptr %40, align 8, !tbaa !38
  %309 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI9QManifoldSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %308) #11
  invoke void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %41, ptr noundef nonnull align 8 dereferenceable(64) %309)
          to label %310 unwind label %327

310:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #11
  %311 = getelementptr inbounds %class.QManifold, ptr %41, i32 0, i32 4
  %312 = load ptr, ptr %311, align 8, !tbaa !53
  %313 = icmp eq ptr %312, %121
  br i1 %313, label %314, label %317

314:                                              ; preds = %310
  %315 = getelementptr inbounds %class.QManifold, ptr %41, i32 0, i32 5
  %316 = load ptr, ptr %315, align 8, !tbaa !59
  br label %320

317:                                              ; preds = %310
  %318 = getelementptr inbounds %class.QManifold, ptr %41, i32 0, i32 4
  %319 = load ptr, ptr %318, align 8, !tbaa !53
  br label %320

320:                                              ; preds = %317, %314
  %321 = phi ptr [ %316, %314 ], [ %319, %317 ]
  store ptr %321, ptr %42, align 8, !tbaa !5
  %322 = load ptr, ptr %42, align 8, !tbaa !5
  %323 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %322)
          to label %324 unwind label %331

324:                                              ; preds = %320
  %325 = icmp eq i32 %323, 1
  br i1 %325, label %326, label %335

326:                                              ; preds = %324
  store i32 7, ptr %25, align 4
  br label %429

327:                                              ; preds = %307
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %21, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %22, align 4
  br label %436

331:                                              ; preds = %339, %320
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %21, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %22, align 4
  br label %435

335:                                              ; preds = %324
  %336 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 3
  %337 = load i32, ptr %336, align 8, !tbaa !60
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %349

339:                                              ; preds = %335
  %340 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 3
  %341 = load i32, ptr %340, align 8, !tbaa !60
  %342 = load ptr, ptr %42, align 8, !tbaa !5
  %343 = invoke noundef i32 @_ZN5QBody12GetLayersBitEv(ptr noundef nonnull align 8 dereferenceable(293) %342)
          to label %344 unwind label %331

344:                                              ; preds = %339
  %345 = and i32 %341, %343
  %346 = icmp eq i32 %345, 0
  br i1 %346, label %347, label %348

347:                                              ; preds = %344
  store i32 7, ptr %25, align 4
  br label %429

348:                                              ; preds = %344
  br label %349

349:                                              ; preds = %348, %335
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #11
  store i64 0, ptr %43, align 8, !tbaa !38
  br label %350

350:                                              ; preds = %416, %349
  %351 = load i64, ptr %43, align 8, !tbaa !38
  %352 = getelementptr inbounds %class.QManifold, ptr %41, i32 0, i32 6
  %353 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %352) #11
  %354 = icmp ult i64 %351, %353
  br i1 %354, label %356, label %355

355:                                              ; preds = %350
  store i32 8, ptr %25, align 4
  br label %420

356:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #11
  %357 = getelementptr inbounds %class.QManifold, ptr %41, i32 0, i32 6
  %358 = load i64, ptr %43, align 8, !tbaa !38
  %359 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %357, i64 noundef %358) #11
  %360 = load ptr, ptr %359, align 8, !tbaa !5
  store ptr %360, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #11
  %361 = load ptr, ptr %44, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.QCollision::Contact", ptr %361, i32 0, i32 1
  %363 = load ptr, ptr %362, align 8, !tbaa !40
  %364 = invoke noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %363)
          to label %365 unwind label %402

365:                                              ; preds = %356
  %366 = invoke noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %364)
          to label %367 unwind label %402

367:                                              ; preds = %365
  %368 = icmp eq ptr %366, %121
  br i1 %368, label %369, label %372

369:                                              ; preds = %367
  %370 = load ptr, ptr %44, align 8, !tbaa !5
  %371 = getelementptr inbounds %"struct.QCollision::Contact", ptr %370, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 8 %371, i64 8, i1 false), !tbaa.struct !9
  br label %377

372:                                              ; preds = %367
  %373 = load ptr, ptr %44, align 8, !tbaa !5
  %374 = getelementptr inbounds %"struct.QCollision::Contact", ptr %373, i32 0, i32 2
  %375 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %374)
          to label %376 unwind label %402

376:                                              ; preds = %372
  store <2 x float> %375, ptr %45, align 4
  br label %377

377:                                              ; preds = %376, %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %45, i64 8, i1 false), !tbaa.struct !9
  %378 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 %378, i64 8, i1 false), !tbaa.struct !9
  %379 = load <2 x float>, ptr %47, align 4
  %380 = load <2 x float>, ptr %48, align 4
  %381 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %379, <2 x float> %380)
          to label %382 unwind label %406

382:                                              ; preds = %377
  store float %381, ptr %46, align 4, !tbaa !10
  %383 = load float, ptr %46, align 4, !tbaa !10
  %384 = invoke noundef float @_ZSt3absf(float noundef %383)
          to label %385 unwind label %406

385:                                              ; preds = %382
  %386 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 4
  %387 = load float, ptr %386, align 4, !tbaa !46
  %388 = fcmp olt float %384, %387
  br i1 %388, label %389, label %412

389:                                              ; preds = %385
  %390 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 1
  store i8 1, ptr %390, align 4, !tbaa !52
  %391 = load ptr, ptr %42, align 8, !tbaa !5
  %392 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %391)
          to label %393 unwind label %406

393:                                              ; preds = %389
  %394 = icmp eq i32 %392, 0
  br i1 %394, label %395, label %411

395:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %396 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %396, ptr %49, align 8, !tbaa !5
  %397 = load ptr, ptr %49, align 8, !tbaa !5
  %398 = icmp ne ptr %397, null
  br i1 %398, label %399, label %410

399:                                              ; preds = %395
  %400 = load ptr, ptr %49, align 8, !tbaa !5
  %401 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 6
  store ptr %400, ptr %401, align 8, !tbaa !35
  br label %410

402:                                              ; preds = %372, %365, %356
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %21, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %22, align 4
  br label %419

406:                                              ; preds = %389, %382, %377
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %21, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  br label %419

410:                                              ; preds = %399, %395
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  br label %411

411:                                              ; preds = %410, %393
  store i32 8, ptr %25, align 4
  br label %413

412:                                              ; preds = %385
  store i32 0, ptr %25, align 4
  br label %413

413:                                              ; preds = %412, %411
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #11
  %414 = load i32, ptr %25, align 4
  switch i32 %414, label %420 [
    i32 0, label %415
  ]

415:                                              ; preds = %413
  br label %416

416:                                              ; preds = %415
  %417 = load i64, ptr %43, align 8, !tbaa !38
  %418 = add i64 %417, 1
  store i64 %418, ptr %43, align 8, !tbaa !38
  br label %350, !llvm.loop !61

419:                                              ; preds = %406, %402
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %435

420:                                              ; preds = %413, %355
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %421

421:                                              ; preds = %420
  %422 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 1
  %423 = load i8, ptr %422, align 4, !tbaa !52, !range !32, !noundef !33
  %424 = trunc i8 %423 to i1
  %425 = zext i1 %424 to i32
  %426 = icmp eq i32 %425, 1
  br i1 %426, label %427, label %428

427:                                              ; preds = %421
  store i32 5, ptr %25, align 4
  br label %429

428:                                              ; preds = %421
  store i32 0, ptr %25, align 4
  br label %429

429:                                              ; preds = %428, %427, %347, %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %41) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %41) #11
  %430 = load i32, ptr %25, align 4
  switch i32 %430, label %437 [
    i32 0, label %431
    i32 7, label %432
  ]

431:                                              ; preds = %429
  br label %432

432:                                              ; preds = %431, %429
  %433 = load i64, ptr %40, align 8, !tbaa !38
  %434 = add i64 %433, 1
  store i64 %434, ptr %40, align 8, !tbaa !38
  br label %298, !llvm.loop !62

435:                                              ; preds = %419, %331
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %41) #11
  br label %436

436:                                              ; preds = %435, %327
  call void @llvm.lifetime.end.p0(i64 64, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %1004

437:                                              ; preds = %429, %302
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %438

438:                                              ; preds = %437
  %439 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 2
  store i8 0, ptr %439, align 1, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %440 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
          to label %441 unwind label %459

441:                                              ; preds = %438
  store <2 x float> %440, ptr %50, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %50, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr align 4 %3, i64 8, i1 false), !tbaa.struct !9
  %442 = load <2 x float>, ptr %52, align 4
  %443 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %442, float noundef 1.000000e+00)
          to label %444 unwind label %303

444:                                              ; preds = %441
  store <2 x float> %443, ptr %51, align 4
  %445 = load <2 x float>, ptr %51, align 4
  %446 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %445, i1 noundef zeroext true)
          to label %447 unwind label %303

447:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 24, ptr %53) #11
  %448 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 3
  %449 = load ptr, ptr %448, align 8, !tbaa !37
  invoke void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind writable sret(%"class.std::vector.2") align 8 %53, ptr noundef nonnull align 8 dereferenceable(272) %449, ptr noundef %121)
          to label %450 unwind label %463

450:                                              ; preds = %447
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %54, ptr align 4 %10, i64 8, i1 false), !tbaa.struct !9
  %451 = load <2 x float>, ptr %54, align 4
  %452 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %451, i1 noundef zeroext true)
          to label %453 unwind label %467

453:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  store i64 0, ptr %55, align 8, !tbaa !38
  br label %454

454:                                              ; preds = %586, %453
  %455 = load i64, ptr %55, align 8, !tbaa !38
  %456 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %53) #11
  %457 = icmp ult i64 %455, %456
  br i1 %457, label %471, label %458

458:                                              ; preds = %454
  store i32 11, ptr %25, align 4
  br label %591

459:                                              ; preds = %438
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %21, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  br label %1004

463:                                              ; preds = %447
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %21, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %22, align 4
  br label %1003

467:                                              ; preds = %773, %709, %702, %693, %689, %674, %653, %626, %610, %600, %450
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %21, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %22, align 4
  br label %1002

471:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 64, ptr %56) #11
  %472 = load i64, ptr %55, align 8, !tbaa !38
  %473 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI9QManifoldSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %53, i64 noundef %472) #11
  invoke void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %56, ptr noundef nonnull align 8 dereferenceable(64) %473)
          to label %474 unwind label %491

474:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #11
  %475 = getelementptr inbounds %class.QManifold, ptr %56, i32 0, i32 4
  %476 = load ptr, ptr %475, align 8, !tbaa !53
  %477 = icmp eq ptr %476, %121
  br i1 %477, label %478, label %481

478:                                              ; preds = %474
  %479 = getelementptr inbounds %class.QManifold, ptr %56, i32 0, i32 5
  %480 = load ptr, ptr %479, align 8, !tbaa !59
  br label %484

481:                                              ; preds = %474
  %482 = getelementptr inbounds %class.QManifold, ptr %56, i32 0, i32 4
  %483 = load ptr, ptr %482, align 8, !tbaa !53
  br label %484

484:                                              ; preds = %481, %478
  %485 = phi ptr [ %480, %478 ], [ %483, %481 ]
  store ptr %485, ptr %57, align 8, !tbaa !5
  %486 = load ptr, ptr %57, align 8, !tbaa !5
  %487 = invoke noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %486)
          to label %488 unwind label %495

488:                                              ; preds = %484
  %489 = icmp eq i32 %487, 1
  br i1 %489, label %490, label %499

490:                                              ; preds = %488
  store i32 13, ptr %25, align 4
  br label %583

491:                                              ; preds = %471
  %492 = landingpad { ptr, i32 }
          cleanup
  %493 = extractvalue { ptr, i32 } %492, 0
  store ptr %493, ptr %21, align 8
  %494 = extractvalue { ptr, i32 } %492, 1
  store i32 %494, ptr %22, align 4
  br label %590

495:                                              ; preds = %503, %484
  %496 = landingpad { ptr, i32 }
          cleanup
  %497 = extractvalue { ptr, i32 } %496, 0
  store ptr %497, ptr %21, align 8
  %498 = extractvalue { ptr, i32 } %496, 1
  store i32 %498, ptr %22, align 4
  br label %589

499:                                              ; preds = %488
  %500 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 3
  %501 = load i32, ptr %500, align 8, !tbaa !60
  %502 = icmp ne i32 %501, 0
  br i1 %502, label %503, label %513

503:                                              ; preds = %499
  %504 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 3
  %505 = load i32, ptr %504, align 8, !tbaa !60
  %506 = load ptr, ptr %57, align 8, !tbaa !5
  %507 = invoke noundef i32 @_ZN5QBody12GetLayersBitEv(ptr noundef nonnull align 8 dereferenceable(293) %506)
          to label %508 unwind label %495

508:                                              ; preds = %503
  %509 = and i32 %505, %507
  %510 = icmp eq i32 %509, 0
  br i1 %510, label %511, label %512

511:                                              ; preds = %508
  store i32 13, ptr %25, align 4
  br label %583

512:                                              ; preds = %508
  br label %513

513:                                              ; preds = %512, %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #11
  store i64 0, ptr %58, align 8, !tbaa !38
  br label %514

514:                                              ; preds = %570, %513
  %515 = load i64, ptr %58, align 8, !tbaa !38
  %516 = getelementptr inbounds %class.QManifold, ptr %56, i32 0, i32 6
  %517 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %516) #11
  %518 = icmp ult i64 %515, %517
  br i1 %518, label %520, label %519

519:                                              ; preds = %514
  store i32 14, ptr %25, align 4
  br label %574

520:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #11
  %521 = getelementptr inbounds %class.QManifold, ptr %56, i32 0, i32 6
  %522 = load i64, ptr %58, align 8, !tbaa !38
  %523 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %521, i64 noundef %522) #11
  %524 = load ptr, ptr %523, align 8, !tbaa !5
  store ptr %524, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  %525 = load ptr, ptr %59, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.QCollision::Contact", ptr %525, i32 0, i32 1
  %527 = load ptr, ptr %526, align 8, !tbaa !40
  %528 = invoke noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %527)
          to label %529 unwind label %558

529:                                              ; preds = %520
  %530 = invoke noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %528)
          to label %531 unwind label %558

531:                                              ; preds = %529
  %532 = icmp eq ptr %530, %121
  br i1 %532, label %533, label %536

533:                                              ; preds = %531
  %534 = load ptr, ptr %59, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.QCollision::Contact", ptr %534, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %60, ptr align 8 %535, i64 8, i1 false), !tbaa.struct !9
  br label %541

536:                                              ; preds = %531
  %537 = load ptr, ptr %59, align 8, !tbaa !5
  %538 = getelementptr inbounds %"struct.QCollision::Contact", ptr %537, i32 0, i32 2
  %539 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %538)
          to label %540 unwind label %558

540:                                              ; preds = %536
  store <2 x float> %539, ptr %60, align 4
  br label %541

541:                                              ; preds = %540, %533
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %62, ptr align 4 %60, i64 8, i1 false), !tbaa.struct !9
  %542 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %63, ptr align 4 %542, i64 8, i1 false), !tbaa.struct !9
  %543 = load <2 x float>, ptr %62, align 4
  %544 = load <2 x float>, ptr %63, align 4
  %545 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %543, <2 x float> %544)
          to label %546 unwind label %562

546:                                              ; preds = %541
  store float %545, ptr %61, align 4, !tbaa !10
  %547 = load float, ptr %61, align 4, !tbaa !10
  %548 = invoke noundef float @_ZSt3absf(float noundef %547)
          to label %549 unwind label %562

549:                                              ; preds = %546
  %550 = fpext float %548 to double
  %551 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 4
  %552 = load float, ptr %551, align 4, !tbaa !46
  %553 = fpext float %552 to double
  %554 = fsub double 0x400921FB54442D18, %553
  %555 = fcmp ogt double %550, %554
  br i1 %555, label %556, label %566

556:                                              ; preds = %549
  %557 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 2
  store i8 1, ptr %557, align 1, !tbaa !63
  store i32 14, ptr %25, align 4
  br label %567

558:                                              ; preds = %536, %529, %520
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %21, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %22, align 4
  br label %573

562:                                              ; preds = %546, %541
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %21, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  br label %573

566:                                              ; preds = %549
  store i32 0, ptr %25, align 4
  br label %567

567:                                              ; preds = %566, %556
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  %568 = load i32, ptr %25, align 4
  switch i32 %568, label %574 [
    i32 0, label %569
  ]

569:                                              ; preds = %567
  br label %570

570:                                              ; preds = %569
  %571 = load i64, ptr %58, align 8, !tbaa !38
  %572 = add i64 %571, 1
  store i64 %572, ptr %58, align 8, !tbaa !38
  br label %514, !llvm.loop !64

573:                                              ; preds = %562, %558
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %589

574:                                              ; preds = %567, %519
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %575

575:                                              ; preds = %574
  %576 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 2
  %577 = load i8, ptr %576, align 1, !tbaa !63, !range !32, !noundef !33
  %578 = trunc i8 %577 to i1
  %579 = zext i1 %578 to i32
  %580 = icmp eq i32 %579, 1
  br i1 %580, label %581, label %582

581:                                              ; preds = %575
  store i32 11, ptr %25, align 4
  br label %583

582:                                              ; preds = %575
  store i32 0, ptr %25, align 4
  br label %583

583:                                              ; preds = %582, %581, %511, %490
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %56) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %56) #11
  %584 = load i32, ptr %25, align 4
  switch i32 %584, label %591 [
    i32 0, label %585
    i32 13, label %586
  ]

585:                                              ; preds = %583
  br label %586

586:                                              ; preds = %585, %583
  %587 = load i64, ptr %55, align 8, !tbaa !38
  %588 = add i64 %587, 1
  store i64 %588, ptr %55, align 8, !tbaa !38
  br label %454, !llvm.loop !65

589:                                              ; preds = %573, %495
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %56) #11
  br label %590

590:                                              ; preds = %589, %491
  call void @llvm.lifetime.end.p0(i64 64, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %1002

591:                                              ; preds = %583, %458
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %592

592:                                              ; preds = %591
  %593 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 1
  %594 = load i8, ptr %593, align 4, !tbaa !52, !range !32, !noundef !33
  %595 = trunc i8 %594 to i1
  br i1 %595, label %596, label %600

596:                                              ; preds = %592
  %597 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 16
  store i8 0, ptr %597, align 1, !tbaa !66
  %598 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 15
  store i8 0, ptr %598, align 8, !tbaa !67
  %599 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 23
  store i32 0, ptr %599, align 4, !tbaa !68
  br label %622

600:                                              ; preds = %592
  %601 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %602 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %64, ptr align 4 %602, i64 8, i1 false), !tbaa.struct !9
  %603 = load <2 x float>, ptr %64, align 4
  %604 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %601, <2 x float> %603)
          to label %605 unwind label %467

605:                                              ; preds = %600
  %606 = fcmp olt float %604, 0.000000e+00
  br i1 %606, label %607, label %610

607:                                              ; preds = %605
  %608 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 15
  store i8 1, ptr %608, align 8, !tbaa !67
  %609 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 16
  store i8 0, ptr %609, align 1, !tbaa !66
  br label %621

610:                                              ; preds = %605
  %611 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %612 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %65, ptr align 4 %612, i64 8, i1 false), !tbaa.struct !9
  %613 = load <2 x float>, ptr %65, align 4
  %614 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %611, <2 x float> %613)
          to label %615 unwind label %467

615:                                              ; preds = %610
  %616 = fcmp ogt float %614, 0.000000e+00
  br i1 %616, label %617, label %620

617:                                              ; preds = %615
  %618 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 15
  store i8 0, ptr %618, align 8, !tbaa !67
  %619 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 16
  store i8 1, ptr %619, align 1, !tbaa !66
  br label %620

620:                                              ; preds = %617, %615
  br label %621

621:                                              ; preds = %620, %607
  br label %622

622:                                              ; preds = %621, %596
  %623 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %624 = load float, ptr %623, align 8, !tbaa !69
  %625 = fcmp ogt float %624, 0.000000e+00
  br i1 %625, label %626, label %647

626:                                              ; preds = %622
  %627 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %628 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %627)
          to label %629 unwind label %467

629:                                              ; preds = %626
  %630 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %631 = load float, ptr %630, align 8, !tbaa !69
  %632 = fcmp ogt float %628, %631
  br i1 %632, label %633, label %647

633:                                              ; preds = %629
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  %634 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %635 = load float, ptr %634, align 8, !tbaa !69
  %636 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %637 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %636)
          to label %638 unwind label %643

638:                                              ; preds = %633
  store <2 x float> %637, ptr %67, align 4
  %639 = load <2 x float>, ptr %67, align 4
  %640 = invoke <2 x float> @_Zmlf7QVector(float noundef %635, <2 x float> %639)
          to label %641 unwind label %643

641:                                              ; preds = %638
  store <2 x float> %640, ptr %66, align 4
  %642 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %642, ptr align 4 %66, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %647

643:                                              ; preds = %638, %633
  %644 = landingpad { ptr, i32 }
          cleanup
  %645 = extractvalue { ptr, i32 } %644, 0
  store ptr %645, ptr %21, align 8
  %646 = extractvalue { ptr, i32 } %644, 1
  store i32 %646, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %1002

647:                                              ; preds = %641, %629, %622
  %648 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 1
  %649 = load i8, ptr %648, align 4, !tbaa !52, !range !32, !noundef !33
  %650 = trunc i8 %649 to i1
  %651 = zext i1 %650 to i32
  %652 = icmp eq i32 %651, 1
  br i1 %652, label %653, label %668

653:                                              ; preds = %647
  %654 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %655 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %68, ptr align 4 %655, i64 8, i1 false), !tbaa.struct !9
  %656 = load <2 x float>, ptr %68, align 4
  %657 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %654, <2 x float> %656)
          to label %658 unwind label %467

658:                                              ; preds = %653
  %659 = fcmp olt float %657, 0.000000e+00
  br i1 %659, label %660, label %668

660:                                              ; preds = %658
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #11
  %661 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %662 unwind label %664

662:                                              ; preds = %660
  store <2 x float> %661, ptr %69, align 4
  %663 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %663, ptr align 4 %69, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  br label %698

664:                                              ; preds = %660
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %21, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  br label %1002

668:                                              ; preds = %658, %647
  %669 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 2
  %670 = load i8, ptr %669, align 1, !tbaa !63, !range !32, !noundef !33
  %671 = trunc i8 %670 to i1
  %672 = zext i1 %671 to i32
  %673 = icmp eq i32 %672, 1
  br i1 %673, label %674, label %689

674:                                              ; preds = %668
  %675 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %676 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %70, ptr align 4 %676, i64 8, i1 false), !tbaa.struct !9
  %677 = load <2 x float>, ptr %70, align 4
  %678 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %675, <2 x float> %677)
          to label %679 unwind label %467

679:                                              ; preds = %674
  %680 = fcmp ogt float %678, 0.000000e+00
  br i1 %680, label %681, label %689

681:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #11
  %682 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %683 unwind label %685

683:                                              ; preds = %681
  store <2 x float> %682, ptr %71, align 4
  %684 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %684, ptr align 4 %71, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %697

685:                                              ; preds = %681
  %686 = landingpad { ptr, i32 }
          cleanup
  %687 = extractvalue { ptr, i32 } %686, 0
  store ptr %687, ptr %21, align 8
  %688 = extractvalue { ptr, i32 } %686, 1
  store i32 %688, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %1002

689:                                              ; preds = %679, %668
  %690 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %72, ptr align 8 %690, i64 8, i1 false), !tbaa.struct !9
  %691 = load <2 x float>, ptr %72, align 4
  %692 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %691, i1 noundef zeroext true)
          to label %693 unwind label %467

693:                                              ; preds = %689
  %694 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 14
  %695 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %694, ptr noundef nonnull align 4 dereferenceable(8) %7)
          to label %696 unwind label %467

696:                                              ; preds = %693
  br label %697

697:                                              ; preds = %696, %683
  br label %698

698:                                              ; preds = %697, %662
  %699 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 17
  %700 = load i32, ptr %699, align 4, !tbaa !70
  %701 = icmp eq i32 %700, 0
  br i1 %701, label %702, label %741

702:                                              ; preds = %698
  %703 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %704 = getelementptr inbounds %struct.QVector, ptr %703, i32 0, i32 0
  %705 = load float, ptr %704, align 8, !tbaa !71
  %706 = invoke noundef float @_ZSt3absf(float noundef %705)
          to label %707 unwind label %467

707:                                              ; preds = %702
  %708 = fcmp olt float %706, 0x3F50624DE0000000
  br i1 %708, label %709, label %724

709:                                              ; preds = %707
  %710 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %711 = getelementptr inbounds %struct.QVector, ptr %710, i32 0, i32 1
  %712 = load float, ptr %711, align 4, !tbaa !72
  %713 = invoke noundef float @_ZSt3absf(float noundef %712)
          to label %714 unwind label %467

714:                                              ; preds = %709
  %715 = fcmp olt float %713, 0x3F50624DE0000000
  br i1 %715, label %716, label %724

716:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #11
  %717 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %718 unwind label %720

718:                                              ; preds = %716
  store <2 x float> %717, ptr %73, align 4
  %719 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %719, ptr align 4 %73, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %740

720:                                              ; preds = %716
  %721 = landingpad { ptr, i32 }
          cleanup
  %722 = extractvalue { ptr, i32 } %721, 0
  store ptr %722, ptr %21, align 8
  %723 = extractvalue { ptr, i32 } %721, 1
  store i32 %723, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %1002

724:                                              ; preds = %714, %707
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #11
  %725 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %726 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %725)
          to label %727 unwind label %736

727:                                              ; preds = %724
  store <2 x float> %726, ptr %75, align 4
  %728 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 19
  %729 = load float, ptr %728, align 4, !tbaa !73
  %730 = load <2 x float>, ptr %75, align 4
  %731 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %730, float noundef %729)
          to label %732 unwind label %736

732:                                              ; preds = %727
  store <2 x float> %731, ptr %74, align 4
  %733 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %734 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %733, ptr noundef nonnull align 4 dereferenceable(8) %74)
          to label %735 unwind label %736

735:                                              ; preds = %732
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  br label %740

736:                                              ; preds = %732, %727, %724
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %21, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  br label %1002

740:                                              ; preds = %735, %718
  br label %769

741:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #11
  %742 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 12
  %743 = load float, ptr %742, align 4, !tbaa !74
  %744 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 17
  %745 = load i32, ptr %744, align 4, !tbaa !70
  %746 = sitofp i32 %745 to float
  %747 = fmul float %743, %746
  %748 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %79, ptr align 4 %748, i64 8, i1 false), !tbaa.struct !9
  %749 = load <2 x float>, ptr %79, align 4
  %750 = invoke <2 x float> @_Zmlf7QVector(float noundef %747, <2 x float> %749)
          to label %751 unwind label %765

751:                                              ; preds = %741
  store <2 x float> %750, ptr %78, align 4
  %752 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %80, ptr align 8 %752, i64 8, i1 false), !tbaa.struct !9
  %753 = load <2 x float>, ptr %78, align 4
  %754 = load <2 x float>, ptr %80, align 4
  %755 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %753, <2 x float> %754)
          to label %756 unwind label %765

756:                                              ; preds = %751
  store <2 x float> %755, ptr %77, align 4
  %757 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 18
  %758 = load float, ptr %757, align 8, !tbaa !75
  %759 = load <2 x float>, ptr %77, align 4
  %760 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %759, float noundef %758)
          to label %761 unwind label %765

761:                                              ; preds = %756
  store <2 x float> %760, ptr %76, align 4
  %762 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %763 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %762, ptr noundef nonnull align 4 dereferenceable(8) %76)
          to label %764 unwind label %765

764:                                              ; preds = %761
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  br label %769

765:                                              ; preds = %761, %756, %751, %741
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %21, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  br label %1002

769:                                              ; preds = %764, %740
  %770 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %771 = load float, ptr %770, align 8, !tbaa !69
  %772 = fcmp ogt float %771, 0.000000e+00
  br i1 %772, label %773, label %794

773:                                              ; preds = %769
  %774 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %775 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %774)
          to label %776 unwind label %467

776:                                              ; preds = %773
  %777 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %778 = load float, ptr %777, align 8, !tbaa !69
  %779 = fcmp ogt float %775, %778
  br i1 %779, label %780, label %794

780:                                              ; preds = %776
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #11
  %781 = getelementptr inbounds %class.QBody, ptr %121, i32 0, i32 18
  %782 = load float, ptr %781, align 8, !tbaa !69
  %783 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %784 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %783)
          to label %785 unwind label %790

785:                                              ; preds = %780
  store <2 x float> %784, ptr %82, align 4
  %786 = load <2 x float>, ptr %82, align 4
  %787 = invoke <2 x float> @_Zmlf7QVector(float noundef %782, <2 x float> %786)
          to label %788 unwind label %790

788:                                              ; preds = %785
  store <2 x float> %787, ptr %81, align 4
  %789 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %789, ptr align 4 %81, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  br label %794

790:                                              ; preds = %785, %780
  %791 = landingpad { ptr, i32 }
          cleanup
  %792 = extractvalue { ptr, i32 } %791, 0
  store ptr %792, ptr %21, align 8
  %793 = extractvalue { ptr, i32 } %791, 1
  store i32 %793, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  br label %1002

794:                                              ; preds = %788, %776, %769
  %795 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #11
  %796 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %797 unwind label %841

797:                                              ; preds = %794
  store <2 x float> %796, ptr %83, align 4
  %798 = invoke noundef zeroext i1 @_ZNK7QVectorneERKS_(ptr noundef nonnull align 4 dereferenceable(8) %795, ptr noundef nonnull align 4 dereferenceable(8) %83)
          to label %799 unwind label %841

799:                                              ; preds = %797
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  br i1 %798, label %800, label %869

800:                                              ; preds = %799
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #11
  %801 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 8 %801, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #11
  %802 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
          to label %803 unwind label %845

803:                                              ; preds = %800
  store <2 x float> %802, ptr %87, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %89, ptr align 4 %4, i64 8, i1 false), !tbaa.struct !9
  %804 = load <2 x float>, ptr %89, align 4
  %805 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %804, float noundef 5.000000e+00)
          to label %806 unwind label %845

806:                                              ; preds = %803
  store <2 x float> %805, ptr %88, align 4
  %807 = load <2 x float>, ptr %87, align 4
  %808 = load <2 x float>, ptr %88, align 4
  %809 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %807, <2 x float> %808)
          to label %810 unwind label %845

810:                                              ; preds = %806
  store <2 x float> %809, ptr %86, align 4
  %811 = load <2 x float>, ptr %86, align 4
  invoke void @_ZN15QPlatformerBody21GetPlatformCollisionsE7QVectorb(ptr dead_on_unwind writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %85, ptr noundef nonnull align 8 dereferenceable(440) %121, <2 x float> %811, i1 noundef zeroext true)
          to label %812 unwind label %845

812:                                              ; preds = %810
  %813 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %85, i32 0, i32 0
  %814 = load ptr, ptr %813, align 8, !tbaa !76
  %815 = icmp ne ptr %814, null
  br i1 %815, label %816, label %864

816:                                              ; preds = %812
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #11
  %817 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %85, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %91, ptr align 4 %817, i64 8, i1 false), !tbaa.struct !9
  %818 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %92, ptr align 4 %818, i64 8, i1 false), !tbaa.struct !9
  %819 = load <2 x float>, ptr %91, align 4
  %820 = load <2 x float>, ptr %92, align 4
  %821 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %819, <2 x float> %820)
          to label %822 unwind label %849

822:                                              ; preds = %816
  store float %821, ptr %90, align 4, !tbaa !10
  %823 = load float, ptr %90, align 4, !tbaa !10
  %824 = invoke noundef float @_ZSt3absf(float noundef %823)
          to label %825 unwind label %849

825:                                              ; preds = %822
  %826 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 4
  %827 = load float, ptr %826, align 4, !tbaa !46
  %828 = fcmp ole float %824, %827
  br i1 %828, label %829, label %862

829:                                              ; preds = %825
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #11
  %830 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %85, i32 0, i32 3
  %831 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %830)
          to label %832 unwind label %853

832:                                              ; preds = %829
  store <2 x float> %831, ptr %94, align 4
  %833 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %94)
          to label %834 unwind label %853

834:                                              ; preds = %832
  store <2 x float> %833, ptr %93, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %96, ptr align 4 %93, i64 8, i1 false), !tbaa.struct !9
  %835 = load <2 x float>, ptr %96, align 4
  %836 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %84, <2 x float> %835)
          to label %837 unwind label %857

837:                                              ; preds = %834
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %97, ptr align 4 %93, i64 8, i1 false), !tbaa.struct !9
  %838 = load <2 x float>, ptr %97, align 4
  %839 = invoke <2 x float> @_Zmlf7QVector(float noundef %836, <2 x float> %838)
          to label %840 unwind label %857

840:                                              ; preds = %837
  store <2 x float> %839, ptr %95, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 4 %95, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  br label %862

841:                                              ; preds = %797, %794
  %842 = landingpad { ptr, i32 }
          cleanup
  %843 = extractvalue { ptr, i32 } %842, 0
  store ptr %843, ptr %21, align 8
  %844 = extractvalue { ptr, i32 } %842, 1
  store i32 %844, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  br label %1002

845:                                              ; preds = %864, %810, %806, %803, %800
  %846 = landingpad { ptr, i32 }
          cleanup
  %847 = extractvalue { ptr, i32 } %846, 0
  store ptr %847, ptr %21, align 8
  %848 = extractvalue { ptr, i32 } %846, 1
  store i32 %848, ptr %22, align 4
  br label %868

849:                                              ; preds = %822, %816
  %850 = landingpad { ptr, i32 }
          cleanup
  %851 = extractvalue { ptr, i32 } %850, 0
  store ptr %851, ptr %21, align 8
  %852 = extractvalue { ptr, i32 } %850, 1
  store i32 %852, ptr %22, align 4
  br label %863

853:                                              ; preds = %832, %829
  %854 = landingpad { ptr, i32 }
          cleanup
  %855 = extractvalue { ptr, i32 } %854, 0
  store ptr %855, ptr %21, align 8
  %856 = extractvalue { ptr, i32 } %854, 1
  store i32 %856, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  br label %861

857:                                              ; preds = %837, %834
  %858 = landingpad { ptr, i32 }
          cleanup
  %859 = extractvalue { ptr, i32 } %858, 0
  store ptr %859, ptr %21, align 8
  %860 = extractvalue { ptr, i32 } %858, 1
  store i32 %860, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #11
  br label %861

861:                                              ; preds = %857, %853
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  br label %863

862:                                              ; preds = %840, %825
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #11
  br label %864

863:                                              ; preds = %861, %849
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #11
  br label %868

864:                                              ; preds = %862, %812
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %98, ptr align 4 %84, i64 8, i1 false), !tbaa.struct !9
  %865 = load <2 x float>, ptr %98, align 4
  %866 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %865, i1 noundef zeroext true)
          to label %867 unwind label %845

867:                                              ; preds = %864
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #11
  br label %869

868:                                              ; preds = %863, %845
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #11
  br label %1002

869:                                              ; preds = %867, %799
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #11
  invoke void @_ZN15QPlatformerBody12GetRightWallEf(ptr dead_on_unwind writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %99, ptr noundef nonnull align 8 dereferenceable(440) %121, float noundef 0.000000e+00)
          to label %870 unwind label %914

870:                                              ; preds = %869
  %871 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %99, i32 0, i32 0
  %872 = load ptr, ptr %871, align 8, !tbaa !76
  %873 = icmp ne ptr %872, null
  br i1 %873, label %874, label %932

874:                                              ; preds = %870
  %875 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %876 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %100, ptr align 4 %876, i64 8, i1 false), !tbaa.struct !9
  %877 = load <2 x float>, ptr %100, align 4
  %878 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %875, <2 x float> %877)
          to label %879 unwind label %914

879:                                              ; preds = %874
  %880 = fcmp ogt float %878, 0.000000e+00
  br i1 %880, label %881, label %931

881:                                              ; preds = %879
  %882 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %99, i32 0, i32 0
  %883 = load ptr, ptr %882, align 8, !tbaa !76
  %884 = invoke noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %883)
          to label %885 unwind label %914

885:                                              ; preds = %881
  %886 = icmp eq i32 %884, 1
  br i1 %886, label %887, label %931

887:                                              ; preds = %885
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #11
  %888 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %889 unwind label %918

889:                                              ; preds = %887
  store <2 x float> %888, ptr %101, align 4
  %890 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %890, ptr align 4 %101, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #11
  %891 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %99, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %103, ptr align 4 %891, i64 8, i1 false), !tbaa.struct !9
  %892 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %99, i32 0, i32 2
  %893 = load float, ptr %892, align 8, !tbaa !78
  %894 = load <2 x float>, ptr %103, align 4
  %895 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %894, float noundef %893)
          to label %896 unwind label %922

896:                                              ; preds = %889
  store <2 x float> %895, ptr %102, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #11
  %897 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %105, ptr align 4 %897, i64 8, i1 false), !tbaa.struct !9
  %898 = load <2 x float>, ptr %105, align 4
  %899 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %102, <2 x float> %898)
          to label %900 unwind label %926

900:                                              ; preds = %896
  %901 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %106, ptr align 4 %901, i64 8, i1 false), !tbaa.struct !9
  %902 = load <2 x float>, ptr %106, align 4
  %903 = invoke <2 x float> @_Zmlf7QVector(float noundef %899, <2 x float> %902)
          to label %904 unwind label %926

904:                                              ; preds = %900
  store <2 x float> %903, ptr %104, align 4
  %905 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
          to label %906 unwind label %926

906:                                              ; preds = %904
  store <2 x float> %905, ptr %108, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %109, ptr align 4 %104, i64 8, i1 false), !tbaa.struct !9
  %907 = load <2 x float>, ptr %108, align 4
  %908 = load <2 x float>, ptr %109, align 4
  %909 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %907, <2 x float> %908)
          to label %910 unwind label %926

910:                                              ; preds = %906
  store <2 x float> %909, ptr %107, align 4
  %911 = load <2 x float>, ptr %107, align 4
  %912 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %911, i1 noundef zeroext true)
          to label %913 unwind label %926

913:                                              ; preds = %910
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #11
  br label %931

914:                                              ; preds = %881, %874, %869
  %915 = landingpad { ptr, i32 }
          cleanup
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %21, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %22, align 4
  br label %1001

918:                                              ; preds = %887
  %919 = landingpad { ptr, i32 }
          cleanup
  %920 = extractvalue { ptr, i32 } %919, 0
  store ptr %920, ptr %21, align 8
  %921 = extractvalue { ptr, i32 } %919, 1
  store i32 %921, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  br label %1001

922:                                              ; preds = %889
  %923 = landingpad { ptr, i32 }
          cleanup
  %924 = extractvalue { ptr, i32 } %923, 0
  store ptr %924, ptr %21, align 8
  %925 = extractvalue { ptr, i32 } %923, 1
  store i32 %925, ptr %22, align 4
  br label %930

926:                                              ; preds = %910, %906, %904, %900, %896
  %927 = landingpad { ptr, i32 }
          cleanup
  %928 = extractvalue { ptr, i32 } %927, 0
  store ptr %928, ptr %21, align 8
  %929 = extractvalue { ptr, i32 } %927, 1
  store i32 %929, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  br label %930

930:                                              ; preds = %926, %922
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #11
  br label %1001

931:                                              ; preds = %913, %885, %879
  br label %932

932:                                              ; preds = %931, %870
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #11
  invoke void @_ZN15QPlatformerBody11GetLeftWallEf(ptr dead_on_unwind writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %110, ptr noundef nonnull align 8 dereferenceable(440) %121, float noundef 0.000000e+00)
          to label %933 unwind label %981

933:                                              ; preds = %932
  %934 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %110, i32 0, i32 0
  %935 = load ptr, ptr %934, align 8, !tbaa !76
  %936 = icmp ne ptr %935, null
  br i1 %936, label %937, label %999

937:                                              ; preds = %933
  %938 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  %939 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %111, ptr align 4 %939, i64 8, i1 false), !tbaa.struct !9
  %940 = load <2 x float>, ptr %111, align 4
  %941 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %938, <2 x float> %940)
          to label %942 unwind label %981

942:                                              ; preds = %937
  %943 = fcmp olt float %941, 0.000000e+00
  br i1 %943, label %944, label %998

944:                                              ; preds = %942
  %945 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %110, i32 0, i32 0
  %946 = load ptr, ptr %945, align 8, !tbaa !76
  %947 = invoke noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %946)
          to label %948 unwind label %981

948:                                              ; preds = %944
  %949 = icmp eq i32 %947, 1
  br i1 %949, label %950, label %998

950:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #11
  %951 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %952 unwind label %985

952:                                              ; preds = %950
  store <2 x float> %951, ptr %112, align 4
  %953 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %953, ptr align 4 %112, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #11
  %954 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %110, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %114, ptr align 4 %954, i64 8, i1 false), !tbaa.struct !9
  %955 = getelementptr inbounds %"struct.QPlatformerBody::CollisionTestInfo", ptr %110, i32 0, i32 2
  %956 = load float, ptr %955, align 8, !tbaa !78
  %957 = load <2 x float>, ptr %114, align 4
  %958 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %957, float noundef %956)
          to label %959 unwind label %989

959:                                              ; preds = %952
  store <2 x float> %958, ptr %113, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #11
  %960 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  %961 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %960)
          to label %962 unwind label %993

962:                                              ; preds = %959
  store <2 x float> %961, ptr %116, align 4
  %963 = load <2 x float>, ptr %116, align 4
  %964 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %113, <2 x float> %963)
          to label %965 unwind label %993

965:                                              ; preds = %962
  %966 = getelementptr inbounds %class.QPlatformerBody, ptr %121, i32 0, i32 11
  %967 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %966)
          to label %968 unwind label %993

968:                                              ; preds = %965
  store <2 x float> %967, ptr %117, align 4
  %969 = load <2 x float>, ptr %117, align 4
  %970 = invoke <2 x float> @_Zmlf7QVector(float noundef %964, <2 x float> %969)
          to label %971 unwind label %993

971:                                              ; preds = %968
  store <2 x float> %970, ptr %115, align 4
  %972 = invoke <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %121)
          to label %973 unwind label %993

973:                                              ; preds = %971
  store <2 x float> %972, ptr %119, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %120, ptr align 4 %115, i64 8, i1 false), !tbaa.struct !9
  %974 = load <2 x float>, ptr %119, align 4
  %975 = load <2 x float>, ptr %120, align 4
  %976 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %974, <2 x float> %975)
          to label %977 unwind label %993

977:                                              ; preds = %973
  store <2 x float> %976, ptr %118, align 4
  %978 = load <2 x float>, ptr %118, align 4
  %979 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %121, <2 x float> %978, i1 noundef zeroext true)
          to label %980 unwind label %993

980:                                              ; preds = %977
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  br label %998

981:                                              ; preds = %944, %937, %932
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %21, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %22, align 4
  br label %1000

985:                                              ; preds = %950
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %21, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1000

989:                                              ; preds = %952
  %990 = landingpad { ptr, i32 }
          cleanup
  %991 = extractvalue { ptr, i32 } %990, 0
  store ptr %991, ptr %21, align 8
  %992 = extractvalue { ptr, i32 } %990, 1
  store i32 %992, ptr %22, align 4
  br label %997

993:                                              ; preds = %977, %973, %971, %968, %965, %962, %959
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %21, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  br label %997

997:                                              ; preds = %993, %989
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  br label %1000

998:                                              ; preds = %980, %948, %942
  br label %999

999:                                              ; preds = %998, %933
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #11
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #11
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #11
  ret void

1000:                                             ; preds = %997, %985, %981
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #11
  br label %1001

1001:                                             ; preds = %1000, %930, %918, %914
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #11
  br label %1002

1002:                                             ; preds = %1001, %868, %841, %790, %765, %736, %720, %685, %664, %643, %590, %467
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #11
  br label %1003

1003:                                             ; preds = %1002, %463
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #11
  br label %1004

1004:                                             ; preds = %1003, %459, %436, %303
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %38) #11
  br label %1005

1005:                                             ; preds = %1004, %241
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #11
  br label %1006

1006:                                             ; preds = %1005
  %1007 = load ptr, ptr %21, align 8
  %1008 = load i32, ptr %22, align 4
  %1009 = insertvalue { ptr, i32 } poison, ptr %1007, 0
  %1010 = insertvalue { ptr, i32 } %1009, i32 %1008, 1
  resume { ptr, i32 } %1010
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293), <2 x float>, i1 noundef zeroext) #0 align 2

declare void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.42") align 8, ptr noundef, ptr noundef) #5

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

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

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { 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 #11 = { 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 = !{i64 0, i64 4, !10, i64 4, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"float", !7, i64 0}
!12 = !{!13, !11, i64 344}
!13 = !{!"_ZTS15QPlatformerBody", !14, i64 0, !19, i64 308, !19, i64 309, !21, i64 312, !11, i64 316, !11, i64 320, !6, i64 328, !16, i64 336, !11, i64 344, !16, i64 348, !16, i64 356, !16, i64 364, !11, i64 372, !16, i64 376, !16, i64 384, !19, i64 392, !19, i64 393, !21, i64 396, !11, i64 400, !11, i64 404, !30, i64 408, !11, i64 412, !21, i64 416, !21, i64 420, !21, i64 424, !21, i64 428, !11, i64 432, !11, i64 436}
!14 = !{!"_ZTS10QRigidBody", !15, i64 0, !19, i64 293, !16, i64 296, !11, i64 304}
!15 = !{!"_ZTS5QBody", !11, i64 8, !11, i64 12, !6, i64 16, !16, i64 24, !16, i64 32, !11, i64 40, !11, i64 44, !17, i64 48, !18, i64 76, !19, i64 80, !19, i64 81, !19, i64 82, !11, i64 84, !20, i64 88, !19, i64 92, !11, i64 96, !19, i64 100, !19, i64 101, !16, i64 104, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !21, i64 132, !21, i64 136, !19, i64 140, !19, i64 141, !19, i64 142, !21, i64 144, !21, i64 148, !21, i64 152, !19, i64 156, !22, i64 160, !22, i64 192, !24, i64 224, !19, i64 256, !25, i64 264, !29, i64 288, !19, i64 292}
!16 = !{!"_ZTS7QVector", !11, i64 0, !11, i64 4}
!17 = !{!"_ZTS5QAABB", !16, i64 0, !16, i64 8, !16, i64 16, !11, i64 24}
!18 = !{!"_ZTSN5QBody5ModesE", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTSN5QBody9BodyTypesE", !7, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = !{!"_ZTSSt8functionIFvP5QBodyEE", !23, i64 0, !6, i64 24}
!23 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!24 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !23, i64 0, !6, i64 24}
!25 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSN5QBody16SimulationModelsE", !7, i64 0}
!30 = !{!"_ZTSN15QPlatformerBody9JumpModesE", !7, i64 0}
!31 = !{!15, !19, i64 292}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!19, !19, i64 0}
!35 = !{!13, !6, i64 328}
!36 = !{!13, !11, i64 320}
!37 = !{!15, !6, i64 16}
!38 = !{!39, !39, i64 0}
!39 = !{!"long", !7, i64 0}
!40 = !{!41, !6, i64 8}
!41 = !{!"_ZTSN10QCollision7ContactE", !16, i64 0, !6, i64 8, !16, i64 16, !11, i64 24, !42, i64 32, !19, i64 56}
!42 = !{!"_ZTSSt6vectorIP9QParticleSaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIP9QParticleSaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!46 = !{!13, !11, i64 316}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}
!49 = !{!13, !30, i64 408}
!50 = !{!13, !11, i64 412}
!51 = !{!13, !21, i64 428}
!52 = !{!13, !19, i64 308}
!53 = !{!54, !6, i64 24}
!54 = !{!"_ZTS9QManifold", !16, i64 0, !11, i64 8, !11, i64 12, !19, i64 16, !6, i64 24, !6, i64 32, !55, i64 40}
!55 = !{!"_ZTSSt6vectorIPN10QCollision7ContactESaIS2_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIPN10QCollision7ContactESaIS2_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIPN10QCollision7ContactESaIS2_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIPN10QCollision7ContactESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!54, !6, i64 32}
!60 = !{!13, !21, i64 312}
!61 = distinct !{!61, !48}
!62 = distinct !{!62, !48}
!63 = !{!13, !19, i64 309}
!64 = distinct !{!64, !48}
!65 = distinct !{!65, !48}
!66 = !{!13, !19, i64 393}
!67 = !{!13, !19, i64 392}
!68 = !{!13, !21, i64 420}
!69 = !{!15, !11, i64 96}
!70 = !{!13, !21, i64 396}
!71 = !{!13, !11, i64 376}
!72 = !{!13, !11, i64 380}
!73 = !{!13, !11, i64 404}
!74 = !{!13, !11, i64 372}
!75 = !{!13, !11, i64 400}
!76 = !{!77, !6, i64 0}
!77 = !{!"_ZTSN15QPlatformerBody17CollisionTestInfoE", !6, i64 0, !16, i64 8, !11, i64 16, !16, i64 20}
!78 = !{!77, !11, i64 16}


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

%"struct.QPlatformerBody::CollisionTestInfo" = type <{ ptr, %struct.QVector, float, %struct.QVector, [4 x i8] }>
%struct.QVector = type { float, float }
%"class.std::vector.2" = type { %"struct.std::_Vector_base.3" }
%"struct.std::_Vector_base.3" = 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.42" = type { %"struct.std::_Vector_base.43" }
%"struct.std::_Vector_base.43" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QCollision::Contact *, std::allocator<QCollision::Contact *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QManifold = type { %struct.QVector, float, float, i8, ptr, ptr, %"class.std::vector.42" }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZN7QVector4ZeroEv() local_unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody21GetPlatformCollisionsE7QVectorb(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), <2 x float>, i1 noundef zeroext) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293), <2 x float>, i1 noundef zeroext) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zmi7QVectorS_(<2 x float>, <2 x float>) local_unnamed_addr #0

declare void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind writable sret(%"class.std::vector.2") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #6 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody12GetRightWallEf(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), float noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zml7QVectorf(<2 x float>, float noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zpl7QVectorS_(<2 x float>, <2 x float>) local_unnamed_addr #0

declare noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float>, <2 x float>) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15QPlatformerBody11GetLeftWallEf(ptr dead_on_unwind noalias writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8, ptr noundef nonnull align 8 dereferenceable(440), float noundef) local_unnamed_addr #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local <2 x float> @_Zmlf7QVector(float noundef, <2 x float>) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15QPlatformerBody10PostUpdateEv(ptr noundef nonnull align 8 dereferenceable(440) %0) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %struct.QVector, align 8
  %3 = alloca %struct.QVector, align 8
  %4 = alloca %"class.std::vector.42", align 8
  %5 = alloca %"class.std::vector.2", align 8
  %6 = alloca %class.QManifold, align 8
  %7 = alloca %"class.std::vector.2", align 8
  %8 = alloca %class.QManifold, align 8
  %9 = alloca %struct.QVector, align 8
  %10 = alloca %struct.QVector, align 8
  %11 = alloca %struct.QVector, align 8
  %12 = alloca %struct.QVector, align 8
  %13 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %14 = alloca %struct.QVector, align 8
  %15 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %16 = alloca %struct.QVector, align 8
  %17 = alloca %"struct.QPlatformerBody::CollisionTestInfo", align 8
  %18 = alloca %struct.QVector, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #10
  %19 = getelementptr inbounds i8, ptr %0, i64 356
  %20 = load i64, ptr %19, align 4
  store i64 %20, ptr %2, align 8
  %21 = tail call <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %19)
  %22 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %2, float noundef 0xBFF921FB60000000)
  %23 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %2, float noundef 0x3FF921FB60000000)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #10
  %24 = getelementptr inbounds i8, ptr %0, i64 336
  %.sroa.0124.0.copyload = load <2 x float>, ptr %24, align 8
  %25 = getelementptr inbounds i8, ptr %0, i64 344
  %26 = load float, ptr %25, align 8, !tbaa !5
  %27 = call <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.0124.0.copyload, float noundef %26)
  store <2 x float> %27, ptr %3, align 8
  %28 = getelementptr inbounds i8, ptr %0, i64 292
  %29 = load i8, ptr %28, align 4, !tbaa !28, !range !29, !noundef !30
  %30 = trunc nuw i8 %29 to i1
  br i1 %30, label %31, label %33

31:                                               ; preds = %1
  %32 = call <2 x float> @_ZN7QVector4ZeroEv()
  store <2 x float> %32, ptr %3, align 8
  br label %33

33:                                               ; preds = %31, %1
  %34 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %35 = getelementptr inbounds i8, ptr %0, i64 328
  %36 = load ptr, ptr %35, align 8, !tbaa !31
  %.not = icmp eq ptr %36, null
  br i1 %.not, label %83, label %37

37:                                               ; preds = %33
  %38 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %36)
  %39 = load ptr, ptr %35, align 8, !tbaa !31
  %40 = call <2 x float> @_ZN5QBody19GetPreviousPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %39)
  %41 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %38, <2 x float> %40)
  %42 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %41, i1 noundef zeroext true)
  %43 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %44 = getelementptr inbounds i8, ptr %0, i64 320
  %45 = load float, ptr %44, align 8, !tbaa !32
  %46 = call <2 x float> @_Zml7QVectorf(<2 x float> %21, float noundef %45)
  %47 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %46, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  %48 = load ptr, ptr %35, align 8, !tbaa !31
  call void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.42") align 8 %4, ptr noundef nonnull %0, ptr noundef %48)
  %49 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %43, i1 noundef zeroext true)
          to label %50 unwind label %55

50:                                               ; preds = %37
  %51 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  %52 = icmp eq i64 %51, 0
  br i1 %52, label %.loopexit225.sink.split, label %.preheader210

.preheader210:                                    ; preds = %50
  %53 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  %.not203211.not = icmp eq i64 %53, 0
  br i1 %.not203211.not, label %.loopexit225.sink.split, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader210
  %54 = getelementptr inbounds i8, ptr %0, i64 316
  br label %60

55:                                               ; preds = %37
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %82

57:                                               ; preds = %74
  %58 = add nuw i64 %.0151212, 1
  %59 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  %.not203 = icmp ult i64 %58, %59
  br i1 %.not203, label %60, label %.loopexit225.sink.split, !llvm.loop !33

60:                                               ; preds = %.lr.ph, %57
  %.0151212 = phi i64 [ 0, %.lr.ph ], [ %58, %57 ]
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %.0151212) #10
  %62 = load ptr, ptr %61, align 8, !tbaa !35
  %63 = getelementptr inbounds i8, ptr %62, i64 8
  %64 = load ptr, ptr %63, align 8, !tbaa !36
  %65 = call noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %64)
  %66 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %65)
  %67 = icmp eq ptr %66, %0
  %68 = getelementptr inbounds i8, ptr %62, i64 16
  br i1 %67, label %69, label %70

69:                                               ; preds = %60
  %.sroa.097.0.copyload = load <2 x float>, ptr %68, align 8
  br label %72

70:                                               ; preds = %60
  %71 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %68)
          to label %72 unwind label %78

72:                                               ; preds = %70, %69
  %.sroa.097.0 = phi <2 x float> [ %.sroa.097.0.copyload, %69 ], [ %71, %70 ]
  %.sroa.094.0.copyload = load <2 x float>, ptr %19, align 4
  %73 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %.sroa.097.0, <2 x float> %.sroa.094.0.copyload)
          to label %74 unwind label %80

74:                                               ; preds = %72
  %75 = call noundef float @_ZSt3absf(float noundef %73)
  %76 = load float, ptr %54, align 4, !tbaa !42
  %77 = fcmp uge float %75, %76
  br i1 %77, label %57, label %.loopexit225

78:                                               ; preds = %70
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %82

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

.loopexit225.sink.split:                          ; preds = %57, %.preheader210, %50
  store ptr null, ptr %35, align 8, !tbaa !31
  br label %.loopexit225

.loopexit225:                                     ; preds = %74, %.loopexit225.sink.split
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  br label %83

82:                                               ; preds = %78, %80, %55
  %.pn.pn = phi { ptr, i32 } [ %56, %55 ], [ %81, %80 ], [ %79, %78 ]
  call void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  br label %507

83:                                               ; preds = %.loopexit225, %33
  %84 = getelementptr inbounds i8, ptr %0, i64 408
  %85 = load i32, ptr %84, align 8, !tbaa !43
  switch i32 %85, label %105 [
    i32 1, label %86
    i32 2, label %91
    i32 0, label %98
  ]

86:                                               ; preds = %83
  %87 = getelementptr inbounds i8, ptr %0, i64 412
  %88 = load float, ptr %87, align 4, !tbaa !44
  %.sroa.092.0.copyload = load <2 x float>, ptr %19, align 4
  %89 = call <2 x float> @_Zmlf7QVector(float noundef %88, <2 x float> %.sroa.092.0.copyload)
  %90 = getelementptr inbounds i8, ptr %0, i64 384
  store <2 x float> %89, ptr %90, align 8
  br label %105

91:                                               ; preds = %83
  %92 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.091.0.copyload = load <2 x float>, ptr %19, align 4
  %93 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %92, <2 x float> %.sroa.091.0.copyload)
  %94 = fcmp ogt float %93, 0.000000e+00
  br i1 %94, label %95, label %105

95:                                               ; preds = %91
  %96 = getelementptr inbounds i8, ptr %0, i64 432
  %97 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormLERKf(ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(4) %96)
  br label %105

98:                                               ; preds = %83
  %99 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.090.0.copyload = load <2 x float>, ptr %19, align 4
  %100 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %99, <2 x float> %.sroa.090.0.copyload)
  %101 = fcmp ogt float %100, 0.000000e+00
  br i1 %101, label %102, label %105

102:                                              ; preds = %98
  %103 = getelementptr inbounds i8, ptr %0, i64 436
  %104 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormLERKf(ptr noundef nonnull align 4 dereferenceable(8) %3, ptr noundef nonnull align 4 dereferenceable(4) %103)
  br label %105

105:                                              ; preds = %83, %95, %91, %98, %102, %86
  %106 = getelementptr inbounds i8, ptr %0, i64 428
  %107 = load i32, ptr %106, align 4, !tbaa !45
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %106, align 4, !tbaa !45
  %109 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %110 = getelementptr inbounds i8, ptr %0, i64 308
  store i8 0, ptr %110, align 4, !tbaa !46
  %111 = call <2 x float> @_Zml7QVectorf(<2 x float> %21, float noundef 1.000000e+00)
  %112 = call noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %111, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #10
  %113 = getelementptr inbounds i8, ptr %0, i64 16
  %114 = load ptr, ptr %113, align 8, !tbaa !47
  call void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.2") align 8 %5, ptr noundef nonnull align 8 dereferenceable(272) %114, ptr noundef nonnull %0)
  %115 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %109, i1 noundef zeroext true)
          to label %.preheader208 unwind label %122

.preheader208:                                    ; preds = %105
  %116 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  %.not221 = icmp eq i64 %116, 0
  br i1 %.not221, label %.loopexit209, label %.lr.ph216

.lr.ph216:                                        ; preds = %.preheader208
  %117 = getelementptr inbounds i8, ptr %6, i64 24
  %118 = getelementptr inbounds i8, ptr %6, i64 32
  %119 = getelementptr inbounds i8, ptr %0, i64 312
  %120 = getelementptr inbounds i8, ptr %6, i64 40
  %121 = getelementptr inbounds i8, ptr %0, i64 316
  br label %124

122:                                              ; preds = %183, %.loopexit209, %105
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %506

124:                                              ; preds = %.lr.ph216, %175
  %.0157215 = phi i64 [ 0, %.lr.ph216 ], [ %176, %175 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #10
  %125 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI9QManifoldSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %.0157215) #10
  invoke void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %6, ptr noundef nonnull align 8 dereferenceable(64) %125)
          to label %126 unwind label %133

126:                                              ; preds = %124
  %127 = load ptr, ptr %117, align 8
  %128 = icmp eq ptr %127, %0
  %129 = load ptr, ptr %118, align 8
  %130 = select i1 %128, ptr %129, ptr %127
  %131 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %130)
  %132 = icmp eq i32 %131, 1
  br i1 %132, label %175, label %135

133:                                              ; preds = %124
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %179

135:                                              ; preds = %126
  %136 = load i32, ptr %119, align 8, !tbaa !48
  %.not169 = icmp eq i32 %136, 0
  br i1 %.not169, label %141, label %137

137:                                              ; preds = %135
  %138 = call noundef i32 @_ZN5QBody12GetLayersBitEv(ptr noundef nonnull align 8 dereferenceable(293) %130)
  %139 = and i32 %138, %136
  %140 = icmp eq i32 %139, 0
  br i1 %140, label %175, label %141

141:                                              ; preds = %137, %135
  %142 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %120) #10
  %.not222 = icmp eq i64 %142, 0
  br i1 %.not222, label %.loopexit207, label %.lr.ph214

143:                                              ; preds = %.critedge
  %144 = add nuw i64 %.0158213, 1
  %145 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %120) #10
  %146 = icmp ult i64 %144, %145
  br i1 %146, label %.lr.ph214, label %.loopexit207, !llvm.loop !49

.lr.ph214:                                        ; preds = %141, %143
  %.0158213 = phi i64 [ %144, %143 ], [ 0, %141 ]
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %.0158213) #10
  %148 = load ptr, ptr %147, align 8, !tbaa !35
  %149 = getelementptr inbounds i8, ptr %148, i64 8
  %150 = load ptr, ptr %149, align 8, !tbaa !36
  %151 = call noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %150)
  %152 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %151)
  %153 = icmp eq ptr %152, %0
  %154 = getelementptr inbounds i8, ptr %148, i64 16
  br i1 %153, label %155, label %156

155:                                              ; preds = %.lr.ph214
  %.sroa.072.0.copyload = load <2 x float>, ptr %154, align 8
  br label %158

156:                                              ; preds = %.lr.ph214
  %157 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %154)
          to label %158 unwind label %167

158:                                              ; preds = %156, %155
  %.sroa.072.0 = phi <2 x float> [ %.sroa.072.0.copyload, %155 ], [ %157, %156 ]
  %.sroa.069.0.copyload = load <2 x float>, ptr %19, align 4
  %159 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %.sroa.072.0, <2 x float> %.sroa.069.0.copyload)
          to label %.critedge unwind label %169

.critedge:                                        ; preds = %158
  %160 = call noundef float @_ZSt3absf(float noundef %159)
  %161 = load float, ptr %121, align 4, !tbaa !42
  %162 = fcmp uge float %160, %161
  br i1 %162, label %143, label %163

163:                                              ; preds = %.critedge
  store i8 1, ptr %110, align 4, !tbaa !46
  %164 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %130)
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %166, label %.loopexit207

166:                                              ; preds = %163
  store ptr %130, ptr %35, align 8, !tbaa !31
  br label %.loopexit207

167:                                              ; preds = %156
  %168 = landingpad { ptr, i32 }
          cleanup
  br label %171

169:                                              ; preds = %158
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %171

171:                                              ; preds = %169, %167
  %.pn170 = phi { ptr, i32 } [ %170, %169 ], [ %168, %167 ]
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #10
  br label %179

.loopexit207:                                     ; preds = %143, %141, %166, %163
  %172 = load i8, ptr %110, align 4, !tbaa !46, !range !29, !noundef !30
  %173 = trunc nuw i8 %172 to i1
  br i1 %173, label %174, label %175

174:                                              ; preds = %.loopexit207
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #10
  br label %.loopexit209

175:                                              ; preds = %126, %137, %.loopexit207
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %6) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #10
  %176 = add nuw i64 %.0157215, 1
  %177 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  %178 = icmp ult i64 %176, %177
  br i1 %178, label %124, label %.loopexit209, !llvm.loop !50

179:                                              ; preds = %171, %133
  %.pn170.pn = phi { ptr, i32 } [ %.pn170, %171 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #10
  br label %506

.loopexit209:                                     ; preds = %175, %.preheader208, %174
  %180 = getelementptr inbounds i8, ptr %0, i64 309
  store i8 0, ptr %180, align 1, !tbaa !51
  %181 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %.sroa.064.0.copyload = load <2 x float>, ptr %2, align 8
  %182 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.064.0.copyload, float noundef 1.000000e+00)
          to label %183 unwind label %122

183:                                              ; preds = %.loopexit209
  %184 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %182, i1 noundef zeroext true)
          to label %185 unwind label %122

185:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #10
  %186 = load ptr, ptr %113, align 8, !tbaa !47
  invoke void @_ZN6QWorld22TestCollisionWithWorldEP5QBody(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.2") align 8 %7, ptr noundef nonnull align 8 dereferenceable(272) %186, ptr noundef nonnull %0)
          to label %187 unwind label %195

187:                                              ; preds = %185
  %188 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %181, i1 noundef zeroext true)
          to label %.preheader unwind label %197

.preheader:                                       ; preds = %187
  %189 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #10
  %.not223 = icmp eq i64 %189, 0
  br i1 %.not223, label %.loopexit206, label %.lr.ph220

.lr.ph220:                                        ; preds = %.preheader
  %190 = getelementptr inbounds i8, ptr %8, i64 24
  %191 = getelementptr inbounds i8, ptr %8, i64 32
  %192 = getelementptr inbounds i8, ptr %0, i64 312
  %193 = getelementptr inbounds i8, ptr %8, i64 40
  %194 = getelementptr inbounds i8, ptr %0, i64 316
  br label %199

195:                                              ; preds = %185
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %505

197:                                              ; preds = %314, %187
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %504

199:                                              ; preds = %.lr.ph220, %250
  %.0159219 = phi i64 [ 0, %.lr.ph220 ], [ %251, %250 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #10
  %200 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNSt6vectorI9QManifoldSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %.0159219) #10
  invoke void @_ZN9QManifoldC2ERKS_(ptr noundef nonnull align 8 dereferenceable(64) %8, ptr noundef nonnull align 8 dereferenceable(64) %200)
          to label %201 unwind label %208

201:                                              ; preds = %199
  %202 = load ptr, ptr %190, align 8
  %203 = icmp eq ptr %202, %0
  %204 = load ptr, ptr %191, align 8
  %205 = select i1 %203, ptr %204, ptr %202
  %206 = call noundef i32 @_ZN5QBody11GetBodyTypeEv(ptr noundef nonnull align 8 dereferenceable(293) %205)
  %207 = icmp eq i32 %206, 1
  br i1 %207, label %250, label %210

208:                                              ; preds = %199
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %254

210:                                              ; preds = %201
  %211 = load i32, ptr %192, align 8, !tbaa !48
  %.not173 = icmp eq i32 %211, 0
  br i1 %.not173, label %216, label %212

212:                                              ; preds = %210
  %213 = call noundef i32 @_ZN5QBody12GetLayersBitEv(ptr noundef nonnull align 8 dereferenceable(293) %205)
  %214 = and i32 %213, %211
  %215 = icmp eq i32 %214, 0
  br i1 %215, label %250, label %216

216:                                              ; preds = %212, %210
  %217 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %193) #10
  %.not224 = icmp eq i64 %217, 0
  br i1 %.not224, label %.loopexit, label %.lr.ph218

218:                                              ; preds = %.critedge196
  %219 = add nuw i64 %.0160217, 1
  %220 = call noundef i64 @_ZNKSt6vectorIPN10QCollision7ContactESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %193) #10
  %221 = icmp ult i64 %219, %220
  br i1 %221, label %.lr.ph218, label %.loopexit, !llvm.loop !52

.lr.ph218:                                        ; preds = %216, %218
  %.0160217 = phi i64 [ %219, %218 ], [ 0, %216 ]
  %222 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %193, i64 noundef %.0160217) #10
  %223 = load ptr, ptr %222, align 8, !tbaa !35
  %224 = getelementptr inbounds i8, ptr %223, i64 8
  %225 = load ptr, ptr %224, align 8, !tbaa !36
  %226 = call noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %225)
  %227 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %226)
  %228 = icmp eq ptr %227, %0
  %229 = getelementptr inbounds i8, ptr %223, i64 16
  br i1 %228, label %230, label %231

230:                                              ; preds = %.lr.ph218
  %.sroa.052.0.copyload = load <2 x float>, ptr %229, align 8
  br label %233

231:                                              ; preds = %.lr.ph218
  %232 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %229)
          to label %233 unwind label %242

233:                                              ; preds = %231, %230
  %.sroa.052.0 = phi <2 x float> [ %.sroa.052.0.copyload, %230 ], [ %232, %231 ]
  %.sroa.049.0.copyload = load <2 x float>, ptr %19, align 4
  %234 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %.sroa.052.0, <2 x float> %.sroa.049.0.copyload)
          to label %.critedge196 unwind label %244

.critedge196:                                     ; preds = %233
  %235 = call noundef float @_ZSt3absf(float noundef %234)
  %236 = fpext float %235 to double
  %237 = load float, ptr %194, align 4, !tbaa !42
  %238 = fpext float %237 to double
  %239 = fsub double 0x400921FB54442D18, %238
  %240 = fcmp uge double %239, %236
  br i1 %240, label %218, label %241

241:                                              ; preds = %.critedge196
  store i8 1, ptr %180, align 1, !tbaa !51
  br label %.loopexit

242:                                              ; preds = %231
  %243 = landingpad { ptr, i32 }
          cleanup
  br label %246

244:                                              ; preds = %233
  %245 = landingpad { ptr, i32 }
          cleanup
  br label %246

246:                                              ; preds = %244, %242
  %.pn174 = phi { ptr, i32 } [ %245, %244 ], [ %243, %242 ]
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #10
  br label %254

.loopexit:                                        ; preds = %218, %216, %241
  %247 = load i8, ptr %180, align 1, !tbaa !51, !range !29, !noundef !30
  %248 = trunc nuw i8 %247 to i1
  br i1 %248, label %249, label %250

249:                                              ; preds = %.loopexit
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #10
  br label %.loopexit206

250:                                              ; preds = %201, %212, %.loopexit
  call void @_ZN9QManifoldD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %8) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #10
  %251 = add nuw i64 %.0159219, 1
  %252 = call noundef i64 @_ZNKSt6vectorI9QManifoldSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #10
  %253 = icmp ult i64 %251, %252
  br i1 %253, label %199, label %.loopexit206, !llvm.loop !53

254:                                              ; preds = %246, %208
  %.pn174.pn = phi { ptr, i32 } [ %.pn174, %246 ], [ %209, %208 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #10
  br label %504

.loopexit206:                                     ; preds = %250, %.preheader, %249
  %255 = load i8, ptr %110, align 4, !tbaa !46, !range !29, !noundef !30
  %256 = trunc nuw i8 %255 to i1
  br i1 %256, label %257, label %261

257:                                              ; preds = %.loopexit206
  %258 = getelementptr inbounds i8, ptr %0, i64 393
  store i8 0, ptr %258, align 1, !tbaa !54
  %259 = getelementptr inbounds i8, ptr %0, i64 392
  store i8 0, ptr %259, align 8, !tbaa !55
  %260 = getelementptr inbounds i8, ptr %0, i64 420
  store i32 0, ptr %260, align 4, !tbaa !56
  br label %274

261:                                              ; preds = %.loopexit206
  %262 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.048.0.copyload = load <2 x float>, ptr %19, align 4
  %263 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %262, <2 x float> %.sroa.048.0.copyload)
  %264 = fcmp olt float %263, 0.000000e+00
  br i1 %264, label %265, label %268

265:                                              ; preds = %261
  %266 = getelementptr inbounds i8, ptr %0, i64 392
  store i8 1, ptr %266, align 8, !tbaa !55
  %267 = getelementptr inbounds i8, ptr %0, i64 393
  store i8 0, ptr %267, align 1, !tbaa !54
  br label %274

268:                                              ; preds = %261
  %.sroa.047.0.copyload = load <2 x float>, ptr %19, align 4
  %269 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %262, <2 x float> %.sroa.047.0.copyload)
  %270 = fcmp ogt float %269, 0.000000e+00
  br i1 %270, label %271, label %274

271:                                              ; preds = %268
  %272 = getelementptr inbounds i8, ptr %0, i64 392
  store i8 0, ptr %272, align 8, !tbaa !55
  %273 = getelementptr inbounds i8, ptr %0, i64 393
  store i8 1, ptr %273, align 1, !tbaa !54
  br label %274

274:                                              ; preds = %265, %271, %268, %257
  %275 = getelementptr inbounds i8, ptr %0, i64 96
  %276 = load float, ptr %275, align 8, !tbaa !57
  %277 = fcmp ogt float %276, 0.000000e+00
  br i1 %277, label %278, label %290

278:                                              ; preds = %274
  %279 = getelementptr inbounds i8, ptr %0, i64 384
  %280 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %279)
  %281 = load float, ptr %275, align 8, !tbaa !57
  %282 = fcmp ogt float %280, %281
  br i1 %282, label %283, label %290

283:                                              ; preds = %278
  %284 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %279)
          to label %285 unwind label %288

285:                                              ; preds = %283
  %286 = invoke <2 x float> @_Zmlf7QVector(float noundef %281, <2 x float> %284)
          to label %287 unwind label %288

287:                                              ; preds = %285
  store <2 x float> %286, ptr %279, align 8
  br label %290

288:                                              ; preds = %285, %283
  %289 = landingpad { ptr, i32 }
          cleanup
  br label %504

290:                                              ; preds = %287, %278, %274
  %291 = load i8, ptr %110, align 4, !tbaa !46, !range !29, !noundef !30
  %292 = trunc nuw i8 %291 to i1
  br i1 %292, label %293, label %302

293:                                              ; preds = %290
  %294 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.044.0.copyload = load <2 x float>, ptr %19, align 4
  %295 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %294, <2 x float> %.sroa.044.0.copyload)
  %296 = fcmp olt float %295, 0.000000e+00
  br i1 %296, label %297, label %302

297:                                              ; preds = %293
  %298 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %299 unwind label %300

299:                                              ; preds = %297
  store <2 x float> %298, ptr %294, align 8
  br label %319

300:                                              ; preds = %297
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %504

302:                                              ; preds = %293, %290
  %303 = load i8, ptr %180, align 1, !tbaa !51, !range !29, !noundef !30
  %304 = trunc nuw i8 %303 to i1
  br i1 %304, label %305, label %314

305:                                              ; preds = %302
  %306 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.042.0.copyload = load <2 x float>, ptr %19, align 4
  %307 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %306, <2 x float> %.sroa.042.0.copyload)
  %308 = fcmp ogt float %307, 0.000000e+00
  br i1 %308, label %309, label %314

309:                                              ; preds = %305
  %310 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %311 unwind label %312

311:                                              ; preds = %309
  store <2 x float> %310, ptr %306, align 8
  br label %319

312:                                              ; preds = %309
  %313 = landingpad { ptr, i32 }
          cleanup
  br label %504

314:                                              ; preds = %305, %302
  %315 = getelementptr inbounds i8, ptr %0, i64 384
  %.sroa.040.0.copyload = load <2 x float>, ptr %315, align 8
  %316 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %.sroa.040.0.copyload, i1 noundef zeroext true)
          to label %317 unwind label %197

317:                                              ; preds = %314
  %318 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %315, ptr noundef nonnull align 4 dereferenceable(8) %3)
  br label %319

319:                                              ; preds = %311, %317, %299
  %320 = getelementptr inbounds i8, ptr %0, i64 396
  %321 = load i32, ptr %320, align 4, !tbaa !58
  %322 = icmp eq i32 %321, 0
  br i1 %322, label %323, label %348

323:                                              ; preds = %319
  %324 = getelementptr inbounds i8, ptr %0, i64 376
  %325 = load float, ptr %324, align 8, !tbaa !59
  %326 = call noundef float @_ZSt3absf(float noundef %325)
  %327 = fcmp olt float %326, 0x3F50624DE0000000
  br i1 %327, label %328, label %338

328:                                              ; preds = %323
  %329 = getelementptr inbounds i8, ptr %0, i64 380
  %330 = load float, ptr %329, align 4, !tbaa !60
  %331 = call noundef float @_ZSt3absf(float noundef %330)
  %332 = fcmp olt float %331, 0x3F50624DE0000000
  br i1 %332, label %333, label %338

333:                                              ; preds = %328
  %334 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %335 unwind label %336

335:                                              ; preds = %333
  store <2 x float> %334, ptr %324, align 8
  br label %366

336:                                              ; preds = %333
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %504

338:                                              ; preds = %328, %323
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %339 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %324)
          to label %340 unwind label %346

340:                                              ; preds = %338
  %341 = getelementptr inbounds i8, ptr %0, i64 404
  %342 = load float, ptr %341, align 4, !tbaa !61
  %343 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %339, float noundef %342)
          to label %344 unwind label %346

344:                                              ; preds = %340
  store <2 x float> %343, ptr %9, align 8
  %345 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %324, ptr noundef nonnull align 4 dereferenceable(8) %9)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %366

346:                                              ; preds = %340, %338
  %347 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %504

348:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %349 = getelementptr inbounds i8, ptr %0, i64 372
  %350 = load float, ptr %349, align 4, !tbaa !62
  %351 = sitofp i32 %321 to float
  %352 = fmul float %350, %351
  %353 = getelementptr inbounds i8, ptr %0, i64 364
  %.sroa.035.0.copyload = load <2 x float>, ptr %353, align 4
  %354 = invoke <2 x float> @_Zmlf7QVector(float noundef %352, <2 x float> %.sroa.035.0.copyload)
          to label %355 unwind label %364

355:                                              ; preds = %348
  %356 = getelementptr inbounds i8, ptr %0, i64 376
  %.sroa.034.0.copyload = load <2 x float>, ptr %356, align 8
  %357 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %354, <2 x float> %.sroa.034.0.copyload)
          to label %358 unwind label %364

358:                                              ; preds = %355
  %359 = getelementptr inbounds i8, ptr %0, i64 400
  %360 = load float, ptr %359, align 8, !tbaa !63
  %361 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %357, float noundef %360)
          to label %362 unwind label %364

362:                                              ; preds = %358
  store <2 x float> %361, ptr %10, align 8
  %363 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %356, ptr noundef nonnull align 4 dereferenceable(8) %10)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  br label %366

364:                                              ; preds = %358, %355, %348
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  br label %504

366:                                              ; preds = %335, %344, %362
  %367 = load float, ptr %275, align 8, !tbaa !57
  %368 = fcmp ogt float %367, 0.000000e+00
  br i1 %368, label %369, label %381

369:                                              ; preds = %366
  %370 = getelementptr inbounds i8, ptr %0, i64 376
  %371 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %370)
  %372 = load float, ptr %275, align 8, !tbaa !57
  %373 = fcmp ogt float %371, %372
  br i1 %373, label %374, label %381

374:                                              ; preds = %369
  %375 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %370)
          to label %376 unwind label %379

376:                                              ; preds = %374
  %377 = invoke <2 x float> @_Zmlf7QVector(float noundef %372, <2 x float> %375)
          to label %378 unwind label %379

378:                                              ; preds = %376
  store <2 x float> %377, ptr %370, align 8
  br label %381

379:                                              ; preds = %376, %374
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %504

381:                                              ; preds = %378, %369, %366
  %382 = getelementptr inbounds i8, ptr %0, i64 376
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  %383 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %384 unwind label %411

384:                                              ; preds = %381
  store <2 x float> %383, ptr %11, align 8
  %385 = call noundef zeroext i1 @_ZNK7QVectorneERKS_(ptr noundef nonnull align 4 dereferenceable(8) %382, ptr noundef nonnull align 4 dereferenceable(8) %11)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br i1 %385, label %386, label %425

386:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %387 = load i64, ptr %382, align 8
  store i64 %387, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #10
  %388 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %389 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %21, float noundef 5.000000e+00)
          to label %390 unwind label %413

390:                                              ; preds = %386
  %391 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %388, <2 x float> %389)
          to label %392 unwind label %413

392:                                              ; preds = %390
  invoke void @_ZN15QPlatformerBody21GetPlatformCollisionsE7QVectorb(ptr dead_on_unwind nonnull writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %13, ptr noundef nonnull align 8 dereferenceable(440) %0, <2 x float> %391, i1 noundef zeroext true)
          to label %393 unwind label %413

393:                                              ; preds = %392
  %394 = load ptr, ptr %13, align 8, !tbaa !64
  %.not177 = icmp eq ptr %394, null
  br i1 %.not177, label %421, label %395

395:                                              ; preds = %393
  %396 = getelementptr inbounds i8, ptr %13, i64 20
  %.sroa.027.0.copyload = load <2 x float>, ptr %396, align 4
  %.sroa.026.0.copyload = load <2 x float>, ptr %19, align 4
  %397 = invoke noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %.sroa.027.0.copyload, <2 x float> %.sroa.026.0.copyload)
          to label %398 unwind label %415

398:                                              ; preds = %395
  %399 = call noundef float @_ZSt3absf(float noundef %397)
  %400 = getelementptr inbounds i8, ptr %0, i64 316
  %401 = load float, ptr %400, align 4, !tbaa !42
  %402 = fcmp ugt float %399, %401
  br i1 %402, label %421, label %403

403:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %404 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %396)
          to label %405 unwind label %417

405:                                              ; preds = %403
  store <2 x float> %404, ptr %14, align 8
  %406 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %14)
          to label %407 unwind label %417

407:                                              ; preds = %405
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  %408 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %12, <2 x float> %406)
  %409 = invoke <2 x float> @_Zmlf7QVector(float noundef %408, <2 x float> %406)
          to label %410 unwind label %419

410:                                              ; preds = %407
  store <2 x float> %409, ptr %12, align 8
  br label %421

411:                                              ; preds = %381
  %412 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %504

413:                                              ; preds = %421, %392, %390, %386
  %414 = landingpad { ptr, i32 }
          cleanup
  br label %424

415:                                              ; preds = %395
  %416 = landingpad { ptr, i32 }
          cleanup
  br label %424

417:                                              ; preds = %405, %403
  %418 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %424

419:                                              ; preds = %407
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %424

421:                                              ; preds = %398, %410, %393
  %.sroa.020.0.copyload = load <2 x float>, ptr %12, align 8
  %422 = invoke noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %.sroa.020.0.copyload, i1 noundef zeroext true)
          to label %423 unwind label %413

423:                                              ; preds = %421
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %425

424:                                              ; preds = %415, %419, %417, %413
  %.pn181 = phi { ptr, i32 } [ %414, %413 ], [ %416, %415 ], [ %420, %419 ], [ %418, %417 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %504

425:                                              ; preds = %423, %384
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #10
  invoke void @_ZN15QPlatformerBody12GetRightWallEf(ptr dead_on_unwind nonnull writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %15, ptr noundef nonnull align 8 dereferenceable(440) %0, float noundef 0.000000e+00)
          to label %426 unwind label %452

426:                                              ; preds = %425
  %427 = load ptr, ptr %15, align 8, !tbaa !64
  %.not183 = icmp eq ptr %427, null
  br i1 %.not183, label %461, label %428

428:                                              ; preds = %426
  %429 = getelementptr inbounds i8, ptr %0, i64 364
  %.sroa.019.0.copyload = load <2 x float>, ptr %429, align 4
  %430 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %382, <2 x float> %.sroa.019.0.copyload)
  %431 = fcmp ogt float %430, 0.000000e+00
  br i1 %431, label %432, label %461

432:                                              ; preds = %428
  %433 = load ptr, ptr %15, align 8, !tbaa !64
  %434 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %433)
  %435 = icmp eq i32 %434, 1
  br i1 %435, label %436, label %461

436:                                              ; preds = %432
  %437 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %438 unwind label %454

438:                                              ; preds = %436
  store <2 x float> %437, ptr %382, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #10
  %439 = getelementptr inbounds i8, ptr %15, i64 20
  %.sroa.017.0.copyload = load <2 x float>, ptr %439, align 4
  %440 = getelementptr inbounds i8, ptr %15, i64 16
  %441 = load float, ptr %440, align 8, !tbaa !66
  %442 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.017.0.copyload, float noundef %441)
          to label %443 unwind label %456

443:                                              ; preds = %438
  store <2 x float> %442, ptr %16, align 8
  %.sroa.015.0.copyload = load <2 x float>, ptr %429, align 4
  %444 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %16, <2 x float> %.sroa.015.0.copyload)
  %.sroa.014.0.copyload = load <2 x float>, ptr %429, align 4
  %445 = invoke <2 x float> @_Zmlf7QVector(float noundef %444, <2 x float> %.sroa.014.0.copyload)
          to label %446 unwind label %458

446:                                              ; preds = %443
  %447 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %448 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %447, <2 x float> %445)
          to label %449 unwind label %458

449:                                              ; preds = %446
  %450 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %448, i1 noundef zeroext true)
          to label %451 unwind label %458

451:                                              ; preds = %449
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  br label %461

452:                                              ; preds = %425
  %453 = landingpad { ptr, i32 }
          cleanup
  br label %503

454:                                              ; preds = %436
  %455 = landingpad { ptr, i32 }
          cleanup
  br label %503

456:                                              ; preds = %438
  %457 = landingpad { ptr, i32 }
          cleanup
  br label %460

458:                                              ; preds = %449, %446, %443
  %459 = landingpad { ptr, i32 }
          cleanup
  br label %460

460:                                              ; preds = %458, %456
  %.pn184 = phi { ptr, i32 } [ %459, %458 ], [ %457, %456 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  br label %503

461:                                              ; preds = %428, %432, %451, %426
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #10
  invoke void @_ZN15QPlatformerBody11GetLeftWallEf(ptr dead_on_unwind nonnull writable sret(%"struct.QPlatformerBody::CollisionTestInfo") align 8 %17, ptr noundef nonnull align 8 dereferenceable(440) %0, float noundef 0.000000e+00)
          to label %462 unwind label %492

462:                                              ; preds = %461
  %463 = load ptr, ptr %17, align 8, !tbaa !64
  %.not186 = icmp eq ptr %463, null
  br i1 %.not186, label %501, label %464

464:                                              ; preds = %462
  %465 = getelementptr inbounds i8, ptr %0, i64 364
  %.sroa.010.0.copyload = load <2 x float>, ptr %465, align 4
  %466 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %382, <2 x float> %.sroa.010.0.copyload)
  %467 = fcmp olt float %466, 0.000000e+00
  br i1 %467, label %468, label %501

468:                                              ; preds = %464
  %469 = load ptr, ptr %17, align 8, !tbaa !64
  %470 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %469)
  %471 = icmp eq i32 %470, 1
  br i1 %471, label %472, label %501

472:                                              ; preds = %468
  %473 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %474 unwind label %494

474:                                              ; preds = %472
  store <2 x float> %473, ptr %382, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %475 = getelementptr inbounds i8, ptr %17, i64 20
  %.sroa.08.0.copyload = load <2 x float>, ptr %475, align 4
  %476 = getelementptr inbounds i8, ptr %17, i64 16
  %477 = load float, ptr %476, align 8, !tbaa !66
  %478 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.08.0.copyload, float noundef %477)
          to label %479 unwind label %496

479:                                              ; preds = %474
  store <2 x float> %478, ptr %18, align 8
  %480 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %465)
          to label %481 unwind label %498

481:                                              ; preds = %479
  %482 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %18, <2 x float> %480)
  %483 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %465)
          to label %484 unwind label %498

484:                                              ; preds = %481
  %485 = invoke <2 x float> @_Zmlf7QVector(float noundef %482, <2 x float> %483)
          to label %486 unwind label %498

486:                                              ; preds = %484
  %487 = call <2 x float> @_ZN5QBody11GetPositionEv(ptr noundef nonnull align 8 dereferenceable(293) %0)
  %488 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %487, <2 x float> %485)
          to label %489 unwind label %498

489:                                              ; preds = %486
  %490 = invoke noundef ptr @_ZN5QBody11SetPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293) %0, <2 x float> %488, i1 noundef zeroext true)
          to label %491 unwind label %498

491:                                              ; preds = %489
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br label %501

492:                                              ; preds = %461
  %493 = landingpad { ptr, i32 }
          cleanup
  br label %502

494:                                              ; preds = %472
  %495 = landingpad { ptr, i32 }
          cleanup
  br label %502

496:                                              ; preds = %474
  %497 = landingpad { ptr, i32 }
          cleanup
  br label %500

498:                                              ; preds = %489, %486, %484, %481, %479
  %499 = landingpad { ptr, i32 }
          cleanup
  br label %500

500:                                              ; preds = %498, %496
  %.pn187 = phi { ptr, i32 } [ %499, %498 ], [ %497, %496 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br label %502

501:                                              ; preds = %464, %468, %491, %462
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret void

502:                                              ; preds = %500, %494, %492
  %.pn187.pn = phi { ptr, i32 } [ %.pn187, %500 ], [ %495, %494 ], [ %493, %492 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  br label %503

503:                                              ; preds = %502, %460, %454, %452
  %.pn187.pn.pn = phi { ptr, i32 } [ %.pn187.pn, %502 ], [ %.pn184, %460 ], [ %455, %454 ], [ %453, %452 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  br label %504

504:                                              ; preds = %503, %424, %411, %379, %364, %346, %336, %312, %300, %288, %254, %197
  %.pn187.pn.pn.pn = phi { ptr, i32 } [ %.pn187.pn.pn, %503 ], [ %.pn181, %424 ], [ %412, %411 ], [ %380, %379 ], [ %337, %336 ], [ %347, %346 ], [ %365, %364 ], [ %301, %300 ], [ %313, %312 ], [ %198, %197 ], [ %289, %288 ], [ %.pn174.pn, %254 ]
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #10
  br label %505

505:                                              ; preds = %504, %195
  %.pn187.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn187.pn.pn.pn, %504 ], [ %196, %195 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  br label %506

506:                                              ; preds = %505, %179, %122
  %.pn187.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn187.pn.pn.pn.pn, %505 ], [ %123, %122 ], [ %.pn170.pn, %179 ]
  call void @_ZNSt6vectorI9QManifoldSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  br label %507

507:                                              ; preds = %506, %82
  %.pn187.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn187.pn.pn.pn.pn.pn, %506 ], [ %.pn.pn, %82 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn187.pn.pn.pn.pn.pn.pn
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5QBody11AddPositionE7QVectorb(ptr noundef nonnull align 8 dereferenceable(293), <2 x float>, i1 noundef zeroext) local_unnamed_addr #0 align 2

declare void @_ZN6QWorld13GetCollisionsEP5QBodyS1_(ptr dead_on_unwind writable sret(%"class.std::vector.42") align 8, ptr noundef, ptr noundef) local_unnamed_addr #4

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

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

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { 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, !9, i64 344}
!6 = !{!"_ZTS15QPlatformerBody", !7, i64 0, !16, i64 308, !16, i64 309, !18, i64 312, !9, i64 316, !9, i64 320, !12, i64 328, !13, i64 336, !9, i64 344, !13, i64 348, !13, i64 356, !13, i64 364, !9, i64 372, !13, i64 376, !13, i64 384, !16, i64 392, !16, i64 393, !18, i64 396, !9, i64 400, !9, i64 404, !27, i64 408, !9, i64 412, !18, i64 416, !18, i64 420, !18, i64 424, !18, i64 428, !9, i64 432, !9, i64 436}
!7 = !{!"_ZTS10QRigidBody", !8, i64 0, !16, i64 293, !13, i64 296, !9, i64 304}
!8 = !{!"_ZTS5QBody", !9, i64 8, !9, i64 12, !12, i64 16, !13, i64 24, !13, i64 32, !9, i64 40, !9, i64 44, !14, i64 48, !15, i64 76, !16, i64 80, !16, i64 81, !16, i64 82, !9, i64 84, !17, i64 88, !16, i64 92, !9, i64 96, !16, i64 100, !16, i64 101, !13, i64 104, !9, i64 112, !9, i64 116, !9, i64 120, !9, i64 124, !9, i64 128, !18, i64 132, !18, i64 136, !16, i64 140, !16, i64 141, !16, i64 142, !18, i64 144, !18, i64 148, !18, i64 152, !16, i64 156, !19, i64 160, !19, i64 192, !21, i64 224, !16, i64 256, !22, i64 264, !26, i64 288, !16, i64 292}
!9 = !{!"float", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"any pointer", !10, i64 0}
!13 = !{!"_ZTS7QVector", !9, i64 0, !9, i64 4}
!14 = !{!"_ZTS5QAABB", !13, i64 0, !13, i64 8, !13, i64 16, !9, i64 24}
!15 = !{!"_ZTSN5QBody5ModesE", !10, i64 0}
!16 = !{!"bool", !10, i64 0}
!17 = !{!"_ZTSN5QBody9BodyTypesE", !10, i64 0}
!18 = !{!"int", !10, i64 0}
!19 = !{!"_ZTSSt8functionIFvP5QBodyEE", !20, i64 0, !12, i64 24}
!20 = !{!"_ZTSSt14_Function_base", !10, i64 0, !12, i64 16}
!21 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !20, i64 0, !12, i64 24}
!22 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!26 = !{!"_ZTSN5QBody16SimulationModelsE", !10, i64 0}
!27 = !{!"_ZTSN15QPlatformerBody9JumpModesE", !10, i64 0}
!28 = !{!8, !16, i64 292}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!6, !12, i64 328}
!32 = !{!6, !9, i64 320}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!12, !12, i64 0}
!36 = !{!37, !12, i64 8}
!37 = !{!"_ZTSN10QCollision7ContactE", !13, i64 0, !12, i64 8, !13, i64 16, !9, i64 24, !38, i64 32, !16, i64 56}
!38 = !{!"_ZTSSt6vectorIP9QParticleSaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIP9QParticleSaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!42 = !{!6, !9, i64 316}
!43 = !{!6, !27, i64 408}
!44 = !{!6, !9, i64 412}
!45 = !{!6, !18, i64 428}
!46 = !{!6, !16, i64 308}
!47 = !{!8, !12, i64 16}
!48 = !{!6, !18, i64 312}
!49 = distinct !{!49, !34}
!50 = distinct !{!50, !34}
!51 = !{!6, !16, i64 309}
!52 = distinct !{!52, !34}
!53 = distinct !{!53, !34}
!54 = !{!6, !16, i64 393}
!55 = !{!6, !16, i64 392}
!56 = !{!6, !18, i64 420}
!57 = !{!8, !9, i64 96}
!58 = !{!6, !18, i64 396}
!59 = !{!6, !9, i64 376}
!60 = !{!6, !9, i64 380}
!61 = !{!6, !9, i64 404}
!62 = !{!6, !9, i64 372}
!63 = !{!6, !9, i64 400}
!64 = !{!65, !12, i64 0}
!65 = !{!"_ZTSN15QPlatformerBody17CollisionTestInfoE", !12, i64 0, !13, i64 8, !9, i64 16, !13, i64 20}
!66 = !{!65, !9, i64 16}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass