; 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 }
%struct.QVector = type { float, float }
%"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 }
%"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: mustprogress uwtable
define dso_local void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_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) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector", align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %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 ptr, align 8
  %18 = alloca %struct.QVector, align 4
  %19 = alloca %struct.QVector, align 4
  %20 = alloca %struct.QVector, align 4
  %21 = alloca %struct.QVector, align 4
  %22 = alloca %struct.QVector, align 4
  %23 = alloca %struct.QVector, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.QVector, align 4
  %26 = alloca float, align 4
  %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 %struct.QVector, align 4
  %33 = alloca float, align 4
  %34 = alloca i8, align 1
  %35 = alloca i32, 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 %struct.QVector, align 4
  %43 = alloca %struct.QVector, align 4
  %44 = alloca %struct.QVector, align 4
  %45 = alloca %struct.QVector, align 4
  %46 = alloca float, align 4
  %47 = alloca %struct.QVector, align 4
  %48 = alloca %struct.QVector, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca %struct.QVector, align 4
  %54 = alloca %struct.QVector, align 4
  %55 = alloca %struct.QVector, align 4
  %56 = alloca %struct.QVector, align 4
  %57 = alloca %struct.QVector, align 4
  %58 = alloca %struct.QVector, align 4
  %59 = alloca %struct.QVector, align 4
  %60 = alloca %struct.QVector, align 4
  %61 = alloca %struct.QVector, align 4
  %62 = alloca %struct.QVector, align 4
  %63 = alloca %struct.QVector, align 4
  %64 = alloca %struct.QVector, align 4
  %65 = alloca %struct.QVector, align 4
  %66 = alloca %struct.QVector, align 4
  %67 = alloca %struct.QVector, align 4
  %68 = alloca %struct.QVector, align 4
  %69 = alloca i32, align 4
  %70 = alloca %struct.QVector, align 4
  %71 = alloca ptr, align 8
  %72 = alloca %struct.QVector, align 4
  %73 = alloca %struct.QVector, align 4
  %74 = alloca %struct.QVector, align 4
  %75 = alloca %struct.QVector, align 4
  %76 = alloca %struct.QVector, align 4
  %77 = alloca %struct.QVector, align 4
  %78 = alloca %struct.QVector, align 4
  %79 = alloca %struct.QVector, align 4
  %80 = alloca %struct.QVector, align 4
  %81 = alloca %struct.QVector, align 4
  %82 = alloca %struct.QVector, align 4
  %83 = alloca %struct.QVector, align 4
  %84 = alloca %struct.QVector, align 4
  %85 = alloca %struct.QVector, align 4
  %86 = alloca float, align 4
  %87 = alloca %struct.QVector, align 4
  %88 = alloca ptr, align 8
  %89 = alloca %struct.QVector, align 4
  %90 = alloca %struct.QVector, align 4
  %91 = alloca %"class.std::vector.0", align 8
  %92 = alloca %"class.std::initializer_list", align 8
  %93 = alloca [2 x ptr], align 8
  %94 = alloca %"class.std::allocator.2", align 1
  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 24, ptr %7) #11
  call void @_ZNSt6vectorI7QVectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #11
  store i8 0, ptr %8, align 1, !tbaa !9
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  %97 = invoke noundef zeroext i1 @_ZSteqIP9QParticleSaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24) %95, ptr noundef nonnull align 8 dereferenceable(24) %96)
          to label %98 unwind label %100

98:                                               ; preds = %3
  br i1 %97, label %99, label %104

99:                                               ; preds = %98
  store i8 1, ptr %8, align 1, !tbaa !9
  br label %104

100:                                              ; preds = %3
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %9, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %10, align 4
  br label %580

104:                                              ; preds = %99, %98
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %105 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  store float %105, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %106

106:                                              ; preds = %302, %104
  %107 = load i32, ptr %12, align 4, !tbaa !13
  %108 = sext i32 %107 to i64
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #11
  %111 = icmp ult i64 %108, %110
  br i1 %111, label %113, label %112

112:                                              ; preds = %106
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  br label %308

113:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %114 = load i32, ptr %12, align 4, !tbaa !13
  %115 = sub nsw i32 %114, 1
  %116 = sext i32 %115 to i64
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %117) #11
  %119 = add i64 %116, %118
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %120) #11
  %122 = urem i64 %119, %121
  %123 = trunc i64 %122 to i32
  store i32 %123, ptr %13, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %124 = load i32, ptr %12, align 4, !tbaa !13
  %125 = add nsw i32 %124, 1
  %126 = sext i32 %125 to i64
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #11
  %129 = urem i64 %126, %128
  %130 = trunc i64 %129 to i32
  store i32 %130, ptr %14, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = load i32, ptr %13, align 4, !tbaa !13
  %133 = sext i32 %132 to i64
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef %133) #11
  %135 = load ptr, ptr %134, align 8, !tbaa !5
  store ptr %135, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = load i32, ptr %12, align 4, !tbaa !13
  %138 = sext i32 %137 to i64
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %136, i64 noundef %138) #11
  %140 = load ptr, ptr %139, align 8, !tbaa !5
  store ptr %140, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #11
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = load i32, ptr %14, align 4, !tbaa !13
  %143 = sext i32 %142 to i64
  %144 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %141, i64 noundef %143) #11
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  store ptr %145, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  %146 = load ptr, ptr %15, align 8, !tbaa !5
  %147 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %146)
          to label %148 unwind label %190

148:                                              ; preds = %113
  store <2 x float> %147, ptr %19, align 4
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %149)
          to label %151 unwind label %190

151:                                              ; preds = %148
  store <2 x float> %150, ptr %20, align 4
  %152 = load ptr, ptr %17, align 8, !tbaa !5
  %153 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %152)
          to label %154 unwind label %190

154:                                              ; preds = %151
  store <2 x float> %153, ptr %21, align 4
  %155 = load <2 x float>, ptr %19, align 4
  %156 = load <2 x float>, ptr %20, align 4
  %157 = load <2 x float>, ptr %21, align 4
  %158 = invoke <2 x float> @_ZN7QVector22GeteBisectorUnitVectorES_S_S_b(<2 x float> %155, <2 x float> %156, <2 x float> %157, i1 noundef zeroext true)
          to label %159 unwind label %190

159:                                              ; preds = %154
  store <2 x float> %158, ptr %18, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !15
  %160 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  %161 = load <2 x float>, ptr %23, align 4
  %162 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %161, float noundef %160)
          to label %163 unwind label %194

