; LLVM IR from erayzesen/QuarkPhysics :: QuarkPhysics/qmesh.ll (ZN5QMesh30ApplyAngleConstraintsToPolygonEv)

; 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.QVector = type { float, float }
%"struct.std::pair" = type { %struct.QVector, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.QMesh = type { %"class.std::vector", %struct.QVector, %struct.QVector, float, float, %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector", %"class.std::vector.10", %"class.std::vector.15", float, ptr, i32, %"class.std::vector.20", i8, i8, %"class.std::vector.25", float, i8, i8, i8, i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5QMesh30ApplyAngleConstraintsToPolygonEv(ptr noundef nonnull align 8 dereferenceable(256) %0) #6 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i8, align 1
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %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 ptr, align 8
  %18 = alloca %struct.QVector, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"struct.std::pair", align 4
  %22 = alloca %"class.std::vector", align 8
  %23 = alloca { <2 x float>, float }, align 8
  %24 = alloca %"class.std::vector.15", align 8
  %25 = alloca %"class.std::vector", align 8
  %26 = alloca %struct.QVector, align 4
  %27 = alloca i32, align 4
  %28 = alloca %struct.QVector, 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 i8, align 1
  %34 = alloca i64, align 8
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %struct.QVector, align 4
  %45 = alloca %struct.QVector, align 4
  %46 = alloca %struct.QVector, align 4
  %47 = alloca %struct.QVector, align 4
  %48 = alloca %struct.QVector, align 4
  %49 = alloca %struct.QVector, align 4
  %50 = alloca float, align 4
  %51 = alloca %struct.QVector, align 4
  %52 = alloca float, align 4
  %53 = alloca %struct.QVector, align 4
  %54 = alloca float, align 4
  %55 = alloca %struct.QVector, align 4
  %56 = alloca %struct.QVector, align 4
  %57 = alloca float, align 4
  %58 = alloca %struct.QVector, align 4
  %59 = alloca %struct.QVector, align 4
  %60 = alloca float, 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 float, align 4
  %69 = alloca float, 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
  store ptr %0, ptr %2, align 8, !tbaa !5
  %76 = load ptr, ptr %2, align 8
  %77 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 17
  %78 = load float, ptr %77, align 8, !tbaa !9
  %79 = fcmp oeq float %78, 0.000000e+00
  br i1 %79, label %80, label %81

80:                                               ; preds = %1
  br label %502

81:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #13
  store i8 0, ptr %3, align 1, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #13
  store i32 0, ptr %4, align 4, !tbaa !44
  br label %82

82:                                               ; preds = %195, %81
  %83 = load i32, ptr %4, align 4, !tbaa !44
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %86 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #13
  %87 = icmp ult i64 %84, %86
  br i1 %87, label %89, label %88

88:                                               ; preds = %82
  store i32 2, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #13
  br label %198

89:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #13
  %90 = load i32, ptr %4, align 4, !tbaa !44
  %91 = add nsw i32 %90, 1
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %94 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %93) #13
  %95 = urem i64 %92, %94
  %96 = trunc i64 %95 to i32
  store i32 %96, ptr %6, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #13
  %97 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %98 = load i32, ptr %4, align 4, !tbaa !44
  %99 = sext i32 %98 to i64
  %100 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %97, i64 noundef %99) #13
  %101 = load ptr, ptr %100, align 8, !tbaa !5
  store ptr %101, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #13
  %102 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %103 = load i32, ptr %4, align 4, !tbaa !44
  %104 = add nsw i32 %103, 1
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %107 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %106) #13
  %108 = urem i64 %105, %107
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %102, i64 noundef %108) #13
  %110 = load ptr, ptr %109, align 8, !tbaa !5
  store ptr %110, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #13
  %111 = load i32, ptr %4, align 4, !tbaa !44
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %9, align 4, !tbaa !44
  br label %113

113:                                              ; preds = %190, %89
  %114 = load i32, ptr %9, align 4, !tbaa !44
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %117 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %116) #13
  %118 = icmp ult i64 %115, %117
  br i1 %118, label %120, label %119

119:                                              ; preds = %113
  store i32 5, ptr %5, align 4
  br label %193

120:                                              ; preds = %113
  %121 = load i32, ptr %9, align 4, !tbaa !44
  %122 = load i32, ptr %4, align 4, !tbaa !44
  %123 = icmp eq i32 %121, %122
  br i1 %123, label %141, label %124

124:                                              ; preds = %120
  %125 = load i32, ptr %9, align 4, !tbaa !44
  %126 = load i32, ptr %6, align 4, !tbaa !44
  %127 = icmp eq i32 %125, %126
  br i1 %127, label %141, label %128

128:                                              ; preds = %124
  %129 = load i32, ptr %9, align 4, !tbaa !44
  %130 = sext i32 %129 to i64
  %131 = load i32, ptr %4, align 4, !tbaa !44
  %132 = sub nsw i32 %131, 1
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %135 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %134) #13
  %136 = add i64 %133, %135
  %137 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %138 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #13
  %139 = urem i64 %136, %138
  %140 = icmp eq i64 %130, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %128, %124, %120
  br label %190

142:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #13
  %143 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %144 = load i32, ptr %9, align 4, !tbaa !44
  %145 = sext i32 %144 to i64
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %143, i64 noundef %145) #13
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  store ptr %147, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #13
  %148 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %149 = load i32, ptr %9, align 4, !tbaa !44
  %150 = add nsw i32 %149, 1
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %153 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %152) #13
  %154 = urem i64 %151, %153
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %148, i64 noundef %154) #13
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  store ptr %156, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #13
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %157)
  store <2 x float> %158, ptr %13, align 4
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %159)
  store <2 x float> %160, ptr %14, align 4
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %161)
  store <2 x float> %162, ptr %15, align 4
  %163 = load ptr, ptr %11, align 8, !tbaa !5
  %164 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %163)
  store <2 x float> %164, ptr %16, align 4
  %165 = load <2 x float>, ptr %13, align 4
  %166 = load <2 x float>, ptr %14, align 4
  %167 = load <2 x float>, ptr %15, align 4
  %168 = load <2 x float>, ptr %16, align 4
  %169 = call <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %165, <2 x float> %166, <2 x float> %167, <2 x float> %168)
  store <2 x float> %169, ptr %12, align 4
  %170 = call noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %12)
  %171 = zext i1 %170 to i32
  %172 = icmp eq i32 %171, 0
  br i1 %172, label %173, label %186

