; LLVM IR from erayzesen/QuarkPhysics :: QuarkPhysics (qcollision)

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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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 }
%struct.QVector = type { float, float }
%"struct.std::array" = type { [2 x ptr] }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.2" = type { i8 }
%"struct.QObjectPool<QCollision::Contact>::Node" = type { ptr, i32, i32 }

@_ZN6QWorld14MAX_WORLD_SIZEE = external dso_local global float, align 4

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290)) #1 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) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40)) #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57), ptr noundef, <2 x float>, <2 x float>, float noundef, ptr noundef) #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float>, ptr noundef) #5 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 #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7QVectorC2Ev(ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #9 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %2) #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::vector", align 8
  %10 = alloca %"class.std::vector.0", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca float, align 4
  %18 = alloca %struct.QVector, align 4
  %19 = alloca %"struct.std::array", align 8
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca %struct.QVector, align 4
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %struct.QVector, 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 float, align 4
  %33 = alloca %struct.QVector, align 4
  %34 = alloca %struct.QVector, align 4
  %35 = alloca %struct.QVector, align 4
  %36 = alloca %struct.QVector, align 4
  %37 = alloca %struct.QVector, align 4
  %38 = alloca %struct.QVector, align 4
  %39 = alloca %struct.QVector, align 4
  %40 = alloca %struct.QVector, align 4
  %41 = alloca %struct.QVector, align 4
  %42 = alloca float, align 4
  %43 = alloca %struct.QVector, align 4
  %44 = alloca float, align 4
  %45 = alloca %struct.QVector, align 4
  %46 = alloca float, align 4
  %47 = alloca i32, align 4
  %48 = alloca %struct.QVector, align 4
  %49 = alloca %"class.std::vector.0", align 8
  %50 = alloca i1, align 1
  %51 = alloca %struct.QVector, align 4
  %52 = alloca %"class.std::vector.0", align 8
  %53 = alloca float, align 4
  %54 = alloca %struct.QVector, align 4
  %55 = alloca ptr, align 8
  %56 = alloca %struct.QVector, align 4
  %57 = alloca %struct.QVector, align 4
  %58 = alloca %"class.std::vector.0", align 8
  %59 = alloca %"class.std::initializer_list", align 8
  %60 = alloca [1 x ptr], align 8
  %61 = alloca %"class.std::allocator.2", align 1
  %62 = alloca float, align 4
  %63 = alloca %struct.QVector, align 4
  %64 = alloca %struct.QVector, align 4
  %65 = alloca %struct.QVector, align 4
  %66 = alloca ptr, align 8
  %67 = alloca %struct.QVector, align 4
  %68 = alloca %struct.QVector, align 4
  %69 = alloca %"class.std::vector.0", align 8
  %70 = alloca %"class.std::initializer_list", align 8
  %71 = alloca [1 x ptr], align 8
  %72 = alloca %"class.std::allocator.2", align 1
  %73 = alloca float, align 4
  %74 = alloca %struct.QVector, align 4
  %75 = alloca %struct.QVector, align 4
  %76 = alloca %struct.QVector, align 4
  %77 = alloca %"class.std::vector.0", align 8
  %78 = alloca %"class.std::initializer_list", align 8
  %79 = alloca [2 x ptr], align 8
  %80 = alloca %"class.std::allocator.2", align 1
  %81 = alloca ptr, align 8
  %82 = alloca %struct.QVector, align 4
  %83 = alloca %struct.QVector, align 4
  %84 = alloca %"class.std::vector.0", align 8
  %85 = alloca float, align 4
  %86 = alloca %struct.QVector, align 4
  %87 = alloca %struct.QVector, align 4
  %88 = alloca %struct.QVector, align 4
  %89 = alloca %"class.std::vector.0", align 8
  %90 = alloca %"class.std::initializer_list", align 8
  %91 = alloca [2 x ptr], align 8
  %92 = alloca %"class.std::allocator.2", align 1
  %93 = alloca ptr, align 8
  %94 = alloca %struct.QVector, align 4
  %95 = alloca %struct.QVector, align 4
  %96 = alloca %"class.std::vector.0", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %97) #11
  %99 = trunc i64 %98 to i32
  store i32 %99, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %100) #11
  %102 = trunc i64 %101 to i32
  store i32 %102, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #11
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %103)
  invoke void @_ZN10QCollision24ParticlePolygonToPolygonESt6vectorIP9QParticleSaIS2_EE(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %9, ptr noundef %10)
          to label %104 unwind label %110

104:                                              ; preds = %3
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %105

105:                                              ; preds = %642, %104
  %106 = load i32, ptr %13, align 4, !tbaa !9
  %107 = load i32, ptr %8, align 4, !tbaa !9
  %108 = icmp slt i32 %106, %107
  br i1 %108, label %114, label %109

109:                                              ; preds = %105
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  br label %649

110:                                              ; preds = %3
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %11, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  br label %650

114:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = load i32, ptr %13, align 4, !tbaa !9
  %117 = sext i32 %116 to i64
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %115, i64 noundef %117) #11
  %119 = load ptr, ptr %118, align 8, !tbaa !5
  store ptr %119, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  store ptr null, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  %120 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  store float %120, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  invoke void @_ZN7QVectorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %121 unwind label %130

121:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #11
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  %122 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  store float %122, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  %123 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  store float %123, ptr %21, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  invoke void @_ZN7QVectorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %22)
          to label %124 unwind label %134

124:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %125

125:                                              ; preds = %257, %124
  %126 = load i32, ptr %23, align 4, !tbaa !9
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = icmp slt i32 %126, %127
  br i1 %128, label %138, label %129

129:                                              ; preds = %125
  store i32 5, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %267

130:                                              ; preds = %114
  %131 = landingpad { ptr, i32 }
          cleanup
  %132 = extractvalue { ptr, i32 } %131, 0
  store ptr %132, ptr %11, align 8
  %133 = extractvalue { ptr, i32 } %131, 1
  store i32 %133, ptr %12, align 4
  br label %648

134:                                              ; preds = %121
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %11, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %12, align 4
  br label %647

138:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %139 = load i32, ptr %23, align 4, !tbaa !9
  %140 = add nsw i32 %139, 1
  %141 = load i32, ptr %7, align 4, !tbaa !9
  %142 = srem i32 %140, %141
  %143 = sext i32 %142 to i64
  store i64 %143, ptr %24, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = load i32, ptr %23, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %144, i64 noundef %146) #11
  %148 = load ptr, ptr %147, align 8, !tbaa !5
  store ptr %148, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = load i64, ptr %24, align 8, !tbaa !13
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %149, i64 noundef %150) #11
  %152 = load ptr, ptr %151, align 8, !tbaa !5
  store ptr %152, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %153 = load i32, ptr %23, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %154) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %155, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %156 = load i64, ptr %24, align 8, !tbaa !13
  %157 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %156) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %157, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %158 = load ptr, ptr %15, align 8, !tbaa !5
  %159 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %158)
          to label %160 unwind label %175