163:                                              ; preds = %159
  store <2 x float> %162, ptr %22, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  %164 = load i32, ptr %14, align 4, !tbaa !13
  store i32 %164, ptr %24, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %165 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %166 unwind label %198

166:                                              ; preds = %163
  store <2 x float> %165, ptr %25, align 4
  %167 = load i8, ptr %8, align 1, !tbaa !9, !range !16, !noundef !17
  %168 = trunc i8 %167 to i1
  br i1 %168, label %169, label %211

169:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %170 = load ptr, ptr %16, align 8, !tbaa !5
  %171 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %170)
          to label %172 unwind label %202

172:                                              ; preds = %169
  store <2 x float> %171, ptr %28, align 4
  %173 = load ptr, ptr %15, align 8, !tbaa !5
  %174 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %173)
          to label %175 unwind label %202

175:                                              ; preds = %172
  store <2 x float> %174, ptr %29, align 4
  %176 = load <2 x float>, ptr %28, align 4
  %177 = load <2 x float>, ptr %29, align 4
  %178 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %176, <2 x float> %177)
          to label %179 unwind label %202

179:                                              ; preds = %175
  store <2 x float> %178, ptr %27, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !15
  %180 = load <2 x float>, ptr %30, align 4
  %181 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %27, <2 x float> %180)
          to label %182 unwind label %202

182:                                              ; preds = %179
  %183 = invoke noundef float @_ZSt3absf(float noundef %181)
          to label %184 unwind label %202

184:                                              ; preds = %182
  %185 = fmul float %183, 5.000000e-01
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  store float %185, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !15
  %186 = load float, ptr %26, align 4, !tbaa !11
  %187 = load <2 x float>, ptr %32, align 4
  %188 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %187, float noundef %186)
          to label %189 unwind label %206

189:                                              ; preds = %184
  store <2 x float> %188, ptr %31, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %31, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  br label %300

190:                                              ; preds = %154, %151, %148, %113
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %9, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %10, align 4
  br label %307

194:                                              ; preds = %159
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %9, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %10, align 4
  br label %306

198:                                              ; preds = %300, %163
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %9, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %10, align 4
  br label %305

202:                                              ; preds = %182, %179, %175, %172, %169
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %9, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %210

206:                                              ; preds = %184
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %9, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  br label %210

210:                                              ; preds = %206, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  br label %305

211:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #11
  %212 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !11
  store float %212, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #11
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %213

213:                                              ; preds = %296, %211
  %214 = load i32, ptr %24, align 4, !tbaa !13
  %215 = load i32, ptr %13, align 4, !tbaa !13
  %216 = icmp ne i32 %214, %215
  br i1 %216, label %217, label %299

217:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #11
  %218 = load i32, ptr %24, align 4, !tbaa !13
  %219 = add nsw i32 %218, 1
  %220 = sext i32 %219 to i64
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %221) #11
  %223 = urem i64 %220, %222
  %224 = trunc i64 %223 to i32
  store i32 %224, ptr %35, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %225 = load ptr, ptr %16, align 8, !tbaa !5
  %226 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %225)
          to label %227 unwind label %277

227:                                              ; preds = %217
  store <2 x float> %226, ptr %37, align 4
  %228 = load ptr, ptr %16, align 8, !tbaa !5
  %229 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %228)
          to label %230 unwind label %277

230:                                              ; preds = %227
  store <2 x float> %229, ptr %39, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !15
  %231 = load <2 x float>, ptr %39, align 4
  %232 = load <2 x float>, ptr %40, align 4
  %233 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %231, <2 x float> %232)
          to label %234 unwind label %277

234:                                              ; preds = %230
  store <2 x float> %233, ptr %38, align 4
  %235 = load ptr, ptr %5, align 8, !tbaa !5
  %236 = load i32, ptr %24, align 4, !tbaa !13
  %237 = sext i32 %236 to i64
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %235, i64 noundef %237) #11
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %239)
          to label %241 unwind label %277

241:                                              ; preds = %234
  store <2 x float> %240, ptr %41, align 4
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  %243 = load i32, ptr %35, align 4, !tbaa !13
  %244 = sext i32 %243 to i64
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %242, i64 noundef %244) #11
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %246)
          to label %248 unwind label %277

248:                                              ; preds = %241
  store <2 x float> %247, ptr %42, align 4
  %249 = load <2 x float>, ptr %37, align 4
  %250 = load <2 x float>, ptr %38, align 4
  %251 = load <2 x float>, ptr %41, align 4
  %252 = load <2 x float>, ptr %42, align 4
  %253 = invoke <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %249, <2 x float> %250, <2 x float> %251, <2 x float> %252)
          to label %254 unwind label %277

254:                                              ; preds = %248
  store <2 x float> %253, ptr %36, align 4
  %255 = invoke noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %36)
          to label %256 unwind label %277

256:                                              ; preds = %254
  %257 = zext i1 %255 to i32
  %258 = icmp eq i32 %257, 0
  br i1 %258, label %259, label %296

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 4 %36, i64 8, i1 false), !tbaa.struct !15
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  %261 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %260)
          to label %262 unwind label %281

262:                                              ; preds = %259
  store <2 x float> %261, ptr %45, align 4
  %263 = load <2 x float>, ptr %44, align 4
  %264 = load <2 x float>, ptr %45, align 4
  %265 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %263, <2 x float> %264)
          to label %266 unwind label %281

266:                                              ; preds = %262
  store <2 x float> %265, ptr %43, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  %267 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %43)
          to label %268 unwind label %285

268:                                              ; preds = %266
  store float %267, ptr %46, align 4, !tbaa !11
  %269 = load float, ptr %46, align 4, !tbaa !11
  %270 = load float, ptr %33, align 4, !tbaa !11
  %271 = fcmp olt float %269, %270
  br i1 %271, label %272, label %293

272:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 %43, i64 8, i1 false), !tbaa.struct !15
  %273 = load <2 x float>, ptr %48, align 4
  %274 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %273, float noundef 5.000000e-01)
          to label %275 unwind label %289

275:                                              ; preds = %272
  store <2 x float> %274, ptr %47, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %47, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  %276 = load float, ptr %46, align 4, !tbaa !11
  store float %276, ptr %33, align 4, !tbaa !11
  br label %293

277:                                              ; preds = %254, %248, %241, %234, %230, %227, %217
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %9, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %10, align 4
  br label %298

281:                                              ; preds = %262, %259
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %9, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %10, align 4
  br label %295