173:                                              ; preds = %142
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = call noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %174)
  %176 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %175)
  %177 = call noundef ptr @_ZN5QBody8GetWorldEv(ptr noundef nonnull align 8 dereferenceable(293) %176)
  %178 = call noundef ptr @_ZN6QWorld9GetGizmosEv(ptr noundef nonnull align 8 dereferenceable(272) %177)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #13
  %179 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 24) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %12, i64 8, i1 false), !tbaa.struct !46
  %180 = load <2 x float>, ptr %18, align 4
  invoke void @_ZN12QGizmoCircleC2E7QVectorf(ptr noundef nonnull align 8 dereferenceable(24) %179, <2 x float> %180, float noundef 5.000000e+00)
          to label %181 unwind label %182

181:                                              ; preds = %173
  store ptr %179, ptr %17, align 8, !tbaa !5
  call void @_ZNSt6vectorIP6QGizmoSaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %178, ptr noundef nonnull align 8 dereferenceable(8) %17)
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #13
  store i8 1, ptr %3, align 1, !tbaa !43
  store i32 5, ptr %5, align 4
  br label %187

182:                                              ; preds = %173
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %19, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %179, i64 noundef 24) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #13
  br label %503

186:                                              ; preds = %142
  store i32 0, ptr %5, align 4
  br label %187

187:                                              ; preds = %186, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #13
  %188 = load i32, ptr %5, align 4
  switch i32 %188, label %193 [
    i32 0, label %189
  ]

189:                                              ; preds = %187
  br label %190

190:                                              ; preds = %189, %141
  %191 = load i32, ptr %9, align 4, !tbaa !44
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %9, align 4, !tbaa !44
  br label %113, !llvm.loop !48

193:                                              ; preds = %187, %119
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #13
  br label %194

194:                                              ; preds = %193
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #13
  br label %195

195:                                              ; preds = %194
  %196 = load i32, ptr %4, align 4, !tbaa !44
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %4, align 4, !tbaa !44
  br label %82, !llvm.loop !50

198:                                              ; preds = %88
  %199 = load i8, ptr %3, align 1, !tbaa !43, !range !51, !noundef !52
  %200 = trunc i8 %199 to i1
  %201 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 20
  %202 = zext i1 %200 to i8
  store i8 %202, ptr %201, align 2, !tbaa !53
  %203 = load i8, ptr %3, align 1, !tbaa !43, !range !51, !noundef !52
  %204 = trunc i8 %203 to i1
  %205 = zext i1 %204 to i32
  %206 = icmp eq i32 %205, 1
  br i1 %206, label %207, label %289

207:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 12, ptr %21) #13
  %208 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %208)
  %209 = invoke { <2 x float>, float } @_ZN5QMesh29GetAveragePositionAndRotationESt6vectorIP9QParticleSaIS2_EE(ptr noundef %22)
          to label %210 unwind label %223

210:                                              ; preds = %207
  store { <2 x float>, float } %209, ptr %23, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 8 %23, i64 12, i1 false)
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #13
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #13
  %211 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %211)
  %212 = getelementptr inbounds %"struct.std::pair", ptr %21, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %212, i64 8, i1 false), !tbaa.struct !46
  %213 = getelementptr inbounds %"struct.std::pair", ptr %21, i32 0, i32 1
  %214 = load float, ptr %213, align 4, !tbaa !54
  %215 = load <2 x float>, ptr %26, align 4
  invoke void @_ZN5QMesh28GetMatchingParticlePositionsESt6vectorIP9QParticleSaIS2_EE7QVectorf(ptr dead_on_unwind writable sret(%"class.std::vector.15") align 8 %24, ptr noundef %25, <2 x float> %215, float noundef %214)
          to label %216 unwind label %227

216:                                              ; preds = %210
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #13
  store i32 0, ptr %27, align 4, !tbaa !44
  br label %217

217:                                              ; preds = %277, %216
  %218 = load i32, ptr %27, align 4, !tbaa !44
  %219 = sext i32 %218 to i64
  %220 = call noundef i64 @_ZNKSt6vectorI7QVectorSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #13
  %221 = icmp ult i64 %219, %220
  br i1 %221, label %231, label %222

222:                                              ; preds = %217
  store i32 8, ptr %5, align 4
  br label %280

223:                                              ; preds = %207
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %19, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %20, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #13
  br label %288

227:                                              ; preds = %210
  %228 = landingpad { ptr, i32 }
          cleanup
  %229 = extractvalue { ptr, i32 } %228, 0
  store ptr %229, ptr %19, align 8
  %230 = extractvalue { ptr, i32 } %228, 1
  store i32 %230, ptr %20, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #13
  br label %287

231:                                              ; preds = %217
  %232 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %233 = load i32, ptr %27, align 4, !tbaa !44
  %234 = sext i32 %233 to i64
  %235 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %232, i64 noundef %234) #13
  %236 = load ptr, ptr %235, align 8, !tbaa !5
  %237 = invoke noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %236)
          to label %238 unwind label %242

238:                                              ; preds = %231
  %239 = zext i1 %237 to i32
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %246

241:                                              ; preds = %238
  br label %277

242:                                              ; preds = %231
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %19, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %20, align 4
  br label %282

246:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #13
  %247 = load i32, ptr %27, align 4, !tbaa !44
  %248 = sext i32 %247 to i64
  %249 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %248) #13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %249, i64 8, i1 false), !tbaa.struct !46
  %250 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %251 = load i32, ptr %27, align 4, !tbaa !44
  %252 = sext i32 %251 to i64
  %253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %250, i64 noundef %252) #13
  %254 = load ptr, ptr %253, align 8, !tbaa !5
  %255 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %254)
          to label %256 unwind label %273

256:                                              ; preds = %246
  store <2 x float> %255, ptr %31, align 4
  %257 = load <2 x float>, ptr %30, align 4
  %258 = load <2 x float>, ptr %31, align 4
  %259 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %257, <2 x float> %258)
          to label %260 unwind label %273

260:                                              ; preds = %256
  store <2 x float> %259, ptr %29, align 4
  %261 = load <2 x float>, ptr %29, align 4
  %262 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %261, float noundef 0x3FC99999A0000000)
          to label %263 unwind label %273