160:                                              ; preds = %138
  store <2 x float> %159, ptr %30, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %27, i64 8, i1 false), !tbaa.struct !15
  %161 = load <2 x float>, ptr %30, align 4
  %162 = load <2 x float>, ptr %31, align 4
  %163 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %161, <2 x float> %162)
          to label %164 unwind label %175

164:                                              ; preds = %160
  store <2 x float> %163, ptr %29, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #11
  %165 = invoke noundef float @_ZNK7QVector13LengthSquaredEv(ptr noundef nonnull align 4 dereferenceable(8) %29)
          to label %166 unwind label %179

166:                                              ; preds = %164
  store float %165, ptr %32, align 4, !tbaa !11
  %167 = load float, ptr %32, align 4, !tbaa !11
  %168 = load float, ptr %17, align 4, !tbaa !11
  %169 = fcmp olt float %167, %168
  br i1 %169, label %170, label %187

170:                                              ; preds = %166
  %171 = load ptr, ptr %25, align 8, !tbaa !5
  store ptr %171, ptr %16, align 8, !tbaa !5
  %172 = load float, ptr %32, align 4, !tbaa !11
  store float %172, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #11
  %173 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %29)
          to label %174 unwind label %183

174:                                              ; preds = %170
  store <2 x float> %173, ptr %33, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %33, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  br label %187

175:                                              ; preds = %160, %138
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %11, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %12, align 4
  br label %266

179:                                              ; preds = %164
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %11, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %12, align 4
  br label %265

183:                                              ; preds = %170
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %11, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  br label %265

187:                                              ; preds = %174, %166
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %28, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %27, i64 8, i1 false), !tbaa.struct !15
  %188 = load <2 x float>, ptr %35, align 4
  %189 = load <2 x float>, ptr %36, align 4
  %190 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %188, <2 x float> %189)
          to label %191 unwind label %231

191:                                              ; preds = %187
  store <2 x float> %190, ptr %34, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %192 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %34)
          to label %193 unwind label %235

193:                                              ; preds = %191
  store <2 x float> %192, ptr %37, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  %194 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %37)
          to label %195 unwind label %239

195:                                              ; preds = %193
  store <2 x float> %194, ptr %38, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #11
  %196 = load ptr, ptr %15, align 8, !tbaa !5
  %197 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %196)
          to label %198 unwind label %243

198:                                              ; preds = %195
  store <2 x float> %197, ptr %40, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %27, i64 8, i1 false), !tbaa.struct !15
  %199 = load <2 x float>, ptr %40, align 4
  %200 = load <2 x float>, ptr %41, align 4
  %201 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %199, <2 x float> %200)
          to label %202 unwind label %243

202:                                              ; preds = %198
  store <2 x float> %201, ptr %39, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %43, ptr align 4 %38, i64 8, i1 false), !tbaa.struct !15
  %203 = load <2 x float>, ptr %43, align 4
  %204 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %39, <2 x float> %203)
          to label %205 unwind label %247

205:                                              ; preds = %202
  store float %204, ptr %42, align 4, !tbaa !11
  %206 = load float, ptr %42, align 4, !tbaa !11
  %207 = invoke noundef float @_ZSt3absf(float noundef %206)
          to label %208 unwind label %247

208:                                              ; preds = %205
  %209 = load float, ptr %21, align 4, !tbaa !11
  %210 = fcmp olt float %207, %209
  br i1 %210, label %211, label %256

211:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %37, i64 8, i1 false), !tbaa.struct !15
  %212 = load <2 x float>, ptr %45, align 4
  %213 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %39, <2 x float> %212)
          to label %214 unwind label %251

214:                                              ; preds = %211
  store float %213, ptr %44, align 4, !tbaa !11
  %215 = load float, ptr %44, align 4, !tbaa !11
  %216 = fcmp oge float %215, 0.000000e+00
  br i1 %216, label %217, label %255

217:                                              ; preds = %214
  %218 = load float, ptr %44, align 4, !tbaa !11
  %219 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %34)
          to label %220 unwind label %251

220:                                              ; preds = %217
  %221 = fcmp ole float %218, %219
  br i1 %221, label %222, label %255

222:                                              ; preds = %220
  %223 = load float, ptr %42, align 4, !tbaa !11
  %224 = invoke noundef float @_ZSt3absf(float noundef %223)
          to label %225 unwind label %251

225:                                              ; preds = %222
  store float %224, ptr %21, align 4, !tbaa !11
  %226 = load float, ptr %42, align 4, !tbaa !11
  store float %226, ptr %20, align 4, !tbaa !11
  %227 = load ptr, ptr %25, align 8, !tbaa !5
  %228 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 0) #11
  store ptr %227, ptr %228, align 8, !tbaa !5
  %229 = load ptr, ptr %26, align 8, !tbaa !5
  %230 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 1) #11
  store ptr %229, ptr %230, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %38, i64 8, i1 false), !tbaa.struct !15
  br label %255

231:                                              ; preds = %187
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %11, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %12, align 4
  br label %264

235:                                              ; preds = %191
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %11, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %12, align 4
  br label %263

239:                                              ; preds = %193
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %11, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %12, align 4
  br label %262

243:                                              ; preds = %198, %195
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %11, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %12, align 4
  br label %261

247:                                              ; preds = %205, %202
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %11, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %12, align 4
  br label %260

251:                                              ; preds = %222, %217, %211
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %11, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %260

255:                                              ; preds = %225, %220, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %256

256:                                              ; preds = %255, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %257

257:                                              ; preds = %256
  %258 = load i32, ptr %23, align 4, !tbaa !9
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %23, align 4, !tbaa !9
  br label %125, !llvm.loop !16

260:                                              ; preds = %251, %247
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  br label %261

261:                                              ; preds = %260, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %262

262:                                              ; preds = %261, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  br label %263

263:                                              ; preds = %262, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  br label %264

264:                                              ; preds = %263, %231
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  br label %265

265:                                              ; preds = %264, %183, %179
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #11
  br label %266

266:                                              ; preds = %265, %175
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  br label %647

267:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  %268 = load float, ptr %17, align 4, !tbaa !11
  %269 = invoke noundef float @_ZSt4sqrtf(float noundef %268)
          to label %270 unwind label %275

270:                                              ; preds = %267
  store float %269, ptr %46, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #11
  %271 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 0) #11
  %272 = load ptr, ptr %271, align 8, !tbaa !5
  %273 = icmp eq ptr %272, null
  br i1 %273, label %274, label %279

274:                                              ; preds = %270
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %316

275:                                              ; preds = %267
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %11, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %12, align 4
  br label %646

279:                                              ; preds = %270
  %280 = load float, ptr %46, align 4, !tbaa !11
  %281 = load float, ptr %21, align 4, !tbaa !11
  %282 = fcmp ogt float %280, %281
  br i1 %282, label %283, label %314

283:                                              ; preds = %279
  %284 = load float, ptr %20, align 4, !tbaa !11
  %285 = fcmp olt float %284, 0.000000e+00
  store i1 false, ptr %50, align 1
  br i1 %285, label %286, label %295

286:                                              ; preds = %283
  %287 = load ptr, ptr %15, align 8, !tbaa !5
  %288 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %287)
          to label %289 unwind label %301