285:                                              ; preds = %266
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %9, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %10, align 4
  br label %294

289:                                              ; preds = %272
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %9, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  br label %294

293:                                              ; preds = %275, %268
  store i8 1, ptr %34, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %296

294:                                              ; preds = %289, %285
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  br label %295

295:                                              ; preds = %294, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %298

296:                                              ; preds = %293, %256
  %297 = load i32, ptr %35, align 4, !tbaa !13
  store i32 %297, ptr %24, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  br label %213, !llvm.loop !18

298:                                              ; preds = %295, %277
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %305

299:                                              ; preds = %213
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #11
  br label %300

300:                                              ; preds = %299, %189
  invoke void @_ZNSt6vectorI7QVectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 4 dereferenceable(8) %25)
          to label %301 unwind label %198

301:                                              ; preds = %300
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, 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 %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  br label %302

302:                                              ; preds = %301
  %303 = load i32, ptr %12, align 4, !tbaa !13
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %12, align 4, !tbaa !13
  br label %106, !llvm.loop !20

305:                                              ; preds = %298, %210, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  br label %306

306:                                              ; preds = %305, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %307

307:                                              ; preds = %306, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, 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 %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  br label %579

308:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #11
  store i32 0, ptr %49, align 4, !tbaa !13
  br label %309

309:                                              ; preds = %572, %308
  %310 = load i32, ptr %49, align 4, !tbaa !13
  %311 = sext i32 %310 to i64
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  %313 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %312) #11
  %314 = icmp ult i64 %311, %313
  br i1 %314, label %316, label %315

315:                                              ; preds = %309
  store i32 7, ptr %50, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  br label %578

316:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = load i32, ptr %49, align 4, !tbaa !13
  %319 = sext i32 %318 to i64
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %317, i64 noundef %319) #11
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  store ptr %321, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %322 = load ptr, ptr %4, align 8, !tbaa !5
  %323 = load i32, ptr %49, align 4, !tbaa !13
  %324 = add nsw i32 %323, 1
  %325 = sext i32 %324 to i64
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %326) #11
  %328 = urem i64 %325, %327
  %329 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %322, i64 noundef %328) #11
  %330 = load ptr, ptr %329, align 8, !tbaa !5
  store ptr %330, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  %331 = load ptr, ptr %51, align 8, !tbaa !5
  %332 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %331)
          to label %333 unwind label %358

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

336:                                              ; preds = %333
  store <2 x float> %335, ptr %54, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %59, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !15
  %337 = load <2 x float>, ptr %58, align 4
  %338 = load <2 x float>, ptr %59, align 4
  %339 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %337, <2 x float> %338)
          to label %340 unwind label %366

340:                                              ; preds = %336
  store <2 x float> %339, ptr %57, align 4
  %341 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %57)
          to label %342 unwind label %366

342:                                              ; preds = %340
  store <2 x float> %341, ptr %56, align 4
  %343 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %56)
          to label %344 unwind label %366

344:                                              ; preds = %342
  store <2 x float> %343, ptr %55, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  %345 = load ptr, ptr %51, align 8, !tbaa !5
  %346 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %345)
          to label %347 unwind label %370

347:                                              ; preds = %344
  %348 = fcmp ogt float %346, 5.000000e-01
  br i1 %348, label %349, label %378

349:                                              ; preds = %347
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %61, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !15
  %350 = load ptr, ptr %51, align 8, !tbaa !5
  %351 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %350)
          to label %352 unwind label %374

352:                                              ; preds = %349
  %353 = load <2 x float>, ptr %61, align 4
  %354 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %353, float noundef %351)
          to label %355 unwind label %374

355:                                              ; preds = %352
  store <2 x float> %354, ptr %60, align 4
  %356 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %53, ptr noundef nonnull align 4 dereferenceable(8) %60)
          to label %357 unwind label %374

357:                                              ; preds = %355
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %378

358:                                              ; preds = %316
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %9, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %10, align 4
  br label %577

362:                                              ; preds = %333
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %9, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %10, align 4
  br label %576

366:                                              ; preds = %342, %340, %336
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %9, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %575

370:                                              ; preds = %378, %344
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %9, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %10, align 4
  br label %575

374:                                              ; preds = %355, %352, %349
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %9, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  br label %575

378:                                              ; preds = %357, %347
  %379 = load ptr, ptr %52, align 8, !tbaa !5
  %380 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %379)
          to label %381 unwind label %370

381:                                              ; preds = %378
  %382 = fcmp ogt float %380, 5.000000e-01
  br i1 %382, label %383, label %396

383:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %63, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !15
  %384 = load ptr, ptr %52, align 8, !tbaa !5
  %385 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %384)
          to label %386 unwind label %392

386:                                              ; preds = %383
  %387 = load <2 x float>, ptr %63, align 4
  %388 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %387, float noundef %385)
          to label %389 unwind label %392

389:                                              ; preds = %386
  store <2 x float> %388, ptr %62, align 4
  %390 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %54, ptr noundef nonnull align 4 dereferenceable(8) %62)
          to label %391 unwind label %392

391:                                              ; preds = %389
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  br label %396

392:                                              ; preds = %389, %386, %383
  %393 = landingpad { ptr, i32 }
          cleanup
  %394 = extractvalue { ptr, i32 } %393, 0
  store ptr %394, ptr %9, align 8
  %395 = extractvalue { ptr, i32 } %393, 1
  store i32 %395, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  br label %575

396:                                              ; preds = %391, %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %68, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !15
  %397 = load <2 x float>, ptr %67, align 4
  %398 = load <2 x float>, ptr %68, align 4
  %399 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %397, <2 x float> %398)
          to label %400 unwind label %412

400:                                              ; preds = %396
  store <2 x float> %399, ptr %66, align 4
  %401 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %66)
          to label %402 unwind label %412

402:                                              ; preds = %400
  store <2 x float> %401, ptr %65, align 4
  %403 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %65)
          to label %404 unwind label %412

404:                                              ; preds = %402
  store <2 x float> %403, ptr %64, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 %64, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #11
  store i32 0, ptr %69, align 4, !tbaa !13
  br label %405

405:                                              ; preds = %540, %404
  %406 = load i32, ptr %69, align 4, !tbaa !13
  %407 = sext i32 %406 to i64
  %408 = load ptr, ptr %5, align 8, !tbaa !5
  %409 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %408) #11
  %410 = icmp ult i64 %407, %409
  br i1 %410, label %416, label %411