263:                                              ; preds = %260
  store <2 x float> %262, ptr %28, align 4
  %264 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %265 = load i32, ptr %27, align 4, !tbaa !44
  %266 = sext i32 %265 to i64
  %267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %264, i64 noundef %266) #13
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %28, i64 8, i1 false), !tbaa.struct !46
  %269 = load <2 x float>, ptr %32, align 4
  %270 = invoke noundef ptr @_ZN9QParticle10ApplyForceE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %268, <2 x float> %269)
          to label %271 unwind label %273

271:                                              ; preds = %263
  %272 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %272) #13
  store i32 1, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #13
  br label %280

273:                                              ; preds = %263, %260, %256, %246
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %19, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #13
  br label %282

277:                                              ; preds = %241
  %278 = load i32, ptr %27, align 4, !tbaa !44
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %27, align 4, !tbaa !44
  br label %217, !llvm.loop !56

280:                                              ; preds = %271, %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #13
  %281 = load i32, ptr %5, align 4
  switch i32 %281, label %284 [
    i32 8, label %283
  ]

282:                                              ; preds = %273, %242
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #13
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #13
  br label %287

283:                                              ; preds = %280
  store i32 0, ptr %5, align 4
  br label %284

284:                                              ; preds = %283, %280
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #13
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #13
  %285 = load i32, ptr %5, align 4
  switch i32 %285, label %500 [
    i32 0, label %286
  ]

286:                                              ; preds = %284
  br label %289

287:                                              ; preds = %282, %227
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #13
  br label %288

288:                                              ; preds = %287, %223
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #13
  br label %503

289:                                              ; preds = %286, %198
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #13
  store i8 0, ptr %33, align 1, !tbaa !43
  %290 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  %291 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %290) #13
  %292 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %293 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %292) #13
  %294 = icmp ne i64 %291, %293
  br i1 %294, label %295, label %309

295:                                              ; preds = %289
  %296 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %296) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #13
  store i64 0, ptr %34, align 8, !tbaa !57
  br label %297

297:                                              ; preds = %305, %295
  %298 = load i64, ptr %34, align 8, !tbaa !57
  %299 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %300 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %299) #13
  %301 = icmp ult i64 %298, %300
  br i1 %301, label %303, label %302

302:                                              ; preds = %297
  store i32 11, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #13
  br label %308

303:                                              ; preds = %297
  %304 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #13
  store float 0.000000e+00, ptr %35, align 4, !tbaa !47
  call void @_ZNSt6vectorIfSaIfEE9push_backEOf(ptr noundef nonnull align 8 dereferenceable(24) %304, ptr noundef nonnull align 4 dereferenceable(4) %35)
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #13
  br label %305

305:                                              ; preds = %303
  %306 = load i64, ptr %34, align 8, !tbaa !57
  %307 = add i64 %306, 1
  store i64 %307, ptr %34, align 8, !tbaa !57
  br label %297, !llvm.loop !59

308:                                              ; preds = %302
  store i8 1, ptr %33, align 1, !tbaa !43
  br label %309

309:                                              ; preds = %308, %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #13
  %310 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 17
  %311 = load float, ptr %310, align 8, !tbaa !9
  store float %311, ptr %36, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #13
  %312 = load float, ptr %36, align 4, !tbaa !47
  %313 = fpext float %312 to double
  %314 = fsub double 0x401921FB54442D18, %313
  %315 = fptrunc double %314 to float
  store float %315, ptr %37, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #13
  store i64 0, ptr %38, align 8, !tbaa !57
  br label %316

316:                                              ; preds = %496, %309
  %317 = load i64, ptr %38, align 8, !tbaa !57
  %318 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %319 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %318) #13
  %320 = icmp ult i64 %317, %319
  br i1 %320, label %322, label %321

321:                                              ; preds = %316
  store i32 14, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #13
  br label %499

322:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #13
  %323 = load i64, ptr %38, align 8, !tbaa !57
  %324 = sub i64 %323, 1
  %325 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %326 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %325) #13
  %327 = add i64 %324, %326
  %328 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %329 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %328) #13
  %330 = urem i64 %327, %329
  store i64 %330, ptr %39, align 8, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #13
  %331 = load i64, ptr %38, align 8, !tbaa !57
  %332 = add i64 %331, 1
  %333 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %334 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %333) #13
  %335 = urem i64 %332, %334
  store i64 %335, ptr %40, align 8, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #13
  %336 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %337 = load i64, ptr %39, align 8, !tbaa !57
  %338 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %336, i64 noundef %337) #13
  %339 = load ptr, ptr %338, align 8, !tbaa !5
  store ptr %339, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #13
  %340 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %341 = load i64, ptr %38, align 8, !tbaa !57
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %340, i64 noundef %341) #13
  %343 = load ptr, ptr %342, align 8, !tbaa !5
  store ptr %343, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #13
  %344 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 7
  %345 = load i64, ptr %40, align 8, !tbaa !57
  %346 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %344, i64 noundef %345) #13
  %347 = load ptr, ptr %346, align 8, !tbaa !5
  store ptr %347, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #13
  %348 = load ptr, ptr %41, align 8, !tbaa !5
  %349 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %348)
  store <2 x float> %349, ptr %45, align 4
  %350 = load ptr, ptr %42, align 8, !tbaa !5
  %351 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %350)
  store <2 x float> %351, ptr %46, align 4
  %352 = load <2 x float>, ptr %45, align 4
  %353 = load <2 x float>, ptr %46, align 4
  %354 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %352, <2 x float> %353)
  store <2 x float> %354, ptr %44, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #13
  %355 = load ptr, ptr %43, align 8, !tbaa !5
  %356 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %355)
  store <2 x float> %356, ptr %48, align 4
  %357 = load ptr, ptr %42, align 8, !tbaa !5
  %358 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %357)
  store <2 x float> %358, ptr %49, align 4
  %359 = load <2 x float>, ptr %48, align 4
  %360 = load <2 x float>, ptr %49, align 4
  %361 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %359, <2 x float> %360)
  store <2 x float> %361, ptr %47, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %51, ptr align 4 %44, i64 8, i1 false), !tbaa.struct !46
  %362 = load <2 x float>, ptr %51, align 4
  %363 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %47, <2 x float> %362)
  %364 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %44)
  %365 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %47)
  %366 = fmul float %364, %365
  %367 = fdiv float %363, %366
  store float %367, ptr %50, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #13
  %368 = call <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %44)
  store <2 x float> %368, ptr %53, align 4
  %369 = load <2 x float>, ptr %53, align 4
  %370 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %47, <2 x float> %369)
  %371 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %44)
  %372 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %47)
  %373 = fmul float %371, %372
  %374 = fdiv float %370, %373
  store float %374, ptr %52, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #13
  %375 = load float, ptr %52, align 4, !tbaa !47
  %376 = load float, ptr %50, align 4, !tbaa !47
  %377 = call noundef float @_ZSt5atan2ff(float noundef %375, float noundef %376)
  store float %377, ptr %54, align 4, !tbaa !47
  %378 = load float, ptr %54, align 4, !tbaa !47
  %379 = fcmp olt float %378, 0.000000e+00
  br i1 %379, label %380, label %386