289:                                              ; preds = %286
  store <2 x float> %288, ptr %48, align 4
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(24) %290)
          to label %291 unwind label %301

291:                                              ; preds = %289
  store i1 true, ptr %50, align 1
  %292 = load <2 x float>, ptr %48, align 4
  %293 = invoke noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float> %292, ptr noundef %49)
          to label %294 unwind label %305

294:                                              ; preds = %291
  br label %295

295:                                              ; preds = %294, %283
  %296 = phi i1 [ false, %283 ], [ %293, %294 ]
  %297 = load i1, ptr %50, align 1
  br i1 %297, label %298, label %299

298:                                              ; preds = %295
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #11
  br label %299

299:                                              ; preds = %298, %295
  br i1 %296, label %300, label %312

300:                                              ; preds = %299
  store i32 2, ptr %47, align 4, !tbaa !9
  br label %313

301:                                              ; preds = %473, %389, %322, %319, %289, %286
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %11, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %12, align 4
  br label %645

305:                                              ; preds = %291
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %11, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %12, align 4
  %309 = load i1, ptr %50, align 1
  br i1 %309, label %310, label %311

310:                                              ; preds = %305
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #11
  br label %311

311:                                              ; preds = %310, %305
  br label %645

312:                                              ; preds = %299
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %312, %300
  br label %315

314:                                              ; preds = %279
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %314, %313
  br label %316

316:                                              ; preds = %315, %274
  %317 = load i32, ptr %47, align 4, !tbaa !9
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %470

319:                                              ; preds = %316
  %320 = load ptr, ptr %15, align 8, !tbaa !5
  %321 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %320)
          to label %322 unwind label %301

322:                                              ; preds = %319
  store <2 x float> %321, ptr %51, align 4
  %323 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 8 dereferenceable(24) %323)
          to label %324 unwind label %301

324:                                              ; preds = %322
  %325 = load <2 x float>, ptr %51, align 4
  %326 = invoke noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float> %325, ptr noundef %52)
          to label %327 unwind label %361

327:                                              ; preds = %324
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #11
  br i1 %326, label %328, label %389

328:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #11
  %329 = load ptr, ptr %15, align 8, !tbaa !5
  %330 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %329)
          to label %331 unwind label %365

331:                                              ; preds = %328
  %332 = load float, ptr %46, align 4, !tbaa !11
  %333 = fadd float %330, %332
  store float %333, ptr %53, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %334 = load ptr, ptr %15, align 8, !tbaa !5
  %335 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %334)
          to label %336 unwind label %369

336:                                              ; preds = %331
  store <2 x float> %335, ptr %54, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  %337 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
          to label %338 unwind label %373

338:                                              ; preds = %336
  %339 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %337)
          to label %340 unwind label %373

340:                                              ; preds = %338
  %341 = getelementptr inbounds %"struct.QObjectPool<QCollision::Contact>::Node", ptr %339, i32 0, i32 0
  %342 = load ptr, ptr %341, align 8, !tbaa !18
  store ptr %342, ptr %55, align 8, !tbaa !5
  %343 = load ptr, ptr %55, align 8, !tbaa !5
  %344 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !15
  %345 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %346 unwind label %373

346:                                              ; preds = %340
  store <2 x float> %345, ptr %57, align 4
  %347 = load float, ptr %53, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %348, ptr %60, align 8, !tbaa !5
  %349 = getelementptr inbounds %"class.std::initializer_list", ptr %59, i32 0, i32 0
  store ptr %60, ptr %349, align 8, !tbaa !20
  %350 = getelementptr inbounds %"class.std::initializer_list", ptr %59, i32 0, i32 1
  store i64 1, ptr %350, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #11
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #11
  %351 = getelementptr inbounds { ptr, i64 }, ptr %59, i32 0, i32 0
  %352 = load ptr, ptr %351, align 8
  %353 = getelementptr inbounds { ptr, i64 }, ptr %59, i32 0, i32 1
  %354 = load i64, ptr %353, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr %352, i64 %354, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %355 unwind label %377

355:                                              ; preds = %346
  %356 = load <2 x float>, ptr %56, align 4
  %357 = load <2 x float>, ptr %57, align 4
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %343, ptr noundef %344, <2 x float> %356, <2 x float> %357, float noundef %347, ptr noundef %58)
          to label %358 unwind label %381

358:                                              ; preds = %355
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #11
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %359, ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %360 unwind label %373

360:                                              ; preds = %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %469

361:                                              ; preds = %324
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %11, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #11
  br label %645

365:                                              ; preds = %328
  %366 = landingpad { ptr, i32 }
          cleanup
  %367 = extractvalue { ptr, i32 } %366, 0
  store ptr %367, ptr %11, align 8
  %368 = extractvalue { ptr, i32 } %366, 1
  store i32 %368, ptr %12, align 4
  br label %388

369:                                              ; preds = %331
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %11, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %12, align 4
  br label %387

373:                                              ; preds = %358, %340, %338, %336
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %11, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %12, align 4
  br label %386

377:                                              ; preds = %346
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %11, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %12, align 4
  br label %385

381:                                              ; preds = %355
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %11, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #11
  br label %385

385:                                              ; preds = %381, %377
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %386

386:                                              ; preds = %385, %373
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %387

387:                                              ; preds = %386, %369
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %388

388:                                              ; preds = %387, %365
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %645

389:                                              ; preds = %327
  %390 = load float, ptr %46, align 4, !tbaa !11
  %391 = load ptr, ptr %15, align 8, !tbaa !5
  %392 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %391)
          to label %393 unwind label %301

393:                                              ; preds = %389
  %394 = fcmp olt float %390, %392
  br i1 %394, label %395, label %468

395:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %396 = load ptr, ptr %15, align 8, !tbaa !5
  %397 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %396)
          to label %398 unwind label %417

398:                                              ; preds = %395
  %399 = load float, ptr %46, align 4, !tbaa !11
  %400 = fsub float %397, %399
  store float %400, ptr %62, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #11
  %401 = load ptr, ptr %15, align 8, !tbaa !5
  %402 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %401)
          to label %403 unwind label %421

403:                                              ; preds = %398
  store <2 x float> %402, ptr %63, align 4
  %404 = load ptr, ptr %15, align 8, !tbaa !5
  %405 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %404)
          to label %406 unwind label %421

406:                                              ; preds = %403
  %407 = fcmp ogt float %405, 5.000000e-01
  br i1 %407, label %408, label %429

408:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  %409 = load ptr, ptr %15, align 8, !tbaa !5
  %410 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %409)
          to label %411 unwind label %425

411:                                              ; preds = %408
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %65, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !15
  %412 = load <2 x float>, ptr %65, align 4
  %413 = invoke <2 x float> @_Zmlf7QVector(float noundef %410, <2 x float> %412)
          to label %414 unwind label %425

414:                                              ; preds = %411
  store <2 x float> %413, ptr %64, align 4
  %415 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %63, ptr noundef nonnull align 4 dereferenceable(8) %64)
          to label %416 unwind label %425

416:                                              ; preds = %414
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  br label %429