411:                                              ; preds = %405
  store i32 10, ptr %50, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  br label %571

412:                                              ; preds = %402, %400, %396
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %9, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  br label %575

416:                                              ; preds = %405
  %417 = load i32, ptr %69, align 4, !tbaa !13
  %418 = sext i32 %417 to i64
  %419 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %418) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #11
  %420 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %421 unwind label %425

421:                                              ; preds = %416
  store <2 x float> %420, ptr %70, align 4
  %422 = invoke noundef zeroext i1 @_ZNK7QVectoreqERKS_(ptr noundef nonnull align 4 dereferenceable(8) %419, ptr noundef nonnull align 4 dereferenceable(8) %70)
          to label %423 unwind label %425

423:                                              ; preds = %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #11
  br i1 %422, label %424, label %429

424:                                              ; preds = %423
  br label %540

425:                                              ; preds = %421, %416
  %426 = landingpad { ptr, i32 }
          cleanup
  %427 = extractvalue { ptr, i32 } %426, 0
  store ptr %427, ptr %9, align 8
  %428 = extractvalue { ptr, i32 } %426, 1
  store i32 %428, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #11
  br label %570

429:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #11
  %430 = load ptr, ptr %5, align 8, !tbaa !5
  %431 = load i32, ptr %69, align 4, !tbaa !13
  %432 = sext i32 %431 to i64
  %433 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %430, i64 noundef %432) #11
  %434 = load ptr, ptr %433, align 8, !tbaa !5
  store ptr %434, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #11
  %435 = load i32, ptr %69, align 4, !tbaa !13
  %436 = sext i32 %435 to i64
  %437 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %436) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %72, ptr align 4 %437, i64 8, i1 false), !tbaa.struct !15
  %438 = load i8, ptr %8, align 1, !tbaa !9, !range !16, !noundef !17
  %439 = trunc i8 %438 to i1
  br i1 %439, label %440, label %456

440:                                              ; preds = %429
  %441 = load ptr, ptr %71, align 8, !tbaa !5
  %442 = load ptr, ptr %51, align 8, !tbaa !5
  %443 = invoke noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290) %441, ptr noundef %442)
          to label %444 unwind label %451

444:                                              ; preds = %440
  br i1 %443, label %450, label %445

445:                                              ; preds = %444
  %446 = load ptr, ptr %71, align 8, !tbaa !5
  %447 = load ptr, ptr %52, align 8, !tbaa !5
  %448 = invoke noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290) %446, ptr noundef %447)
          to label %449 unwind label %451

449:                                              ; preds = %445
  br i1 %448, label %450, label %455

450:                                              ; preds = %449, %444
  store i32 12, ptr %50, align 4
  br label %537

451:                                              ; preds = %445, %440
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %9, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %10, align 4
  br label %569

455:                                              ; preds = %449
  br label %456

456:                                              ; preds = %455, %429
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #11
  %457 = load ptr, ptr %71, align 8, !tbaa !5
  %458 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %457)
          to label %459 unwind label %473

459:                                              ; preds = %456
  store <2 x float> %458, ptr %73, align 4
  %460 = load ptr, ptr %71, align 8, !tbaa !5
  %461 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %460)
          to label %462 unwind label %473

462:                                              ; preds = %459
  %463 = fcmp ogt float %461, 5.000000e-01
  br i1 %463, label %464, label %481

464:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #11
  %465 = load ptr, ptr %71, align 8, !tbaa !5
  %466 = invoke noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %465)
          to label %467 unwind label %477

467:                                              ; preds = %464
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %75, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !15
  %468 = load <2 x float>, ptr %75, align 4
  %469 = invoke <2 x float> @_Zmlf7QVector(float noundef %466, <2 x float> %468)
          to label %470 unwind label %477

470:                                              ; preds = %467
  store <2 x float> %469, ptr %74, align 4
  %471 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectormIERKS_(ptr noundef nonnull align 4 dereferenceable(8) %73, ptr noundef nonnull align 4 dereferenceable(8) %74)
          to label %472 unwind label %477

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

473:                                              ; preds = %459, %456
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %9, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %10, align 4
  br label %568

477:                                              ; preds = %470, %467, %464
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %9, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  br label %568

481:                                              ; preds = %472, %462
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %77, ptr align 4 %73, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %79, ptr align 4 %73, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %80, ptr align 4 %72, i64 8, i1 false), !tbaa.struct !15
  %482 = load <2 x float>, ptr %79, align 4
  %483 = load <2 x float>, ptr %80, align 4
  %484 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %482, <2 x float> %483)
          to label %485 unwind label %495

485:                                              ; preds = %481
  store <2 x float> %484, ptr %78, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %82, ptr align 4 %54, i64 8, i1 false), !tbaa.struct !15
  %486 = load <2 x float>, ptr %77, align 4
  %487 = load <2 x float>, ptr %78, align 4
  %488 = load <2 x float>, ptr %81, align 4
  %489 = load <2 x float>, ptr %82, align 4
  %490 = invoke <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %486, <2 x float> %487, <2 x float> %488, <2 x float> %489)
          to label %491 unwind label %495

491:                                              ; preds = %485
  store <2 x float> %490, ptr %76, align 4
  %492 = invoke noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %76)
          to label %493 unwind label %495

493:                                              ; preds = %491
  br i1 %492, label %494, label %499

494:                                              ; preds = %493
  store i32 12, ptr %50, align 4
  br label %536

495:                                              ; preds = %491, %485, %481
  %496 = landingpad { ptr, i32 }
          cleanup
  %497 = extractvalue { ptr, i32 } %496, 0
  store ptr %497, ptr %9, align 8
  %498 = extractvalue { ptr, i32 } %496, 1
  store i32 %498, ptr %10, align 4
  br label %567

499:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %84, ptr align 4 %73, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %85, ptr align 4 %53, i64 8, i1 false), !tbaa.struct !15
  %500 = load <2 x float>, ptr %84, align 4
  %501 = load <2 x float>, ptr %85, align 4
  %502 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %500, <2 x float> %501)
          to label %503 unwind label %543

503:                                              ; preds = %499
  store <2 x float> %502, ptr %83, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #11
  %504 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %55)
          to label %505 unwind label %547

505:                                              ; preds = %503
  store <2 x float> %504, ptr %87, align 4
  %506 = load <2 x float>, ptr %87, align 4
  %507 = invoke noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %83, <2 x float> %506)
          to label %508 unwind label %547