380:                                              ; preds = %322
  %381 = load float, ptr %54, align 4, !tbaa !47
  %382 = call noundef float @_ZSt3absf(float noundef %381)
  %383 = fpext float %382 to double
  %384 = fsub double 0x401921FB54442D18, %383
  %385 = fptrunc double %384 to float
  store float %385, ptr %54, align 4, !tbaa !47
  br label %386

386:                                              ; preds = %380, %322
  %387 = load i8, ptr %33, align 1, !tbaa !43, !range !51, !noundef !52
  %388 = trunc i8 %387 to i1
  br i1 %388, label %389, label %394

389:                                              ; preds = %386
  %390 = load float, ptr %54, align 4, !tbaa !47
  %391 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  %392 = load i64, ptr %38, align 8, !tbaa !57
  %393 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %391, i64 noundef %392) #13
  store float %390, ptr %393, align 4, !tbaa !47
  store i32 16, ptr %5, align 4
  br label %493

394:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #13
  %395 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  %396 = load i64, ptr %38, align 8, !tbaa !57
  %397 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %395, i64 noundef %396) #13
  %398 = load float, ptr %397, align 4, !tbaa !47
  %399 = call <2 x float> @_ZN7QVector17AngleToUnitVectorEf(float noundef %398)
  store <2 x float> %399, ptr %55, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #13
  %400 = load float, ptr %54, align 4, !tbaa !47
  %401 = call <2 x float> @_ZN7QVector17AngleToUnitVectorEf(float noundef %400)
  store <2 x float> %401, ptr %56, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #13
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %56, i64 8, i1 false), !tbaa.struct !46
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !46
  %402 = load <2 x float>, ptr %58, align 4
  %403 = load <2 x float>, ptr %59, align 4
  %404 = call noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %402, <2 x float> %403)
  store float %404, ptr %57, align 4, !tbaa !47
  %405 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  %406 = load i64, ptr %38, align 8, !tbaa !57
  %407 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %405, i64 noundef %406) #13
  %408 = load float, ptr %407, align 4, !tbaa !47
  %409 = load float, ptr %57, align 4, !tbaa !47
  %410 = fadd float %408, %409
  store float %410, ptr %54, align 4, !tbaa !47
  %411 = load float, ptr %54, align 4, !tbaa !47
  %412 = load float, ptr %37, align 4, !tbaa !47
  %413 = fcmp ogt float %411, %412
  br i1 %413, label %414, label %449

414:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #13
  %415 = load float, ptr %37, align 4, !tbaa !47
  %416 = load float, ptr %54, align 4, !tbaa !47
  %417 = fsub float %415, %416
  store float %417, ptr %60, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #13
  %418 = load float, ptr %60, align 4, !tbaa !47
  %419 = fmul float %418, 5.000000e-01
  store float %419, ptr %61, align 4, !tbaa !47
  %420 = load ptr, ptr %41, align 8, !tbaa !5
  %421 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %420)
  br i1 %421, label %422, label %433

422:                                              ; preds = %414
  %423 = load ptr, ptr %41, align 8, !tbaa !5
  %424 = load ptr, ptr %42, align 8, !tbaa !5
  %425 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %424)
  store <2 x float> %425, ptr %63, align 4
  %426 = load float, ptr %61, align 4, !tbaa !47
  %427 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %44, float noundef %426)
  store <2 x float> %427, ptr %64, align 4
  %428 = load <2 x float>, ptr %63, align 4
  %429 = load <2 x float>, ptr %64, align 4
  %430 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %428, <2 x float> %429)
  store <2 x float> %430, ptr %62, align 4
  %431 = load <2 x float>, ptr %62, align 4
  %432 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %423, <2 x float> %431)
  br label %433

433:                                              ; preds = %422, %414
  %434 = load ptr, ptr %43, align 8, !tbaa !5
  %435 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %434)
  br i1 %435, label %436, label %448

436:                                              ; preds = %433
  %437 = load ptr, ptr %43, align 8, !tbaa !5
  %438 = load ptr, ptr %42, align 8, !tbaa !5
  %439 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %438)
  store <2 x float> %439, ptr %66, align 4
  %440 = load float, ptr %61, align 4, !tbaa !47
  %441 = fneg float %440
  %442 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %47, float noundef %441)
  store <2 x float> %442, ptr %67, align 4
  %443 = load <2 x float>, ptr %66, align 4
  %444 = load <2 x float>, ptr %67, align 4
  %445 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %443, <2 x float> %444)
  store <2 x float> %445, ptr %65, align 4
  %446 = load <2 x float>, ptr %65, align 4
  %447 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %437, <2 x float> %446)
  br label %448

448:                                              ; preds = %436, %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #13
  br label %449

449:                                              ; preds = %448, %394
  %450 = load float, ptr %54, align 4, !tbaa !47
  %451 = load float, ptr %36, align 4, !tbaa !47
  %452 = fcmp olt float %450, %451
  br i1 %452, label %453, label %488

453:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #13
  %454 = load float, ptr %36, align 4, !tbaa !47
  %455 = load float, ptr %54, align 4, !tbaa !47
  %456 = fsub float %454, %455
  store float %456, ptr %68, align 4, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #13
  %457 = load float, ptr %68, align 4, !tbaa !47
  %458 = fmul float %457, 5.000000e-01
  store float %458, ptr %69, align 4, !tbaa !47
  %459 = load ptr, ptr %41, align 8, !tbaa !5
  %460 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %459)
  br i1 %460, label %461, label %472