417:                                              ; preds = %395
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %11, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %12, align 4
  br label %467

421:                                              ; preds = %403, %398
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %11, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %12, align 4
  br label %466

425:                                              ; preds = %414, %411, %408
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %11, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  br label %466

429:                                              ; preds = %416, %406
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  %430 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
          to label %431 unwind label %452

431:                                              ; preds = %429
  %432 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %430)
          to label %433 unwind label %452

433:                                              ; preds = %431
  %434 = getelementptr inbounds %"struct.QObjectPool<QCollision::Contact>::Node", ptr %432, i32 0, i32 0
  %435 = load ptr, ptr %434, align 8, !tbaa !18
  store ptr %435, ptr %66, align 8, !tbaa !5
  %436 = load ptr, ptr %66, align 8, !tbaa !5
  %437 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %63, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %68, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !15
  %438 = load float, ptr %62, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #11
  %439 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %439, ptr %71, align 8, !tbaa !5
  %440 = getelementptr inbounds %"class.std::initializer_list", ptr %70, i32 0, i32 0
  store ptr %71, ptr %440, align 8, !tbaa !20
  %441 = getelementptr inbounds %"class.std::initializer_list", ptr %70, i32 0, i32 1
  store i64 1, ptr %441, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %72) #11
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72) #11
  %442 = getelementptr inbounds { ptr, i64 }, ptr %70, i32 0, i32 0
  %443 = load ptr, ptr %442, align 8
  %444 = getelementptr inbounds { ptr, i64 }, ptr %70, i32 0, i32 1
  %445 = load i64, ptr %444, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %69, ptr %443, i64 %445, ptr noundef nonnull align 1 dereferenceable(1) %72)
          to label %446 unwind label %456

446:                                              ; preds = %433
  %447 = load <2 x float>, ptr %67, align 4
  %448 = load <2 x float>, ptr %68, align 4
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %436, ptr noundef %437, <2 x float> %447, <2 x float> %448, float noundef %438, ptr noundef %69)
          to label %449 unwind label %460

449:                                              ; preds = %446
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #11
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %450, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %451 unwind label %452

451:                                              ; preds = %449
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %468

452:                                              ; preds = %449, %431, %429
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %11, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %12, align 4
  br label %465

456:                                              ; preds = %433
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %11, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %12, align 4
  br label %464

460:                                              ; preds = %446
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %11, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #11
  br label %464

464:                                              ; preds = %460, %456
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %72) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %465

465:                                              ; preds = %464, %452
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %466

466:                                              ; preds = %465, %425, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  br label %467

467:                                              ; preds = %466, %417
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %645

468:                                              ; preds = %451, %393
  br label %469

469:                                              ; preds = %468, %360
  br label %641

470:                                              ; preds = %316
  %471 = load i32, ptr %47, align 4, !tbaa !9
  %472 = icmp eq i32 %471, 1
  br i1 %472, label %473, label %558

473:                                              ; preds = %470
  %474 = load float, ptr %20, align 4, !tbaa !11
  %475 = load ptr, ptr %15, align 8, !tbaa !5
  %476 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %475)
          to label %477 unwind label %301

477:                                              ; preds = %473
  %478 = fcmp olt float %474, %476
  br i1 %478, label %479, label %557

479:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #11
  %480 = load ptr, ptr %15, align 8, !tbaa !5
  %481 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %480)
          to label %482 unwind label %501

482:                                              ; preds = %479
  %483 = load float, ptr %20, align 4, !tbaa !11
  %484 = fsub float %481, %483
  store float %484, ptr %73, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #11
  %485 = load ptr, ptr %15, align 8, !tbaa !5
  %486 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %485)
          to label %487 unwind label %505

487:                                              ; preds = %482
  store <2 x float> %486, ptr %74, align 4
  %488 = load ptr, ptr %15, align 8, !tbaa !5
  %489 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %488)
          to label %490 unwind label %505

490:                                              ; preds = %487
  %491 = fcmp ogt float %489, 5.000000e-01
  br i1 %491, label %492, label %513

492:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #11
  %493 = load ptr, ptr %15, align 8, !tbaa !5
  %494 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %493)
          to label %495 unwind label %509

495:                                              ; preds = %492
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %76, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !15
  %496 = load <2 x float>, ptr %76, align 4
  %497 = invoke <2 x float> @_Zmlf7QVector(float noundef %494, <2 x float> %496)
          to label %498 unwind label %509

498:                                              ; preds = %495
  store <2 x float> %497, ptr %75, align 4
  %499 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %74, ptr noundef nonnull align 4 dereferenceable(8) %75)
          to label %500 unwind label %509

500:                                              ; preds = %498
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #11
  br label %513

501:                                              ; preds = %479
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %11, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %12, align 4
  br label %556

505:                                              ; preds = %487, %482
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %11, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %12, align 4
  br label %555

509:                                              ; preds = %498, %495, %492
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %11, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #11
  br label %555

513:                                              ; preds = %500, %490
  call void @llvm.lifetime.start.p0(i64 24, ptr %77) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %79) #11
  %514 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 0) #11
  %515 = load ptr, ptr %514, align 8, !tbaa !5
  store ptr %515, ptr %79, align 8, !tbaa !5
  %516 = getelementptr inbounds ptr, ptr %79, i64 1
  %517 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 1) #11
  %518 = load ptr, ptr %517, align 8, !tbaa !5
  store ptr %518, ptr %516, align 8, !tbaa !5
  %519 = getelementptr inbounds %"class.std::initializer_list", ptr %78, i32 0, i32 0
  store ptr %79, ptr %519, align 8, !tbaa !20
  %520 = getelementptr inbounds %"class.std::initializer_list", ptr %78, i32 0, i32 1
  store i64 2, ptr %520, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %80) #11
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #11
  %521 = getelementptr inbounds { ptr, i64 }, ptr %78, i32 0, i32 0
  %522 = load ptr, ptr %521, align 8
  %523 = getelementptr inbounds { ptr, i64 }, ptr %78, i32 0, i32 1
  %524 = load i64, ptr %523, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %77, ptr %522, i64 %524, ptr noundef nonnull align 1 dereferenceable(1) %80)
          to label %525 unwind label %541

525:                                              ; preds = %513
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %79) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #11
  %526 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
          to label %527 unwind label %545

527:                                              ; preds = %525
  %528 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %526)
          to label %529 unwind label %545

529:                                              ; preds = %527
  %530 = getelementptr inbounds %"struct.QObjectPool<QCollision::Contact>::Node", ptr %528, i32 0, i32 0
  %531 = load ptr, ptr %530, align 8, !tbaa !18
  store ptr %531, ptr %81, align 8, !tbaa !5
  %532 = load ptr, ptr %81, align 8, !tbaa !5
  %533 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %82, ptr align 4 %74, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !15
  %534 = load float, ptr %73, align 4, !tbaa !11
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %84, ptr noundef nonnull align 8 dereferenceable(24) %77)
          to label %535 unwind label %545

535:                                              ; preds = %529
  %536 = load <2 x float>, ptr %82, align 4
  %537 = load <2 x float>, ptr %83, align 4
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %532, ptr noundef %533, <2 x float> %536, <2 x float> %537, float noundef %534, ptr noundef %84)
          to label %538 unwind label %549