508:                                              ; preds = %505
  store float %507, ptr %86, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #11
  %509 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN10QCollision14GetContactPoolEv()
          to label %510 unwind label %551

510:                                              ; preds = %508
  %511 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN11QObjectPoolIN10QCollision7ContactEE6CreateEv(ptr noundef nonnull align 8 dereferenceable(40) %509)
          to label %512 unwind label %551

512:                                              ; preds = %510
  %513 = getelementptr inbounds %"struct.QObjectPool<QCollision::Contact>::Node", ptr %511, i32 0, i32 0
  %514 = load ptr, ptr %513, align 8, !tbaa !21
  store ptr %514, ptr %88, align 8, !tbaa !5
  %515 = load ptr, ptr %88, align 8, !tbaa !5
  %516 = load ptr, ptr %71, align 8, !tbaa !5
  %517 = load ptr, ptr %71, align 8, !tbaa !5
  %518 = invoke <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %517)
          to label %519 unwind label %551

519:                                              ; preds = %512
  store <2 x float> %518, ptr %89, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 4 %55, i64 8, i1 false), !tbaa.struct !15
  %520 = load float, ptr %86, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %93) #11
  %521 = load ptr, ptr %51, align 8, !tbaa !5
  store ptr %521, ptr %93, align 8, !tbaa !5
  %522 = getelementptr inbounds ptr, ptr %93, i64 1
  %523 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %523, ptr %522, align 8, !tbaa !5
  %524 = getelementptr inbounds %"class.std::initializer_list", ptr %92, i32 0, i32 0
  store ptr %93, ptr %524, align 8, !tbaa !23
  %525 = getelementptr inbounds %"class.std::initializer_list", ptr %92, i32 0, i32 1
  store i64 2, ptr %525, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 1, ptr %94) #11
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #11
  %526 = getelementptr inbounds { ptr, i64 }, ptr %92, i32 0, i32 0
  %527 = load ptr, ptr %526, align 8
  %528 = getelementptr inbounds { ptr, i64 }, ptr %92, i32 0, i32 1
  %529 = load i64, ptr %528, align 8
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %91, ptr %527, i64 %529, ptr noundef nonnull align 1 dereferenceable(1) %94)
          to label %530 unwind label %555

530:                                              ; preds = %519
  %531 = load <2 x float>, ptr %89, align 4
  %532 = load <2 x float>, ptr %90, align 4
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %515, ptr noundef %516, <2 x float> %531, <2 x float> %532, float noundef %520, ptr noundef %91)
          to label %533 unwind label %559

533:                                              ; preds = %530
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %91) #11
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #11
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %534, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %535 unwind label %551

535:                                              ; preds = %533
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  store i32 0, ptr %50, align 4
  br label %536

536:                                              ; preds = %535, %494
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %537

537:                                              ; preds = %536, %450
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  %538 = load i32, ptr %50, align 4
  switch i32 %538, label %586 [
    i32 0, label %539
    i32 12, label %540
  ]

539:                                              ; preds = %537
  br label %540

540:                                              ; preds = %539, %537, %424
  %541 = load i32, ptr %69, align 4, !tbaa !13
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %69, align 4, !tbaa !13
  br label %405, !llvm.loop !27

543:                                              ; preds = %499
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %9, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %10, align 4
  br label %566

547:                                              ; preds = %505, %503
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %9, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %10, align 4
  br label %565

551:                                              ; preds = %533, %512, %510, %508
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %9, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %10, align 4
  br label %564

555:                                              ; preds = %519
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %9, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %10, align 4
  br label %563

559:                                              ; preds = %530
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %9, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %10, align 4
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %91) #11
  br label %563

563:                                              ; preds = %559, %555
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %93) #11
  br label %564

564:                                              ; preds = %563, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #11
  br label %565

565:                                              ; preds = %564, %547
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  br label %566

566:                                              ; preds = %565, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  br label %567

567:                                              ; preds = %566, %495
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  br label %568

568:                                              ; preds = %567, %477, %473
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %569

569:                                              ; preds = %568, %451
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %570

570:                                              ; preds = %569, %425
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  br label %575

571:                                              ; preds = %411
  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 8, ptr %53) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %572

572:                                              ; preds = %571
  %573 = load i32, ptr %49, align 4, !tbaa !13
  %574 = add nsw i32 %573, 1
  store i32 %574, ptr %49, align 4, !tbaa !13
  br label %309, !llvm.loop !28

575:                                              ; preds = %570, %412, %392, %374, %370, %366
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %576

576:                                              ; preds = %575, %362
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %577

577:                                              ; preds = %576, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  br label %579

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

579:                                              ; preds = %577, %307
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  br label %580

580:                                              ; preds = %579, %100
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #11
  call void @_ZNSt6vectorI7QVectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #11
  br label %581

581:                                              ; preds = %580
  %582 = load ptr, ptr %9, align 8
  %583 = load i32, ptr %10, align 4
  %584 = insertvalue { ptr, i32 } poison, ptr %582, 0
  %585 = insertvalue { ptr, i32 } %584, i32 %583, 1
  resume { ptr, i32 } %585

586:                                              ; preds = %537
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZSteqIP9QParticleSaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3

declare i32 @__gxx_personality_v0(...)

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

declare <2 x float> @_ZN7QVector22GeteBisectorUnitVectorES_S_S_b(<2 x float>, <2 x float>, <2 x float>, i1 noundef zeroext) #4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290), ptr noundef) #4

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

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

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

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!22, !6, i64 0}
!22 = !{!"_ZTSN11QObjectPoolIN10QCollision7ContactEE4NodeE", !6, i64 0, !14, i64 8, !14, i64 12}
!23 = !{!24, !6, i64 0}
!24 = !{!"_ZTSSt16initializer_listIP9QParticleE", !6, i64 0, !25, i64 8}
!25 = !{!"long", !7, i64 0}
!26 = !{!24, !25, i64 8}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}


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

@_ZN6QWorld14MAX_WORLD_SIZEE = external dso_local local_unnamed_addr global float, align 4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10QCollision18PolylineAndPolygonERSt6vectorIP9QParticleSaIS2_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 #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca %struct.QVector, align 8
  %6 = alloca %struct.QVector, align 8
  %7 = alloca %struct.QVector, 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 %struct.QVector, align 8
  %14 = alloca %struct.QVector, align 8
  %15 = alloca %struct.QVector, align 8
  %16 = alloca %struct.QVector, align 8
  %17 = alloca %struct.QVector, align 8
  %18 = alloca %struct.QVector, align 8
  %19 = alloca %struct.QVector, align 8
  %20 = alloca %struct.QVector, align 8
  %21 = alloca %struct.QVector, align 8
  %22 = alloca %struct.QVector, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.std::vector.0", align 8
  %25 = alloca [2 x ptr], align 8
  %26 = alloca %"class.std::allocator.2", align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  call void @_ZNSt6vectorI7QVectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  %27 = invoke noundef zeroext i1 @_ZSteqIP9QParticleSaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %.preheader173 unwind label %29