461:                                              ; preds = %453
  %462 = load ptr, ptr %41, align 8, !tbaa !5
  %463 = load ptr, ptr %42, align 8, !tbaa !5
  %464 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %463)
  store <2 x float> %464, ptr %71, align 4
  %465 = load float, ptr %69, align 4, !tbaa !47
  %466 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %44, float noundef %465)
  store <2 x float> %466, ptr %72, align 4
  %467 = load <2 x float>, ptr %71, align 4
  %468 = load <2 x float>, ptr %72, align 4
  %469 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %467, <2 x float> %468)
  store <2 x float> %469, ptr %70, align 4
  %470 = load <2 x float>, ptr %70, align 4
  %471 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %462, <2 x float> %470)
  br label %472

472:                                              ; preds = %461, %453
  %473 = load ptr, ptr %43, align 8, !tbaa !5
  %474 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %473)
  br i1 %474, label %475, label %487

475:                                              ; preds = %472
  %476 = load ptr, ptr %43, align 8, !tbaa !5
  %477 = load ptr, ptr %42, align 8, !tbaa !5
  %478 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %477)
  store <2 x float> %478, ptr %74, align 4
  %479 = load float, ptr %69, align 4, !tbaa !47
  %480 = fneg float %479
  %481 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %47, float noundef %480)
  store <2 x float> %481, ptr %75, align 4
  %482 = load <2 x float>, ptr %74, align 4
  %483 = load <2 x float>, ptr %75, align 4
  %484 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %482, <2 x float> %483)
  store <2 x float> %484, ptr %73, align 4
  %485 = load <2 x float>, ptr %73, align 4
  %486 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %476, <2 x float> %485)
  br label %487

487:                                              ; preds = %475, %472
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #13
  br label %488

488:                                              ; preds = %487, %449
  %489 = load float, ptr %54, align 4, !tbaa !47
  %490 = getelementptr inbounds %struct.QMesh, ptr %76, i32 0, i32 16
  %491 = load i64, ptr %38, align 8, !tbaa !57
  %492 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %490, i64 noundef %491) #13
  store float %489, ptr %492, align 4, !tbaa !47
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #13
  store i32 0, ptr %5, align 4
  br label %493

493:                                              ; preds = %488, %389
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #13
  %494 = load i32, ptr %5, align 4
  switch i32 %494, label %509 [
    i32 0, label %495
    i32 16, label %496
  ]

495:                                              ; preds = %493
  br label %496

496:                                              ; preds = %495, %493
  %497 = load i64, ptr %38, align 8, !tbaa !57
  %498 = add i64 %497, 1
  store i64 %498, ptr %38, align 8, !tbaa !57
  br label %316, !llvm.loop !60

499:                                              ; preds = %321
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #13
  store i32 0, ptr %5, align 4
  br label %500

500:                                              ; preds = %499, %284
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #13
  %501 = load i32, ptr %5, align 4
  switch i32 %501, label %509 [
    i32 0, label %502
    i32 1, label %502
  ]

502:                                              ; preds = %500, %500, %80
  ret void

503:                                              ; preds = %288, %182
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #13
  br label %504

504:                                              ; preds = %503
  %505 = load ptr, ptr %19, align 8
  %506 = load i32, ptr %20, align 4
  %507 = insertvalue { ptr, i32 } poison, ptr %505, 0
  %508 = insertvalue { ptr, i32 } %507, i32 %506, 1
  resume { ptr, i32 } %508

509:                                              ; preds = %500, %493
  unreachable
}

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

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

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN12QGizmoCircleC2E7QVectorf(ptr noundef nonnull align 8 dereferenceable(24), <2 x float>, float noundef) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN5QMesh29GetAveragePositionAndRotationESt6vectorIP9QParticleSaIS2_EE(ptr noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5QMesh28GetMatchingParticlePositionsESt6vectorIP9QParticleSaIS2_EE7QVectorf(ptr dead_on_unwind noalias writable sret(%"class.std::vector.15") align 8, ptr noundef, <2 x float>, float noundef) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290)) #0 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float noundef) #12

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

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

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

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

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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 #9 = { nobuiltin allocsize(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 = { 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 #11 = { 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 #12 = { 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 #13 = { nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !16, i64 248}
!10 = !{!"_ZTS5QMesh", !11, i64 0, !15, i64 24, !15, i64 32, !16, i64 40, !16, i64 44, !17, i64 48, !21, i64 72, !11, i64 96, !25, i64 120, !29, i64 144, !16, i64 168, !6, i64 176, !33, i64 184, !34, i64 192, !38, i64 216, !38, i64 217, !39, i64 224, !16, i64 248, !38, i64 252, !38, i64 253, !38, i64 254, !38, i64 255}
!11 = !{!"_ZTSSt6vectorIP9QParticleSaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIP9QParticleSaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!"_ZTS7QVector", !16, i64 0, !16, i64 4}
!16 = !{!"float", !7, i64 0}
!17 = !{!"_ZTSSt6vectorIP7QSpringSaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIP7QSpringSaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorIP16QAngleConstraintSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIP16QAngleConstraintSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSSt6vectorIS_IP9QParticleSaIS1_EESaIS3_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSSt6vectorI7QVectorSaIS0_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseI7QVectorSaIS0_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSN5QMesh18CollisionBehaviorsE", !7, i64 0}
!34 = !{!"_ZTSSt6vectorIS_IiSaIiEESaIS1_EE", !35, i64 0}
!35 = !{!"_ZTSSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!38 = !{!"bool", !7, i64 0}
!39 = !{!"_ZTSSt6vectorIfSaIfEE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!38, !38, i64 0}
!44 = !{!45, !45, i64 0}
!45 = !{!"int", !7, i64 0}
!46 = !{i64 0, i64 4, !47, i64 4, i64 4, !47}
!47 = !{!16, !16, i64 0}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = distinct !{!50, !49}
!51 = !{i8 0, i8 2}
!52 = !{}
!53 = !{!10, !38, i64 254}
!54 = !{!55, !16, i64 8}
!55 = !{!"_ZTSSt4pairI7QVectorfE", !15, i64 0, !16, i64 8}
!56 = distinct !{!56, !49}
!57 = !{!58, !58, i64 0}
!58 = !{!"long", !7, i64 0}
!59 = distinct !{!59, !49}
!60 = distinct !{!60, !49}


; 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.QVector = type { float, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) 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: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0 align 2

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #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: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

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

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

declare <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float>, <2 x float>, <2 x float>, <2 x float>) local_unnamed_addr #5

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5QMesh30ApplyAngleConstraintsToPolygonEv(ptr noundef nonnull align 8 dereferenceable(256) %0) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %struct.QVector, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca %"class.std::vector.15", align 8
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca float, align 4
  %8 = alloca %struct.QVector, align 8
  %9 = alloca %struct.QVector, align 8
  %10 = getelementptr inbounds i8, ptr %0, i64 248
  %11 = load float, ptr %10, align 8, !tbaa !5
  %12 = fcmp oeq float %11, 0.000000e+00
  br i1 %12, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %1
  %13 = getelementptr inbounds i8, ptr %0, i64 96
  %14 = tail call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %.not174 = icmp eq i64 %14, 0
  br i1 %.not174, label %._crit_edge.thread, label %.lr.ph162

._crit_edge.thread:                               ; preds = %.preheader
  %15 = getelementptr inbounds i8, ptr %0, i64 254
  store i8 0, ptr %15, align 2, !tbaa !42
  br label %99

._crit_edge:                                      ; preds = %.loopexit154
  %16 = trunc nuw i8 %.4 to i1
  %17 = getelementptr inbounds i8, ptr %0, i64 254
  %18 = and i8 %.4, 1
  store i8 %18, ptr %17, align 2, !tbaa !42
  br i1 %16, label %68, label %99

.lr.ph162:                                        ; preds = %.preheader, %.loopexit154
  %indvars.iv182 = phi i64 [ %indvars.iv.next183, %.loopexit154 ], [ 0, %.preheader ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %.loopexit154 ], [ 1, %.preheader ]
  %.0161 = phi i8 [ %.4, %.loopexit154 ], [ 0, %.preheader ]
  %indvars.iv.next183 = add nuw nsw i64 %indvars.iv182, 1
  %19 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %20 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv182) #12
  %21 = load ptr, ptr %20, align 8, !tbaa !43
  %22 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %23 = urem i64 %indvars.iv.next183, %22
  %24 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %23) #12
  %25 = load ptr, ptr %24, align 8, !tbaa !43
  %26 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %27 = icmp ugt i64 %26, %indvars.iv.next183
  br i1 %27, label %.lr.ph, label %.loopexit154