538:                                              ; preds = %535
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %84) #11
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %539, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %540 unwind label %545

540:                                              ; preds = %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %77) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  br label %557

541:                                              ; preds = %513
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %11, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %80) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %79) #11
  br label %554

545:                                              ; preds = %538, %529, %527, %525
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %11, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %12, align 4
  br label %553

549:                                              ; preds = %535
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %11, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %84) #11
  br label %553

553:                                              ; preds = %549, %545
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %77) #11
  br label %554

554:                                              ; preds = %553, %541
  call void @llvm.lifetime.end.p0(i64 24, ptr %77) #11
  br label %555

555:                                              ; preds = %554, %509, %505
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  br label %556

556:                                              ; preds = %555, %501
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  br label %645

557:                                              ; preds = %540, %477
  br label %640

558:                                              ; preds = %470
  %559 = load i32, ptr %47, align 4, !tbaa !9
  %560 = icmp eq i32 %559, 2
  br i1 %560, label %561, label %639

561:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #11
  %562 = load ptr, ptr %15, align 8, !tbaa !5
  %563 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %562)
          to label %564 unwind label %583

564:                                              ; preds = %561
  %565 = load float, ptr %20, align 4, !tbaa !11
  %566 = fsub float %563, %565
  store float %566, ptr %85, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #11
  %567 = load ptr, ptr %15, align 8, !tbaa !5
  %568 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %567)
          to label %569 unwind label %587

569:                                              ; preds = %564
  store <2 x float> %568, ptr %86, align 4
  %570 = load ptr, ptr %15, align 8, !tbaa !5
  %571 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %570)
          to label %572 unwind label %587

572:                                              ; preds = %569
  %573 = fcmp ogt float %571, 5.000000e-01
  br i1 %573, label %574, label %595

574:                                              ; preds = %572
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #11
  %575 = load ptr, ptr %15, align 8, !tbaa !5
  %576 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %575)
          to label %577 unwind label %591

577:                                              ; preds = %574
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !15
  %578 = load <2 x float>, ptr %88, align 4
  %579 = invoke <2 x float> @_Zmlf7QVector(float noundef %576, <2 x float> %578)
          to label %580 unwind label %591

580:                                              ; preds = %577
  store <2 x float> %579, ptr %87, align 4
  %581 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %86, ptr noundef nonnull align 4 dereferenceable(8) %87)
          to label %582 unwind label %591

582:                                              ; preds = %580
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  br label %595

583:                                              ; preds = %561
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %11, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %12, align 4
  br label %638

587:                                              ; preds = %569, %564
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %11, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %12, align 4
  br label %637

591:                                              ; preds = %580, %577, %574
  %592 = landingpad { ptr, i32 }
          cleanup
  %593 = extractvalue { ptr, i32 } %592, 0
  store ptr %593, ptr %11, align 8
  %594 = extractvalue { ptr, i32 } %592, 1
  store i32 %594, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  br label %637

595:                                              ; preds = %582, %572
  call void @llvm.lifetime.start.p0(i64 24, ptr %89) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %91) #11
  %596 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 0) #11
  %597 = load ptr, ptr %596, align 8, !tbaa !5
  store ptr %597, ptr %91, align 8, !tbaa !5
  %598 = getelementptr inbounds ptr, ptr %91, i64 1
  %599 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 1) #11
  %600 = load ptr, ptr %599, align 8, !tbaa !5
  store ptr %600, ptr %598, align 8, !tbaa !5
  %601 = getelementptr inbounds %"class.std::initializer_list", ptr %90, i32 0, i32 0
  store ptr %91, ptr %601, align 8, !tbaa !20
  %602 = getelementptr inbounds %"class.std::initializer_list", ptr %90, i32 0, i32 1
  store i64 2, ptr %602, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #11
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #11
  %603 = getelementptr inbounds { ptr, i64 }, ptr %90, i32 0, i32 0
  %604 = load ptr, ptr %603, align 8
  %605 = getelementptr inbounds { ptr, i64 }, ptr %90, i32 0, i32 1
  %606 = load i64, ptr %605, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %89, ptr %604, i64 %606, ptr noundef nonnull align 1 dereferenceable(1) %92)
          to label %607 unwind label %623

607:                                              ; preds = %595
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #11
  %608 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
          to label %609 unwind label %627

609:                                              ; preds = %607
  %610 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %608)
          to label %611 unwind label %627

611:                                              ; preds = %609
  %612 = getelementptr inbounds %"struct.QObjectPool<QCollision::Contact>::Node", ptr %610, i32 0, i32 0
  %613 = load ptr, ptr %612, align 8, !tbaa !18
  store ptr %613, ptr %93, align 8, !tbaa !5
  %614 = load ptr, ptr %93, align 8, !tbaa !5
  %615 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %94, ptr align 4 %86, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %95, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !15
  %616 = load float, ptr %85, align 4, !tbaa !11
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 8 dereferenceable(24) %89)
          to label %617 unwind label %627

617:                                              ; preds = %611
  %618 = load <2 x float>, ptr %94, align 4
  %619 = load <2 x float>, ptr %95, align 4
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %614, ptr noundef %615, <2 x float> %618, <2 x float> %619, float noundef %616, ptr noundef %96)
          to label %620 unwind label %631

620:                                              ; preds = %617
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %96) #11
  %621 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %621, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %622 unwind label %627

622:                                              ; preds = %620
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #11
  br label %639

623:                                              ; preds = %595
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %11, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %91) #11
  br label %636

627:                                              ; preds = %620, %611, %609, %607
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %11, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %12, align 4
  br label %635

631:                                              ; preds = %617
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %11, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %12, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %96) #11
  br label %635

635:                                              ; preds = %631, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #11
  br label %636

636:                                              ; preds = %635, %623
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #11
  br label %637

637:                                              ; preds = %636, %591, %587
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #11
  br label %638

638:                                              ; preds = %637, %583
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #11
  br label %645

639:                                              ; preds = %622, %558
  br label %640

640:                                              ; preds = %639, %557
  br label %641

641:                                              ; preds = %640, %469
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  br label %642

642:                                              ; preds = %641
  %643 = load i32, ptr %13, align 4, !tbaa !9
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %13, align 4, !tbaa !9
  br label %105, !llvm.loop !23

645:                                              ; preds = %638, %556, %467, %388, %361, %311, %301
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %646

646:                                              ; preds = %645, %275
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  br label %647

647:                                              ; preds = %646, %266, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #11
  br label %648

648:                                              ; preds = %647, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #11
  br label %650

649:                                              ; preds = %109
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  ret void

650:                                              ; preds = %648, %110
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  br label %651