.preheader173:                                    ; preds = %3
  %28 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %.not185 = icmp eq i64 %28, 0
  br i1 %.not185, label %.preheader, label %.lr.ph179

29:                                               ; preds = %3
  %30 = landingpad { ptr, i32 }
          cleanup
  br label %246

.preheader:                                       ; preds = %122, %.preheader173
  %31 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #10
  %.not186 = icmp eq i64 %31, 0
  br i1 %.not186, label %._crit_edge184, label %.lr.ph183

.lr.ph183:                                        ; preds = %.preheader
  %32 = getelementptr inbounds i8, ptr %25, i64 8
  br label %126

.lr.ph179:                                        ; preds = %.preheader173, %122
  %indvars.iv = phi i64 [ %indvars.iv.next, %122 ], [ 0, %.preheader173 ]
  %33 = add nsw i64 %indvars.iv, -1
  %34 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %35 = add i64 %34, %33
  %36 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %37 = urem i64 %35, %36
  %38 = trunc i64 %37 to i32
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %39 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %40 = urem i64 %indvars.iv.next, %39
  %sext = shl i64 %37, 32
  %41 = ashr exact i64 %sext, 32
  %42 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %41) #10
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv) #10
  %45 = load ptr, ptr %44, align 8, !tbaa !5
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %40) #10
  %47 = load ptr, ptr %46, align 8, !tbaa !5
  %48 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %43)
  %49 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %45)
  %50 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %47)
  %51 = invoke <2 x float> @_ZN7QVector22GeteBisectorUnitVectorES_S_S_b(<2 x float> %48, <2 x float> %49, <2 x float> %50, i1 noundef zeroext true)
          to label %52 unwind label %68

52:                                               ; preds = %.lr.ph179
  %53 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !9
  %54 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %51, float noundef %53)
          to label %55 unwind label %70

55:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #10
  %56 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %57 unwind label %72

57:                                               ; preds = %55
  store <2 x float> %56, ptr %5, align 8
  br i1 %27, label %58, label %78

58:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  %59 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %45)
  %60 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %43)
  %61 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %59, <2 x float> %60)
          to label %62 unwind label %74

62:                                               ; preds = %58
  store <2 x float> %61, ptr %6, align 8
  %63 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %6, <2 x float> %51)
  %64 = call noundef float @_ZSt3absf(float noundef %63)
  %65 = fmul float %64, 5.000000e-01
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  %66 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %51, float noundef %65)
          to label %67 unwind label %76

67:                                               ; preds = %62
  store <2 x float> %66, ptr %5, align 8
  br label %.loopexit

68:                                               ; preds = %.lr.ph179
  %69 = landingpad { ptr, i32 }
          cleanup
  br label %246

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

72:                                               ; preds = %.loopexit, %55
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %125

74:                                               ; preds = %58
  %75 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  br label %125

76:                                               ; preds = %62
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %125

78:                                               ; preds = %57
  %.0138174 = trunc nuw nsw i64 %40 to i32
  %.not175 = icmp eq i32 %.0138174, %38
  br i1 %.not175, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %78
  %79 = load float, ptr @_ZN6QWorld14MAX_WORLD_SIZEE, align 4, !tbaa !9
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %120
  %.0138.in177 = phi i64 [ %83, %120 ], [ %40, %.lr.ph.preheader ]
  %.0139176 = phi float [ %.2141, %120 ], [ %79, %.lr.ph.preheader ]
  %80 = shl i64 %.0138.in177, 32
  %sext172 = add i64 %80, 4294967296
  %81 = ashr exact i64 %sext172, 32
  %82 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %83 = urem i64 %81, %82
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  %84 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %45)
  %85 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %45)
  %86 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %85, <2 x float> %54)
          to label %87 unwind label %110

87:                                               ; preds = %.lr.ph
  %88 = ashr exact i64 %80, 32
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %88) #10
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  %91 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %90)
  %sext158 = shl i64 %83, 32
  %92 = ashr exact i64 %sext158, 32
  %93 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %92) #10
  %94 = load ptr, ptr %93, align 8, !tbaa !5
  %95 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %94)
  %96 = invoke <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %84, <2 x float> %86, <2 x float> %91, <2 x float> %95)
          to label %97 unwind label %110

97:                                               ; preds = %87
  store <2 x float> %96, ptr %7, align 8
  %98 = invoke noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %7)
          to label %99 unwind label %110

99:                                               ; preds = %97
  br i1 %98, label %120, label %100

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  %.sroa.051.0.copyload = load <2 x float>, ptr %7, align 8
  %101 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %45)
  %102 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %.sroa.051.0.copyload, <2 x float> %101)
          to label %103 unwind label %112

103:                                              ; preds = %100
  store <2 x float> %102, ptr %8, align 8
  %104 = invoke noundef float @_ZNK7QVector6LengthEv(ptr noundef nonnull align 4 dereferenceable(8) %8)
          to label %105 unwind label %114

105:                                              ; preds = %103
  %106 = fcmp olt float %104, %.0139176
  br i1 %106, label %107, label %118

107:                                              ; preds = %105
  %.sroa.046.0.copyload = load <2 x float>, ptr %8, align 8
  %108 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.046.0.copyload, float noundef 5.000000e-01)
          to label %109 unwind label %116

109:                                              ; preds = %107
  store <2 x float> %108, ptr %5, align 8
  br label %118

110:                                              ; preds = %97, %87, %.lr.ph
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %121

112:                                              ; preds = %100
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %119

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

116:                                              ; preds = %107
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %119