.lr.ph:                                           ; preds = %.lr.ph162
  %28 = urem i64 %indvars.iv.next183, %19
  %29 = add nsw i64 %indvars.iv182, -1
  %30 = and i64 %28, 4294967295
  br label %31

31:                                               ; preds = %.lr.ph, %63
  %indvars.iv179 = phi i64 [ %indvars.iv, %.lr.ph ], [ %indvars.iv.next180, %63 ]
  %32 = icmp eq i64 %indvars.iv179, %indvars.iv182
  %33 = icmp eq i64 %indvars.iv179, %30
  %or.cond = select i1 %32, i1 true, i1 %33
  br i1 %or.cond, label %63, label %34

34:                                               ; preds = %31
  %35 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %36 = add i64 %35, %29
  %37 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %38 = urem i64 %36, %37
  %39 = icmp eq i64 %38, %indvars.iv179
  br i1 %39, label %63, label %40

40:                                               ; preds = %34
  %41 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv179) #12
  %42 = load ptr, ptr %41, align 8, !tbaa !43
  %43 = add nuw nsw i64 %indvars.iv179, 1
  %44 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %45 = urem i64 %43, %44
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %45) #12
  %47 = load ptr, ptr %46, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #12
  %48 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %21)
  %49 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %25)
  %50 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %42)
  %51 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %47)
  %52 = call <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %48, <2 x float> %49, <2 x float> %50, <2 x float> %51)
  store <2 x float> %52, ptr %2, align 8
  %53 = call noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %2)
  br i1 %53, label %.thread, label %54

.thread:                                          ; preds = %40
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  br label %63

54:                                               ; preds = %40
  %55 = call noundef ptr @_ZN9QParticle12GetOwnerMeshEv(ptr noundef nonnull align 8 dereferenceable(290) %21)
  %56 = call noundef ptr @_ZN5QMesh12GetOwnerBodyEv(ptr noundef nonnull align 8 dereferenceable(256) %55)
  %57 = call noundef ptr @_ZN5QBody8GetWorldEv(ptr noundef nonnull align 8 dereferenceable(293) %56)
  %58 = call noundef ptr @_ZN6QWorld9GetGizmosEv(ptr noundef nonnull align 8 dereferenceable(272) %57)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #12
  %59 = call noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #13
  %.sroa.091.0.copyload = load <2 x float>, ptr %2, align 8
  invoke void @_ZN12QGizmoCircleC2E7QVectorf(ptr noundef nonnull align 8 dereferenceable(24) %59, <2 x float> %.sroa.091.0.copyload, float noundef 5.000000e+00)
          to label %62 unwind label %60

60:                                               ; preds = %54
  %61 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %59, i64 noundef 24) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  br label %204

62:                                               ; preds = %54
  store ptr %59, ptr %3, align 8, !tbaa !43
  call void @_ZNSt6vectorIP6QGizmoSaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(8) %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  br label %.loopexit154

63:                                               ; preds = %.thread, %31, %34
  %indvars.iv.next180 = add nuw nsw i64 %indvars.iv179, 1
  %64 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %65 = icmp ugt i64 %64, %indvars.iv.next180
  br i1 %65, label %31, label %.loopexit154, !llvm.loop !44

.loopexit154:                                     ; preds = %63, %.lr.ph162, %62
  %.4 = phi i8 [ 1, %62 ], [ %.0161, %.lr.ph162 ], [ %.0161, %63 ]
  %66 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %67 = icmp ugt i64 %66, %indvars.iv.next183
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  br i1 %67, label %.lr.ph162, label %._crit_edge, !llvm.loop !46

68:                                               ; preds = %._crit_edge
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %13)
  %69 = invoke { <2 x float>, float } @_ZN5QMesh29GetAveragePositionAndRotationESt6vectorIP9QParticleSaIS2_EE(ptr noundef nonnull %4)
          to label %70 unwind label %75