651:                                              ; preds = %650
  %652 = load ptr, ptr %11, align 8
  %653 = load i32, ptr %12, align 4
  %654 = insertvalue { ptr, i32 } poison, ptr %652, 0
  %655 = insertvalue { ptr, i32 } %654, i32 %653, 1
  resume { ptr, i32 } %655
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #10

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !6, i64 0}
!19 = !{!"_ZTSN11QObjectPoolIN10QCollision7ContactEE4NodeE", !6, i64 0, !10, i64 8, !10, i64 12}
!20 = !{!21, !6, i64 0}
!21 = !{!"_ZTSSt16initializer_listIP9QParticleE", !6, i64 0, !14, i64 8}
!22 = !{!21, !14, i64 8}
!23 = distinct !{!23, !17}


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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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 }
%struct.QVector = type { float, float }
%"struct.std::array" = type { [2 x ptr] }
%"class.std::allocator.2" = type { i8 }

@_ZN6QWorld14MAX_WORLD_SIZEE = external dso_local local_unnamed_addr global float, align 4

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #1 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 #1 align 2

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float>, ptr noundef) local_unnamed_addr #4 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 #8 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10QCollision16CircleAndPolygonERSt6vectorIP9QParticleSaIS2_EES5_RS0_IPNS_7ContactESaIS7_EE(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %2) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca %"class.std::vector.0", align 8
  %6 = alloca %struct.QVector, align 8
  %7 = alloca %"struct.std::array", align 8
  %8 = alloca %struct.QVector, align 8
  %9 = alloca %struct.QVector, align 8
  %10 = alloca %struct.QVector, align 8
  %11 = alloca %struct.QVector, align 8
  %12 = alloca %struct.QVector, align 8
  %13 = alloca %"class.std::vector.0", align 8
  %14 = alloca %"class.std::vector.0", align 8
  %15 = alloca ptr, align 8
  %16 = alloca %"class.std::vector.0", align 8
  %17 = alloca [1 x ptr], align 8
  %18 = alloca %"class.std::allocator.2", align 1
  %19 = alloca %struct.QVector, align 8
  %20 = alloca %struct.QVector, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::vector.0", align 8
  %23 = alloca [1 x ptr], align 8
  %24 = alloca %"class.std::allocator.2", align 1
  %25 = alloca %struct.QVector, align 8
  %26 = alloca %struct.QVector, align 8
  %27 = alloca %"class.std::vector.0", align 8
  %28 = alloca [2 x ptr], align 8
  %29 = alloca %"class.std::allocator.2", align 1
  %30 = alloca ptr, align 8
  %31 = alloca %"class.std::vector.0", align 8
  %32 = alloca %struct.QVector, align 8
  %33 = alloca %struct.QVector, align 8
  %34 = alloca %"class.std::vector.0", align 8
  %35 = alloca [2 x ptr], align 8
  %36 = alloca %"class.std::allocator.2", align 1
  %37 = alloca ptr, align 8
  %38 = alloca %"class.std::vector.0", align 8
  %39 = tail call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %40 = trunc i64 %39 to i32
  %41 = tail call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  call void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %1)
  invoke void @_ZN10QCollision24ParticlePolygonToPolygonESt6vectorIP9QParticleSaIS2_EE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %4, ptr noundef nonnull %5)
          to label %42 unwind label %49

42:                                               ; preds = %3
  %43 = trunc i64 %41 to i32
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %.lr.ph226, label %._crit_edge227

.lr.ph226:                                        ; preds = %42
  %45 = icmp sgt i32 %40, 0
  %46 = getelementptr inbounds i8, ptr %28, i64 8
  %47 = getelementptr inbounds i8, ptr %35, i64 8
  %48 = and i64 %39, 4294967295
  %wide.trip.count242 = and i64 %41, 2147483647
  br label %51

._crit_edge227:                                   ; preds = %269, %42
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  ret void

49:                                               ; preds = %3
  %50 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #10
  br label %272

51:                                               ; preds = %.lr.ph226, %269
  %indvars.iv239 = phi i64 [ 0, %.lr.ph226 ], [ %indvars.iv.next240, %269 ]
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %indvars.iv239) #10
  %53 = load ptr, ptr %52, align 8, !tbaa !5
  %54 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  invoke void @_ZN7QVectorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %6)
          to label %55 unwind label %62

55:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %7, i8 0, i64 16, i1 false)
  %56 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  invoke void @_ZN7QVectorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %8)
          to label %.preheader unwind label %64

.preheader:                                       ; preds = %55
  br i1 %45, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %121, %.preheader
  %.0146.lcssa = phi float [ %56, %.preheader ], [ %.2148, %121 ]
  %.0143.lcssa = phi float [ %56, %.preheader ], [ %.2145, %121 ]
  %.0141.lcssa = phi float [ %54, %.preheader ], [ %.1142, %121 ]
  %.0139.lcssa = phi ptr [ null, %.preheader ], [ %.1140, %121 ]
  %57 = call noundef float @_ZSt4sqrtf(float noundef %.0141.lcssa)
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 0) #10
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  %60 = icmp ne ptr %59, null
  %61 = fcmp ogt float %57, %.0146.lcssa
  %or.cond = select i1 %60, i1 %61, i1 false
  br i1 %or.cond, label %126, label %137

62:                                               ; preds = %51
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %271

64:                                               ; preds = %55
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %270

.lr.ph:                                           ; preds = %.preheader, %121
  %indvars.iv = phi i64 [ %indvars.iv.next, %121 ], [ 0, %.preheader ]
  %.0139220 = phi ptr [ %.1140, %121 ], [ null, %.preheader ]
  %.0141219 = phi float [ %.1142, %121 ], [ %54, %.preheader ]
  %.0143218 = phi float [ %.2145, %121 ], [ %56, %.preheader ]
  %.0146217 = phi float [ %.2148, %121 ], [ %56, %.preheader ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %66 = icmp eq i64 %indvars.iv.next, %48
  %67 = and i64 %indvars.iv.next, 4294967295
  %68 = select i1 %66, i64 0, i64 %67
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv) #10
  %70 = load ptr, ptr %69, align 8, !tbaa !5
  %71 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %68) #10
  %72 = load ptr, ptr %71, align 8, !tbaa !5
  %73 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv) #10
  %.sroa.050.0.copyload = load <2 x float>, ptr %73, align 4
  %74 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %68) #10
  %.sroa.049.0.copyload = load <2 x float>, ptr %74, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %75 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %76 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %75, <2 x float> %.sroa.050.0.copyload)
          to label %77 unwind label %83

77:                                               ; preds = %.lr.ph
  store <2 x float> %76, ptr %9, align 8
  %78 = call noundef float @_ZNK7QVector13LengthSquaredEv(ptr noundef nonnull align 4 dereferenceable(8) %9)
  %79 = fcmp olt float %78, %.0141219
  br i1 %79, label %80, label %87

80:                                               ; preds = %77
  %81 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %9)
          to label %82 unwind label %85

82:                                               ; preds = %80
  store <2 x float> %81, ptr %6, align 8
  br label %87

83:                                               ; preds = %.lr.ph
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %125

85:                                               ; preds = %80
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %125

87:                                               ; preds = %82, %77
  %.1142 = phi float [ %78, %82 ], [ %.0141219, %77 ]
  %.1140 = phi ptr [ %70, %82 ], [ %.0139220, %77 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %88 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %.sroa.049.0.copyload, <2 x float> %.sroa.050.0.copyload)
          to label %89 unwind label %111