118:                                              ; preds = %109, %105
  %.1140 = phi float [ %104, %109 ], [ %.0139176, %105 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %120

119:                                              ; preds = %114, %116, %112
  %.pn160.pn = phi { ptr, i32 } [ %113, %112 ], [ %117, %116 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %121

120:                                              ; preds = %118, %99
  %.2141 = phi float [ %.1140, %118 ], [ %.0139176, %99 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  %.0138 = trunc i64 %83 to i32
  %.not = icmp eq i32 %.0138, %38
  br i1 %.not, label %.loopexit, label %.lr.ph, !llvm.loop !11

121:                                              ; preds = %119, %110
  %.pn160.pn.pn = phi { ptr, i32 } [ %.pn160.pn, %119 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  br label %125

.loopexit:                                        ; preds = %120, %78, %67
  invoke void @_ZNSt6vectorI7QVectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %5)
          to label %122 unwind label %72

122:                                              ; preds = %.loopexit
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  %123 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %124 = icmp ugt i64 %123, %indvars.iv.next
  br i1 %124, label %.lr.ph179, label %.preheader, !llvm.loop !13

125:                                              ; preds = %74, %76, %121, %72
  %.pn166 = phi { ptr, i32 } [ %73, %72 ], [ %.pn160.pn.pn, %121 ], [ %77, %76 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  br label %246

._crit_edge184:                                   ; preds = %._crit_edge, %.preheader
  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

126:                                              ; preds = %.lr.ph183, %._crit_edge
  %indvars.iv192 = phi i64 [ 0, %.lr.ph183 ], [ %indvars.iv.next193, %._crit_edge ]
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %indvars.iv192) #10
  %128 = load ptr, ptr %127, align 8, !tbaa !5
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %129 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #10
  %130 = urem i64 %indvars.iv.next193, %129
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %130) #10
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %133 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %128)
  store <2 x float> %133, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %134 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %132)
  store <2 x float> %134, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  %.sroa.030.0.copyload = load <2 x float>, ptr %9, align 8
  %135 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %134, <2 x float> %.sroa.030.0.copyload)
          to label %136 unwind label %148

136:                                              ; preds = %126
  store <2 x float> %135, ptr %13, align 8
  %137 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %13)
          to label %138 unwind label %148

138:                                              ; preds = %136
  store <2 x float> %137, ptr %12, align 8
  %139 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %12)
          to label %140 unwind label %148

140:                                              ; preds = %138
  store <2 x float> %139, ptr %11, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  %141 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %128)
  %142 = fcmp ogt float %141, 5.000000e-01
  br i1 %142, label %143, label %152

143:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %.sroa.029.0.copyload = load <2 x float>, ptr %11, align 8
  %144 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %128)
  %145 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.029.0.copyload, float noundef %144)
          to label %146 unwind label %150

146:                                              ; preds = %143
  store <2 x float> %145, ptr %14, align 8
  %147 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 4 dereferenceable(8) %14)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %152

148:                                              ; preds = %138, %136, %126
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %245

150:                                              ; preds = %143
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %245

152:                                              ; preds = %146, %140
  %153 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %132)
  %154 = fcmp ogt float %153, 5.000000e-01
  br i1 %154, label %155, label %162

155:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %.sroa.028.0.copyload = load <2 x float>, ptr %11, align 8
  %156 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %132)
  %157 = invoke <2 x float> @_Zml7QVectorf(<2 x float> %.sroa.028.0.copyload, float noundef %156)
          to label %158 unwind label %160

158:                                              ; preds = %155
  store <2 x float> %157, ptr %15, align 8
  %159 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN7QVectorpLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %10, ptr noundef nonnull align 4 dereferenceable(8) %15)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  br label %162

160:                                              ; preds = %155
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  br label %245

162:                                              ; preds = %158, %152
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  %.sroa.026.0.copyload = load <2 x float>, ptr %10, align 8
  %.sroa.025.0.copyload = load <2 x float>, ptr %9, align 8
  %163 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %.sroa.026.0.copyload, <2 x float> %.sroa.025.0.copyload)
          to label %164 unwind label %172

164:                                              ; preds = %162
  store <2 x float> %163, ptr %17, align 8
  %165 = invoke <2 x float> @_ZNK7QVector10NormalizedEv(ptr noundef nonnull align 4 dereferenceable(8) %17)
          to label %166 unwind label %172

166:                                              ; preds = %164
  store <2 x float> %165, ptr %16, align 8
  %167 = invoke <2 x float> @_ZNK7QVector13PerpendicularEv(ptr noundef nonnull align 4 dereferenceable(8) %16)
          to label %168 unwind label %172

168:                                              ; preds = %166
  store <2 x float> %167, ptr %11, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  %169 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %.not187 = icmp eq i64 %169, 0
  br i1 %.not187, label %._crit_edge, label %.lr.ph181

._crit_edge:                                      ; preds = %227, %168
  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
  %170 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #10
  %171 = icmp ugt i64 %170, %indvars.iv.next193
  br i1 %171, label %126, label %._crit_edge184, !llvm.loop !14

172:                                              ; preds = %166, %164, %162
  %173 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  br label %245

.lr.ph181:                                        ; preds = %168, %227
  %indvars.iv189 = phi i64 [ %indvars.iv.next190, %227 ], [ 0, %168 ]
  %174 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv189) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %175 = invoke <2 x float> @_ZN7QVector4ZeroEv()
          to label %176 unwind label %178

176:                                              ; preds = %.lr.ph181
  store <2 x float> %175, ptr %18, align 8
  %177 = call noundef zeroext i1 @_ZNK7QVectoreqERKS_(ptr noundef nonnull align 4 dereferenceable(8) %174, ptr noundef nonnull align 4 dereferenceable(8) %18)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  br i1 %177, label %227, label %180

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

180:                                              ; preds = %176
  %181 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP9QParticleSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv189) #10
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI7QVectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv189) #10
  %.sroa.013.0.copyload = load <2 x float>, ptr %183, align 4
  br i1 %27, label %184, label %192

184:                                              ; preds = %180
  %185 = invoke noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290) %182, ptr noundef nonnull %128)
          to label %186 unwind label %190

186:                                              ; preds = %184
  br i1 %185, label %227, label %187

187:                                              ; preds = %186
  %188 = invoke noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290) %182, ptr noundef nonnull %132)
          to label %189 unwind label %190

189:                                              ; preds = %187
  br i1 %188, label %227, label %192

190:                                              ; preds = %187, %184
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %245

192:                                              ; preds = %189, %180
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  %193 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %182)
  store <2 x float> %193, ptr %19, align 8
  %194 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %182)
  %195 = fcmp ogt float %194, 5.000000e-01
  br i1 %195, label %196, label %203

196:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  %197 = call noundef float @_ZN9QParticle9GetRadiusEv(ptr noundef nonnull align 8 dereferenceable(290) %182)
  %.sroa.012.0.copyload = load <2 x float>, ptr %11, align 8
  %198 = invoke <2 x float> @_Zmlf7QVector(float noundef %197, <2 x float> %.sroa.012.0.copyload)
          to label %199 unwind label %201