70:                                               ; preds = %68
  %.fca.0.extract = extractvalue { <2 x float>, float } %69, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %69, 1
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #12
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %13)
  invoke void @_ZN5QMesh28GetMatchingParticlePositionsESt6vectorIP9QParticleSaIS2_EE7QVectorf(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.15") align 8 %5, ptr noundef nonnull %6, <2 x float> %.fca.0.extract, float noundef %.fca.1.extract)
          to label %71 unwind label %77

71:                                               ; preds = %70
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  %72 = call noundef i64 @_ZNKSt6vectorI7QVectorSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  %.not164.not = icmp eq i64 %72, 0
  br i1 %.not164.not, label %.critedge, label %.lr.ph167

73:                                               ; preds = %.lr.ph167
  %indvars.iv.next185 = add nuw nsw i64 %indvars.iv184, 1
  %74 = call noundef i64 @_ZNKSt6vectorI7QVectorSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  %.not = icmp ugt i64 %74, %indvars.iv.next185
  br i1 %.not, label %.lr.ph167, label %.critedge, !llvm.loop !47

75:                                               ; preds = %68
  %76 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #12
  br label %204

77:                                               ; preds = %70
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #12
  br label %98

.lr.ph167:                                        ; preds = %71, %73
  %indvars.iv184 = phi i64 [ %indvars.iv.next185, %73 ], [ 0, %71 ]
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv184) #12
  %80 = load ptr, ptr %79, align 8, !tbaa !43
  %81 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %80)
  br i1 %81, label %82, label %73

82:                                               ; preds = %.lr.ph167
  %83 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %indvars.iv184) #12
  %.sroa.077.0.copyload = load <2 x float>, ptr %83, align 4
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv184) #12
  %85 = load ptr, ptr %84, align 8, !tbaa !43
  %86 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %85)
  %87 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %.sroa.077.0.copyload, <2 x float> %86)
          to label %88 unwind label %96

88:                                               ; preds = %82
  %89 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %87, float noundef 0x3FC99999A0000000)
          to label %90 unwind label %96

90:                                               ; preds = %88
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv184) #12
  %92 = load ptr, ptr %91, align 8, !tbaa !43
  %93 = invoke noundef ptr @_ZN9QParticle10ApplyForceE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %92, <2 x float> %89)
          to label %94 unwind label %96

94:                                               ; preds = %90
  %95 = getelementptr inbounds i8, ptr %0, i64 224
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %95) #12
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  br label %.loopexit

96:                                               ; preds = %90, %88, %82
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  br label %98

98:                                               ; preds = %96, %77
  %.pn = phi { ptr, i32 } [ %97, %96 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  br label %204

.critedge:                                        ; preds = %73, %71
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  br label %99

99:                                               ; preds = %._crit_edge.thread, %.critedge, %._crit_edge
  %100 = getelementptr inbounds i8, ptr %0, i64 224
  %101 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %100) #12
  %102 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %.not149.not = icmp eq i64 %101, %102
  br i1 %.not149.not, label %.loopexit153, label %103

103:                                              ; preds = %99
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %100) #12
  %104 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %.not175 = icmp eq i64 %104, 0
  br i1 %.not175, label %.loopexit153, label %.lr.ph170

.lr.ph170:                                        ; preds = %103, %.lr.ph170
  %.0135168 = phi i64 [ %105, %.lr.ph170 ], [ 0, %103 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #12
  store float 0.000000e+00, ptr %7, align 4, !tbaa !48
  call void @_ZNSt6vectorIfSaIfEE9push_backEOf(ptr noundef nonnull align 8 dereferenceable(24) %100, ptr noundef nonnull align 4 dereferenceable(4) %7)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #12
  %105 = add nuw i64 %.0135168, 1
  %106 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %107 = icmp ult i64 %105, %106
  br i1 %107, label %.lr.ph170, label %.loopexit153, !llvm.loop !49

.loopexit153:                                     ; preds = %.lr.ph170, %103, %99
  %108 = load float, ptr %10, align 8, !tbaa !5
  %109 = fpext float %108 to double
  %110 = fsub double 0x401921FB54442D18, %109
  %111 = fptrunc double %110 to float
  %112 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %.not176 = icmp eq i64 %112, 0
  br i1 %.not176, label %.loopexit, label %.lr.ph173

.lr.ph173:                                        ; preds = %.loopexit153, %201
  %.0136171 = phi i64 [ %118, %201 ], [ 0, %.loopexit153 ]
  %113 = add i64 %.0136171, -1
  %114 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %115 = add i64 %113, %114
  %116 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %117 = urem i64 %115, %116
  %118 = add nuw i64 %.0136171, 1
  %119 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %120 = urem i64 %118, %119
  %121 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %117) #12
  %122 = load ptr, ptr %121, align 8, !tbaa !43
  %123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %.0136171) #12
  %124 = load ptr, ptr %123, align 8, !tbaa !43
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %120) #12
  %126 = load ptr, ptr %125, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #12
  %127 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %122)
  %128 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %129 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %127, <2 x float> %128)
  store <2 x float> %129, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #12
  %130 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %126)
  %131 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %132 = call <2 x float> @_Zmi7QVectorS_(<2 x float> %130, <2 x float> %131)
  store <2 x float> %132, ptr %9, align 8
  %.sroa.035.0.copyload = load <2 x float>, ptr %8, align 8
  %133 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %9, <2 x float> %.sroa.035.0.copyload)
  %134 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %8)
  %135 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %9)
  %136 = fmul float %134, %135
  %137 = fdiv float %133, %136
  %138 = call <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %8)
  %139 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %9, <2 x float> %138)
  %140 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %8)
  %141 = call noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %9)
  %142 = fmul float %140, %141
  %143 = fdiv float %139, %142
  %144 = call noundef float @_ZSt5atan2ff(float noundef %143, float noundef %137)
  %145 = fcmp olt float %144, 0.000000e+00
  br i1 %145, label %146, label %151

146:                                              ; preds = %.lr.ph173
  %147 = call noundef float @_ZSt3absf(float noundef %144)
  %148 = fpext float %147 to double
  %149 = fsub double 0x401921FB54442D18, %148
  %150 = fptrunc double %149 to float
  br label %151

151:                                              ; preds = %146, %.lr.ph173
  %.0137 = phi float [ %150, %146 ], [ %144, %.lr.ph173 ]
  %152 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef %.0136171) #12
  br i1 %.not149.not, label %154, label %153