89:                                               ; preds = %87
  store <2 x float> %88, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  %90 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %10)
          to label %91 unwind label %113

91:                                               ; preds = %89
  store <2 x float> %90, ptr %11, align 8
  %92 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %11)
          to label %93 unwind label %115

93:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %94 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %95 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %94, <2 x float> %.sroa.050.0.copyload)
          to label %96 unwind label %117

96:                                               ; preds = %93
  store <2 x float> %95, ptr %12, align 8
  %97 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %12, <2 x float> %92)
  %98 = call noundef float @_ZSt3absf(float noundef %97)
  %99 = fcmp olt float %98, %.0146217
  br i1 %99, label %100, label %121

100:                                              ; preds = %96
  %.sroa.032.0.copyload = load <2 x float>, ptr %11, align 8
  %101 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %12, <2 x float> %.sroa.032.0.copyload)
  %102 = fcmp ult float %101, 0.000000e+00
  br i1 %102, label %121, label %103

103:                                              ; preds = %100
  %104 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %10)
          to label %105 unwind label %119

105:                                              ; preds = %103
  %106 = fcmp ugt float %101, %104
  br i1 %106, label %121, label %107

107:                                              ; preds = %105
  %108 = call noundef float @_ZSt3absf(float noundef %97)
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 0) #10
  store ptr %70, ptr %109, align 8, !tbaa !5
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 1) #10
  store ptr %72, ptr %110, align 8, !tbaa !5
  store <2 x float> %92, ptr %8, align 8
  br label %121

111:                                              ; preds = %87
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %124

113:                                              ; preds = %89
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %123

115:                                              ; preds = %91
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %123

117:                                              ; preds = %93
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %122

119:                                              ; preds = %103
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %122

121:                                              ; preds = %100, %105, %107, %96
  %.2148 = phi float [ %.0146217, %96 ], [ %108, %107 ], [ %.0146217, %105 ], [ %.0146217, %100 ]
  %.2145 = phi float [ %.0143218, %96 ], [ %97, %107 ], [ %.0143218, %105 ], [ %.0143218, %100 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  %exitcond.not = icmp eq i64 %indvars.iv.next, %48
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !11

122:                                              ; preds = %119, %117
  %.pn173 = phi { ptr, i32 } [ %120, %119 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %123

123:                                              ; preds = %115, %122, %113
  %.pn173.pn.pn = phi { ptr, i32 } [ %114, %113 ], [ %.pn173, %122 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %124

124:                                              ; preds = %123, %111
  %.pn173.pn.pn.pn = phi { ptr, i32 } [ %.pn173.pn.pn, %123 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  br label %125

125:                                              ; preds = %85, %124, %83
  %.pn173.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %84, %83 ], [ %.pn173.pn.pn.pn, %124 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %270

126:                                              ; preds = %._crit_edge
  %127 = fcmp olt float %.0143.lcssa, 0.000000e+00
  br i1 %127, label %128, label %.thread183

128:                                              ; preds = %126
  %129 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %130 unwind label %133

130:                                              ; preds = %128
  %131 = invoke noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float> %129, ptr noundef nonnull %13)
          to label %132 unwind label %135

132:                                              ; preds = %130
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  br i1 %131, label %234, label %.thread183

133:                                              ; preds = %137, %128
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %270

135:                                              ; preds = %130
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  br label %270

137:                                              ; preds = %._crit_edge
  %138 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %139 unwind label %133

139:                                              ; preds = %137
  %140 = invoke noundef zeroext i1 @_ZN10QCollision16PointInPolygonWNE7QVectorSt6vectorIP9QParticleSaIS3_EE(<2 x float> %138, ptr noundef nonnull %14)
          to label %141 unwind label %155

141:                                              ; preds = %139
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %142 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  br i1 %140, label %143, label %165

143:                                              ; preds = %141
  %144 = fadd float %57, %142
  %145 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %146 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  %147 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %146)
          to label %148 unwind label %157

148:                                              ; preds = %143
  %149 = load ptr, ptr %147, align 8, !tbaa !13
  store ptr %149, ptr %15, align 8, !tbaa !5
  %150 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %6)
          to label %151 unwind label %157

151:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  store ptr %.0139.lcssa, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #10
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr nonnull %17, i64 1, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %152 unwind label %159

152:                                              ; preds = %151
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %149, ptr noundef nonnull %53, <2 x float> %145, <2 x float> %150, float noundef %144, ptr noundef nonnull %16)
          to label %153 unwind label %161

153:                                              ; preds = %152
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %154 unwind label %157

154:                                              ; preds = %153
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  br label %269

155:                                              ; preds = %139
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  br label %270

157:                                              ; preds = %153, %148, %143
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %164

159:                                              ; preds = %151
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %152
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  br label %163

163:                                              ; preds = %161, %159
  %.pn168 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  br label %164

164:                                              ; preds = %163, %157
  %.pn170 = phi { ptr, i32 } [ %158, %157 ], [ %.pn168, %163 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  br label %270

165:                                              ; preds = %141
  %166 = fcmp olt float %57, %142
  br i1 %166, label %167, label %269

167:                                              ; preds = %165
  %168 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %169 = fsub float %168, %57
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  %170 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  store <2 x float> %170, ptr %19, align 8
  %171 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %172 = fcmp ogt float %171, 5.000000e-01
  br i1 %172, label %173, label %180

173:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  %174 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %.sroa.014.0.copyload = load <2 x float>, ptr %6, align 8
  %175 = invoke <2 x float> @_Zmlf7QVector(float noundef %174, <2 x float> %.sroa.014.0.copyload)
          to label %176 unwind label %178

176:                                              ; preds = %173
  store <2 x float> %175, ptr %20, align 8
  %177 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 4 dereferenceable(8) %20)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br label %180

178:                                              ; preds = %173
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br label %196

180:                                              ; preds = %176, %167
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  %181 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  %182 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %181)
          to label %183 unwind label %188

183:                                              ; preds = %180
  %184 = load ptr, ptr %182, align 8, !tbaa !13
  store ptr %184, ptr %21, align 8, !tbaa !5
  %.sroa.013.0.copyload = load <2 x float>, ptr %19, align 8
  %.sroa.012.0.copyload = load <2 x float>, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  store ptr %.0139.lcssa, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #10
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr nonnull %23, i64 1, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %185 unwind label %190

185:                                              ; preds = %183
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %184, ptr noundef nonnull %53, <2 x float> %.sroa.013.0.copyload, <2 x float> %.sroa.012.0.copyload, float noundef %169, ptr noundef nonnull %22)
          to label %186 unwind label %192

186:                                              ; preds = %185
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %187 unwind label %188

187:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  br label %269

188:                                              ; preds = %186, %180
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %195

190:                                              ; preds = %183
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %194

192:                                              ; preds = %185
  %193 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  br label %194

194:                                              ; preds = %192, %190
  %.pn163 = phi { ptr, i32 } [ %193, %192 ], [ %191, %190 ]
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  br label %195