199:                                              ; preds = %196
  store <2 x float> %198, ptr %20, align 8
  %200 = 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 %203

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

203:                                              ; preds = %199, %192
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  %.sroa.011.0.copyload = load <2 x float>, ptr %19, align 8
  %204 = invoke <2 x float> @_Zpl7QVectorS_(<2 x float> %.sroa.011.0.copyload, <2 x float> %.sroa.013.0.copyload)
          to label %205 unwind label %210

205:                                              ; preds = %203
  %.sroa.07.0.copyload = load <2 x float>, ptr %9, align 8
  %.sroa.06.0.copyload = load <2 x float>, ptr %10, align 8
  %206 = invoke <2 x float> @_ZN10QCollision20LineIntersectionLineE7QVectorS0_S0_S0_(<2 x float> %.sroa.011.0.copyload, <2 x float> %204, <2 x float> %.sroa.07.0.copyload, <2 x float> %.sroa.06.0.copyload)
          to label %207 unwind label %210

207:                                              ; preds = %205
  store <2 x float> %206, ptr %21, align 8
  %208 = invoke noundef zeroext i1 @_ZNK7QVector5isNaNEv(ptr noundef nonnull align 4 dereferenceable(8) %21)
          to label %209 unwind label %210

209:                                              ; preds = %207
  br i1 %208, label %226, label %212

210:                                              ; preds = %207, %205, %203
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %243

212:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #10
  %.sroa.05.0.copyload = load <2 x float>, ptr %19, align 8
  %.sroa.04.0.copyload = load <2 x float>, ptr %9, align 8
  %213 = invoke <2 x float> @_Zmi7QVectorS_(<2 x float> %.sroa.05.0.copyload, <2 x float> %.sroa.04.0.copyload)
          to label %214 unwind label %230

214:                                              ; preds = %212
  store <2 x float> %213, ptr %22, align 8
  %215 = invoke <2 x float> @_ZNK7QVectorngEv(ptr noundef nonnull align 4 dereferenceable(8) %11)
          to label %216 unwind label %232

216:                                              ; preds = %214
  %217 = call noundef float @_ZNK7QVector3DotES_(ptr noundef nonnull align 4 dereferenceable(8) %22, <2 x float> %215)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #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 %234

220:                                              ; preds = %216
  %221 = load ptr, ptr %219, align 8, !tbaa !15
  store ptr %221, ptr %23, align 8, !tbaa !5
  %222 = call <2 x float> @_ZN9QParticle17GetGlobalPositionEv(ptr noundef nonnull align 8 dereferenceable(290) %182)
  %.sroa.01.0.copyload = load <2 x float>, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #10
  store ptr %128, ptr %25, align 8, !tbaa !5
  store ptr %132, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #10
  call void @_ZNSaIP9QParticleEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #10
  invoke void @_ZNSt6vectorIP9QParticleSaIS1_EEC2ESt16initializer_listIS1_ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr nonnull %25, i64 2, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %223 unwind label %236

223:                                              ; preds = %220
  invoke void @_ZN10QCollision7Contact9ConfigureEP9QParticle7QVectorS3_fSt6vectorIS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(57) %221, ptr noundef nonnull %182, <2 x float> %222, <2 x float> %.sroa.01.0.copyload, float noundef %217, ptr noundef nonnull %24)
          to label %224 unwind label %238

224:                                              ; preds = %223
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #10
  invoke void @_ZNSt6vectorIPN10QCollision7ContactESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %225 unwind label %234

225:                                              ; preds = %224
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %226

226:                                              ; preds = %209, %225
  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 %227

227:                                              ; preds = %226, %189, %186, %176
  %indvars.iv.next190 = add nuw nsw i64 %indvars.iv189, 1
  %228 = call noundef i64 @_ZNKSt6vectorIP9QParticleSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #10
  %229 = icmp ugt i64 %228, %indvars.iv.next190
  br i1 %229, label %.lr.ph181, label %._crit_edge, !llvm.loop !18

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

232:                                              ; preds = %214
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %242

234:                                              ; preds = %224, %216
  %235 = landingpad { ptr, i32 }
          cleanup
  br label %241

236:                                              ; preds = %220
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %240

238:                                              ; preds = %223
  %239 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIP9QParticleSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  br label %240

240:                                              ; preds = %238, %236
  %.pn = phi { ptr, i32 } [ %239, %238 ], [ %237, %236 ]
  call void @_ZNSt15__new_allocatorIP9QParticleED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #10
  br label %241

241:                                              ; preds = %240, %234
  %.pn149 = phi { ptr, i32 } [ %235, %234 ], [ %.pn, %240 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  br label %242

242:                                              ; preds = %232, %241, %230
  %.pn149.pn.pn = phi { ptr, i32 } [ %231, %230 ], [ %.pn149, %241 ], [ %233, %232 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %243

243:                                              ; preds = %242, %210
  %.pn149.pn.pn.pn = phi { ptr, i32 } [ %.pn149.pn.pn, %242 ], [ %211, %210 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %244

244:                                              ; preds = %243, %201
  %.pn149.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn149.pn.pn.pn, %243 ], [ %202, %201 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  br label %245

245:                                              ; preds = %178, %244, %190, %172, %160, %150, %148
  %.pn149.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %173, %172 ], [ %161, %160 ], [ %151, %150 ], [ %149, %148 ], [ %179, %178 ], [ %.pn149.pn.pn.pn.pn, %244 ], [ %191, %190 ]
  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
  br label %246

246:                                              ; preds = %245, %70, %125, %68, %29
  %.pn166.pn.pn.pn.pn = phi { ptr, i32 } [ %30, %29 ], [ %.pn149.pn.pn.pn.pn.pn.pn.pn, %245 ], [ %69, %68 ], [ %.pn166, %125 ], [ %71, %70 ]
  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
  resume { ptr, i32 } %.pn166.pn.pn.pn.pn
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZSteqIP9QParticleSaIS1_EEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

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

declare <2 x float> @_ZN7QVector22GeteBisectorUnitVectorES_S_S_b(<2 x float>, <2 x float>, <2 x float>, i1 noundef zeroext) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN9QParticle21IsConnectedWithSpringEPS_(ptr noundef nonnull align 8 dereferenceable(290), ptr noundef) local_unnamed_addr #4

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

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

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

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

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

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

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


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