153:                                              ; preds = %151
  store float %.0137, ptr %152, align 4, !tbaa !48
  br label %201

154:                                              ; preds = %151
  %155 = load float, ptr %152, align 4, !tbaa !48
  %156 = call <2 x float> @_ZN7QVector17AngleToUnitVectorEf(float noundef %155)
  %157 = call <2 x float> @_ZN7QVector17AngleToUnitVectorEf(float noundef %.0137)
  %158 = call noundef float @_ZN7QVector22AngleBetweenTwoVectorsES_S_(<2 x float> %157, <2 x float> %156)
  %159 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef %.0136171) #12
  %160 = load float, ptr %159, align 4, !tbaa !48
  %161 = fadd float %158, %160
  %162 = fcmp ogt float %161, %111
  br i1 %162, label %163, label %180

163:                                              ; preds = %154
  %164 = fsub float %111, %161
  %165 = fmul float %164, 5.000000e-01
  %166 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %122)
  br i1 %166, label %167, label %172

167:                                              ; preds = %163
  %168 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %169 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef %165)
  %170 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %168, <2 x float> %169)
  %171 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %122, <2 x float> %170)
  br label %172

172:                                              ; preds = %167, %163
  %173 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %126)
  br i1 %173, label %174, label %180

174:                                              ; preds = %172
  %175 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %176 = fneg float %165
  %177 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef %176)
  %178 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %175, <2 x float> %177)
  %179 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %126, <2 x float> %178)
  br label %180

180:                                              ; preds = %172, %174, %154
  %181 = fcmp olt float %161, %108
  br i1 %181, label %182, label %199

182:                                              ; preds = %180
  %183 = fsub float %108, %161
  %184 = fmul float %183, 5.000000e-01
  %185 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %122)
  br i1 %185, label %186, label %191

186:                                              ; preds = %182
  %187 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %188 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef %184)
  %189 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %187, <2 x float> %188)
  %190 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %122, <2 x float> %189)
  br label %191

191:                                              ; preds = %186, %182
  %192 = call noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290) %126)
  br i1 %192, label %193, label %199

193:                                              ; preds = %191
  %194 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %124)
  %195 = fneg float %184
  %196 = call <2 x float> @_ZNK7QVector7RotatedEf(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef %195)
  %197 = call <2 x float> @_Zpl7QVectorS_(<2 x float> %194, <2 x float> %196)
  %198 = call noundef ptr @_ZN9QParticle17SetGlobalPositionE7QVector(ptr noundef nonnull align 8 dereferenceable(290) %126, <2 x float> %197)
  br label %199

199:                                              ; preds = %191, %193, %180
  %200 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef %.0136171) #12
  store float %161, ptr %200, align 4, !tbaa !48
  br label %201

201:                                              ; preds = %199, %153
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #12
  %202 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #12
  %203 = icmp ult i64 %118, %202
  br i1 %203, label %.lr.ph173, label %.loopexit, !llvm.loop !50

.loopexit:                                        ; preds = %201, %.loopexit153, %94, %1
  ret void

204:                                              ; preds = %75, %98, %60
  %.pn150 = phi { ptr, i32 } [ %61, %60 ], [ %.pn, %98 ], [ %76, %75 ]
  resume { ptr, i32 } %.pn150
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #7 align 2

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

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN12QGizmoCircleC2E7QVectorf(ptr noundef nonnull align 8 dereferenceable(24), <2 x float>, float noundef) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZN5QMesh29GetAveragePositionAndRotationESt6vectorIP9QParticleSaIS2_EE(ptr noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5QMesh28GetMatchingParticlePositionsESt6vectorIP9QParticleSaIS2_EE7QVectorf(ptr dead_on_unwind noalias writable sret(%"class.std::vector.15") align 8, ptr noundef, <2 x float>, float noundef) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QParticle10GetEnabledEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #0 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEE9push_backEOf(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 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 #9 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float noundef) local_unnamed_addr #11

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

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

declare <2 x float> @_ZN7QVector17AngleToUnitVectorEf(float noundef) local_unnamed_addr #5

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 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 #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 = { nobuiltin allocsize(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 = { 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 #10 = { 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 #11 = { 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 #12 = { nounwind }
attributes #13 = { builtin allocsize(0) }
attributes #14 = { builtin 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, !15, i64 248}
!6 = !{!"_ZTS5QMesh", !7, i64 0, !14, i64 24, !14, i64 32, !15, i64 40, !15, i64 44, !16, i64 48, !20, i64 72, !7, i64 96, !24, i64 120, !28, i64 144, !15, i64 168, !11, i64 176, !32, i64 184, !33, i64 192, !37, i64 216, !37, i64 217, !38, i64 224, !15, i64 248, !37, i64 252, !37, i64 253, !37, i64 254, !37, i64 255}
!7 = !{!"_ZTSSt6vectorIP9QParticleSaIS1_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseIP9QParticleSaIS1_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseIP9QParticleSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTS7QVector", !15, i64 0, !15, i64 4}
!15 = !{!"float", !12, i64 0}
!16 = !{!"_ZTSSt6vectorIP7QSpringSaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIP7QSpringSaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP7QSpringSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!20 = !{!"_ZTSSt6vectorIP16QAngleConstraintSaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIP16QAngleConstraintSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP16QAngleConstraintSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!24 = !{!"_ZTSSt6vectorIS_IP9QParticleSaIS1_EESaIS3_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseISt6vectorIP9QParticleSaIS2_EESaIS4_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!28 = !{!"_ZTSSt6vectorI7QVectorSaIS0_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseI7QVectorSaIS0_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseI7QVectorSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!32 = !{!"_ZTSN5QMesh18CollisionBehaviorsE", !12, i64 0}
!33 = !{!"_ZTSSt6vectorIS_IiSaIiEESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!37 = !{!"bool", !12, i64 0}
!38 = !{!"_ZTSSt6vectorIfSaIfEE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!42 = !{!6, !37, i64 254}
!43 = !{!11, !11, i64 0}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = distinct !{!46, !45}
!47 = distinct !{!47, !45}
!48 = !{!15, !15, i64 0}
!49 = distinct !{!49, !45}
!50 = distinct !{!50, !45}


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