195:                                              ; preds = %194, %188
  %.pn165 = phi { ptr, i32 } [ %189, %188 ], [ %.pn163, %194 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %196

196:                                              ; preds = %195, %178
  %.pn165.pn = phi { ptr, i32 } [ %.pn165, %195 ], [ %179, %178 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  br label %270

.thread183:                                       ; preds = %126, %132
  %197 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %198 = fcmp olt float %.0143.lcssa, %197
  br i1 %198, label %199, label %269

199:                                              ; preds = %.thread183
  %200 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %201 = fsub float %200, %.0143.lcssa
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  %202 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  store <2 x float> %202, ptr %25, align 8
  %203 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %204 = fcmp ogt float %203, 5.000000e-01
  br i1 %204, label %205, label %212

205:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  %206 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %.sroa.08.0.copyload = load <2 x float>, ptr %8, align 8
  %207 = invoke <2 x float> @_Zmlf7QVector(float noundef %206, <2 x float> %.sroa.08.0.copyload)
          to label %208 unwind label %210

208:                                              ; preds = %205
  store <2 x float> %207, ptr %26, align 8
  %209 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %25, ptr noundef nonnull align 4 dereferenceable(8) %26)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br label %212

210:                                              ; preds = %205
  %211 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br label %233

212:                                              ; preds = %208, %199
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #10
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 0) #10
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  store ptr %214, ptr %28, align 8, !tbaa !5
  %215 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 1) #10
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  store ptr %216, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %29) #10
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #10
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr nonnull %28, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %217 unwind label %225

217:                                              ; preds = %212
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #10
  %218 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  %219 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %218)
          to label %220 unwind label %227

220:                                              ; preds = %217
  %221 = load ptr, ptr %219, align 8, !tbaa !13
  store ptr %221, ptr %30, align 8, !tbaa !5
  %.sroa.05.0.copyload = load <2 x float>, ptr %25, align 8
  %.sroa.04.0.copyload = load <2 x float>, ptr %8, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %222 unwind label %227

222:                                              ; preds = %220
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %221, ptr noundef nonnull %53, <2 x float> %.sroa.05.0.copyload, <2 x float> %.sroa.04.0.copyload, float noundef %201, ptr noundef nonnull %31)
          to label %223 unwind label %229

223:                                              ; preds = %222
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #10
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %224 unwind label %227

224:                                              ; preds = %223
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #10
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %269

225:                                              ; preds = %212
  %226 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #10
  br label %232

227:                                              ; preds = %223, %220, %217
  %228 = landingpad { ptr, i32 }
          cleanup
  br label %231

229:                                              ; preds = %222
  %230 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #10
  br label %231

231:                                              ; preds = %229, %227
  %.pn159 = phi { ptr, i32 } [ %228, %227 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #10
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  br label %232

232:                                              ; preds = %231, %225
  %.pn159.pn = phi { ptr, i32 } [ %.pn159, %231 ], [ %226, %225 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #10
  br label %233

233:                                              ; preds = %232, %210
  %.pn159.pn.pn = phi { ptr, i32 } [ %.pn159.pn, %232 ], [ %211, %210 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %270

234:                                              ; preds = %132
  %235 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %236 = fsub float %235, %.0143.lcssa
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #10
  %237 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  store <2 x float> %237, ptr %32, align 8
  %238 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %239 = fcmp ogt float %238, 5.000000e-01
  br i1 %239, label %240, label %247

240:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  %241 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %53)
  %.sroa.03.0.copyload = load <2 x float>, ptr %8, align 8
  %242 = invoke <2 x float> @_Zmlf7QVector(float noundef %241, <2 x float> %.sroa.03.0.copyload)
          to label %243 unwind label %245

243:                                              ; preds = %240
  store <2 x float> %242, ptr %33, align 8
  %244 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %32, ptr noundef nonnull align 4 dereferenceable(8) %33)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  br label %247

245:                                              ; preds = %240
  %246 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  br label %268

247:                                              ; preds = %243, %234
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #10
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 0) #10
  %249 = load ptr, ptr %248, align 8, !tbaa !5
  store ptr %249, ptr %35, align 8, !tbaa !5
  %250 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt5arrayIP9QParticleLm2EEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 1) #10
  %251 = load ptr, ptr %250, align 8, !tbaa !5
  store ptr %251, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #10
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #10
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr nonnull %35, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %252 unwind label %260

252:                                              ; preds = %247
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #10
  %253 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
  %254 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %253)
          to label %255 unwind label %262

255:                                              ; preds = %252
  %256 = load ptr, ptr %254, align 8, !tbaa !13
  store ptr %256, ptr %37, align 8, !tbaa !5
  %.sroa.01.0.copyload = load <2 x float>, ptr %32, align 8
  %.sroa.0.0.copyload = load <2 x float>, ptr %8, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %257 unwind label %262

257:                                              ; preds = %255
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %256, ptr noundef nonnull %53, <2 x float> %.sroa.01.0.copyload, <2 x float> %.sroa.0.0.copyload, float noundef %236, ptr noundef nonnull %38)
          to label %258 unwind label %264

258:                                              ; preds = %257
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #10
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %259 unwind label %262

259:                                              ; preds = %258
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #10
  br label %269

260:                                              ; preds = %247
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #10
  br label %267

262:                                              ; preds = %258, %255, %252
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %266

264:                                              ; preds = %257
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #10
  br label %266

266:                                              ; preds = %264, %262
  %.pn = phi { ptr, i32 } [ %263, %262 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  br label %267

267:                                              ; preds = %266, %260
  %.pn.pn = phi { ptr, i32 } [ %.pn, %266 ], [ %261, %260 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #10
  br label %268

268:                                              ; preds = %267, %245
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %267 ], [ %246, %245 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #10
  br label %270

269:                                              ; preds = %224, %.thread183, %259, %154, %187, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  %indvars.iv.next240 = add nuw nsw i64 %indvars.iv239, 1
  %exitcond243.not = icmp eq i64 %indvars.iv.next240, %wide.trip.count242
  br i1 %exitcond243.not, label %._crit_edge227, label %51, !llvm.loop !16

270:                                              ; preds = %133, %155, %164, %196, %233, %268, %135, %125, %64
  %.pn173.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn173.pn.pn.pn.pn.pn, %125 ], [ %65, %64 ], [ %.pn170, %164 ], [ %.pn165.pn, %196 ], [ %156, %155 ], [ %134, %133 ], [ %.pn159.pn.pn, %233 ], [ %.pn.pn.pn, %268 ], [ %136, %135 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #10
  br label %271

271:                                              ; preds = %270, %62
  %.pn173.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn173.pn.pn.pn.pn.pn.pn, %270 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  br label %272

272:                                              ; preds = %271, %49
  %.pn173.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn173.pn.pn.pn.pn.pn.pn.pn, %271 ], [ %50, %49 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  resume { ptr, i32 } %.pn173.pn.pn.pn.pn.pn.pn.pn.pn
}

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSN11QObjectPoolIN10QCollision7ContactEE4NodeE", !6, i64 0, !15, i64 8, !15, i64 12}
!15 = !{!"int", !7, i64 0}
!16 = distinct !{!16, !12}


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