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

; 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.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.143" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.129" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.144" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.127" = type { ptr }
%class.QWorld = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector.10", %"class.std::vector.15", %"class.std::unordered_set", %"class.std::vector.25", ptr, i8, %struct.QVector, i8, i8, i32, float, float, float, i32, i32, %"class.std::vector.30" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl" }
%"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QJoint *, std::allocator<QJoint *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QSpring *, std::allocator<QSpring *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl" }
%"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QRaycast *, std::allocator<QRaycast *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl" }
%"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QGizmo *, std::allocator<QGizmo *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<QBody *>, std::allocator<std::vector<QBody *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::vector.25" = type { %"struct.std::_Vector_base.26" }
%"struct.std::_Vector_base.26" = type { %"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl" }
%"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl" = type { %"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QManifold, std::allocator<QManifold>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.QVector = type { float, float }
%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QBody *, std::allocator<QBody *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.QBody = type <{ ptr, float, float, ptr, %struct.QVector, %struct.QVector, float, float, %class.QAABB, i32, i8, i8, i8, i8, float, i32, i8, [3 x i8], float, i8, i8, [2 x i8], %struct.QVector, float, float, float, float, float, i32, i32, i8, i8, i8, i8, i32, i32, i32, i8, [3 x i8], %"class.std::function", %"class.std::function", %"class.std::function.36", i8, [7 x i8], %"class.std::vector.38", i32, i8, [3 x i8] }>
%class.QAABB = type { %struct.QVector, %struct.QVector, %struct.QVector, float }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.std::function.36" = type { %"class.std::_Function_base", ptr }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = type { %"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl" }
%"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QMesh *, std::allocator<QMesh *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.QMesh = type { %"class.std::vector.44", %struct.QVector, %struct.QVector, float, float, %"class.std::vector.0", %"class.std::vector.49", %"class.std::vector.44", %"class.std::vector.54", %"class.std::vector.59", float, ptr, i32, %"class.std::vector.64", i8, i8, %"class.std::vector.69", float, i8, i8, i8, i8 }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QAngleConstraint *, std::allocator<QAngleConstraint *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.44" = type { %"struct.std::_Vector_base.45" }
%"struct.std::_Vector_base.45" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QParticle *, std::allocator<QParticle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.54" = type { %"struct.std::_Vector_base.55" }
%"struct.std::_Vector_base.55" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<QParticle *>, std::allocator<std::vector<QParticle *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.59" = type { %"struct.std::_Vector_base.60" }
%"struct.std::_Vector_base.60" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl" = type { %"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<QVector, std::allocator<QVector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.64" = type { %"struct.std::_Vector_base.65" }
%"struct.std::_Vector_base.65" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.69" = type { %"struct.std::_Vector_base.70" }
%"struct.std::_Vector_base.70" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272) %0) #3 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca float, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.144", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator.144", align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.127", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.127", align 8
  %45 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %46 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %47 = getelementptr inbounds %class.QWorld, ptr %46, i32 0, i32 18
  store ptr %47, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %48) #5
  %50 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %4, i32 0, i32 0
  store ptr %49, ptr %50, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %51 = load ptr, ptr %3, align 8, !tbaa !5
  %52 = call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #5
  %53 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.35", ptr %5, i32 0, i32 0
  store ptr %52, ptr %53, align 8
  br label %54

54:                                               ; preds = %248, %1
  %55 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #5
  br i1 %55, label %57, label %56

56:                                               ; preds = %54
  store i32 2, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %250

57:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  store ptr %59, ptr %7, align 8, !tbaa !5
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = getelementptr inbounds %class.QBody, ptr %60, i32 0, i32 32
  %62 = load i8, ptr %61, align 2, !tbaa !9, !range !26, !noundef !27
  %63 = trunc i8 %62 to i1
  br i1 %63, label %64, label %65

64:                                               ; preds = %57
  store i32 3, ptr %6, align 4
  br label %245

65:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store float 1.000000e+00, ptr %8, align 4, !tbaa !28
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds %class.QBody, ptr %66, i32 0, i32 12
  %68 = load i8, ptr %67, align 2, !tbaa !29, !range !26, !noundef !27
  %69 = trunc i8 %68 to i1
  %70 = zext i1 %69 to i32
  %71 = icmp eq i32 %70, 1
  br i1 %71, label %72, label %76

72:                                               ; preds = %65
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %class.QBody, ptr %73, i32 0, i32 14
  %75 = load float, ptr %74, align 4, !tbaa !30
  store float %75, ptr %8, align 4, !tbaa !28
  br label %78

76:                                               ; preds = %65
  %77 = call noundef float @_ZN6QWorld12GetTimeScaleEv(ptr noundef nonnull align 8 dereferenceable(272) %46)
  store float %77, ptr %8, align 4, !tbaa !28
  br label %78

78:                                               ; preds = %76, %72
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %79)
  %81 = icmp ne i32 %80, 1
  br i1 %81, label %82, label %244

82:                                               ; preds = %78
  %83 = load ptr, ptr %7, align 8, !tbaa !5
  %84 = call noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293) %83)
  %85 = icmp ne i32 %84, 1
  br i1 %85, label %86, label %244

86:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %87 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %87, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !31
  br label %88

88:                                               ; preds = %163, %86
  %89 = load i32, ptr %10, align 4, !tbaa !31
  %90 = load ptr, ptr %9, align 8, !tbaa !5
  %91 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %90)
  %92 = icmp slt i32 %89, %91
  br i1 %92, label %94, label %93

93:                                               ; preds = %88
  store i32 4, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %166

94:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %95 = load ptr, ptr %9, align 8, !tbaa !5
  %96 = load i32, ptr %10, align 4, !tbaa !31
  %97 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %95, i32 noundef %96)
  store ptr %97, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.QMesh, ptr %98, i32 0, i32 0
  store ptr %99, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %100 = load ptr, ptr %12, align 8, !tbaa !5
  %101 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %100) #5
  %102 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %13, i32 0, i32 0
  store ptr %101, ptr %102, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %103 = load ptr, ptr %12, align 8, !tbaa !5
  %104 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %103) #5
  %105 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %14, i32 0, i32 0
  store ptr %104, ptr %105, align 8
  br label %106

106:                                              ; preds = %114, %94
  %107 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  br i1 %107, label %109, label %108

108:                                              ; preds = %106
  store i32 7, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %116

109:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  %111 = load ptr, ptr %110, align 8, !tbaa !5
  store ptr %111, ptr %15, align 8, !tbaa !5
  %112 = load ptr, ptr %15, align 8, !tbaa !5
  %113 = call noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %112)
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %114

114:                                              ; preds = %109
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  br label %106

116:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.QMesh, ptr %117, i32 0, i32 5
  store ptr %118, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %119 = load ptr, ptr %16, align 8, !tbaa !5
  %120 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %119) #5
  %121 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.129", ptr %17, i32 0, i32 0
  store ptr %120, ptr %121, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %122) #5
  %124 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.129", ptr %18, i32 0, i32 0
  store ptr %123, ptr %124, align 8
  br label %125

125:                                              ; preds = %141, %116
  %126 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  br i1 %126, label %128, label %127

127:                                              ; preds = %125
  store i32 9, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %143

128:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  %130 = load ptr, ptr %129, align 8, !tbaa !5
  store ptr %130, ptr %19, align 8, !tbaa !5
  %131 = load ptr, ptr %19, align 8, !tbaa !5
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = call noundef float @_ZN9QSoftBody11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(360) %132)
  %134 = load float, ptr %8, align 4, !tbaa !28
  %135 = fmul float %133, %134
  %136 = load ptr, ptr %9, align 8, !tbaa !5
  %137 = call noundef zeroext i1 @_ZN9QSoftBody38GetPassivationOfInternalSpringsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %136)
  %138 = load ptr, ptr %131, align 8, !tbaa !32
  %139 = getelementptr inbounds ptr, ptr %138, i64 0
  %140 = load ptr, ptr %139, align 8
  call void %140(ptr noundef nonnull align 8 dereferenceable(39) %131, float noundef %135, i1 noundef zeroext %137, i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %141

141:                                              ; preds = %128
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  br label %125

143:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.QMesh, ptr %144, i32 0, i32 0
  store ptr %145, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %146 = load ptr, ptr %20, align 8, !tbaa !5
  %147 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %146) #5
  %148 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %21, i32 0, i32 0
  store ptr %147, ptr %148, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %149 = load ptr, ptr %20, align 8, !tbaa !5
  %150 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %149) #5
  %151 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %22, i32 0, i32 0
  store ptr %150, ptr %151, align 8
  br label %152

152:                                              ; preds = %160, %143
  %153 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  br i1 %153, label %155, label %154

154:                                              ; preds = %152
  store i32 11, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %162

155:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  store ptr %157, ptr %23, align 8, !tbaa !5
  %158 = load ptr, ptr %23, align 8, !tbaa !5
  %159 = call noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %158)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %160

160:                                              ; preds = %155
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  br label %152

162:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %163

163:                                              ; preds = %162
  %164 = load i32, ptr %10, align 4, !tbaa !31
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %10, align 4, !tbaa !31
  br label %88, !llvm.loop !34

166:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !31
  br label %167

167:                                              ; preds = %240, %166
  %168 = load i32, ptr %24, align 4, !tbaa !31
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  %170 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %169)
  %171 = icmp slt i32 %168, %170
  br i1 %171, label %173, label %172

172:                                              ; preds = %167
  store i32 13, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %243

173:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = load i32, ptr %24, align 4, !tbaa !31
  %176 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %174, i32 noundef %175)
  store ptr %176, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %177 = load ptr, ptr %25, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.QMesh, ptr %177, i32 0, i32 0
  store ptr %178, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %179 = load ptr, ptr %26, align 8, !tbaa !5
  %180 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %179) #5
  %181 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %27, i32 0, i32 0
  store ptr %180, ptr %181, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %182 = load ptr, ptr %26, align 8, !tbaa !5
  %183 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %182) #5
  %184 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %28, i32 0, i32 0
  store ptr %183, ptr %184, align 8
  br label %185

185:                                              ; preds = %193, %173
  %186 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #5
  br i1 %186, label %188, label %187

187:                                              ; preds = %185
  store i32 16, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %195

188:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #5
  %190 = load ptr, ptr %189, align 8, !tbaa !5
  store ptr %190, ptr %29, align 8, !tbaa !5
  %191 = load ptr, ptr %29, align 8, !tbaa !5
  %192 = call noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %191)
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %193

193:                                              ; preds = %188
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #5
  br label %185

195:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %196 = load ptr, ptr %25, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.QMesh, ptr %196, i32 0, i32 6
  store ptr %197, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %198 = load ptr, ptr %30, align 8, !tbaa !5
  %199 = call ptr @_ZNSt6vectorIP16QAngleConstraintSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %198) #5
  %200 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.144", ptr %31, i32 0, i32 0
  store ptr %199, ptr %200, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %201 = load ptr, ptr %30, align 8, !tbaa !5
  %202 = call ptr @_ZNSt6vectorIP16QAngleConstraintSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #5
  %203 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.144", ptr %32, i32 0, i32 0
  store ptr %202, ptr %203, align 8
  br label %204

204:                                              ; preds = %218, %195
  %205 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #5
  br i1 %205, label %207, label %206

206:                                              ; preds = %204
  store i32 18, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %220

207:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #5
  %209 = load ptr, ptr %208, align 8, !tbaa !5
  store ptr %209, ptr %33, align 8, !tbaa !5
  %210 = load ptr, ptr %33, align 8, !tbaa !5
  %211 = load ptr, ptr %33, align 8, !tbaa !5
  %212 = call noundef float @_ZN16QAngleConstraint11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(59) %211)
  %213 = load float, ptr %8, align 4, !tbaa !28
  %214 = fmul float %212, %213
  %215 = load ptr, ptr %210, align 8, !tbaa !32
  %216 = getelementptr inbounds ptr, ptr %215, i64 0
  %217 = load ptr, ptr %216, align 8
  call void %217(ptr noundef nonnull align 8 dereferenceable(59) %210, float noundef %214, i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %218

218:                                              ; preds = %207
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #5
  br label %204

220:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %221 = load ptr, ptr %25, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.QMesh, ptr %221, i32 0, i32 0
  store ptr %222, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %223 = load ptr, ptr %34, align 8, !tbaa !5
  %224 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %223) #5
  %225 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %35, i32 0, i32 0
  store ptr %224, ptr %225, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %226 = load ptr, ptr %34, align 8, !tbaa !5
  %227 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %226) #5
  %228 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.143", ptr %36, i32 0, i32 0
  store ptr %227, ptr %228, align 8
  br label %229

229:                                              ; preds = %237, %220
  %230 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #5
  br i1 %230, label %232, label %231

231:                                              ; preds = %229
  store i32 20, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %239

232:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #5
  %234 = load ptr, ptr %233, align 8, !tbaa !5
  store ptr %234, ptr %37, align 8, !tbaa !5
  %235 = load ptr, ptr %37, align 8, !tbaa !5
  %236 = call noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %235)
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %237

237:                                              ; preds = %232
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #5
  br label %229

239:                                              ; preds = %231
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %24, align 4, !tbaa !31
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %24, align 4, !tbaa !31
  br label %167, !llvm.loop !36

243:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  br label %244

244:                                              ; preds = %243, %82, %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  store i32 0, ptr %6, align 4
  br label %245

245:                                              ; preds = %244, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  %246 = load i32, ptr %6, align 4
  switch i32 %246, label %293 [
    i32 0, label %247
    i32 3, label %248
  ]

247:                                              ; preds = %245
  br label %248

248:                                              ; preds = %247, %245
  %249 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  br label %54

250:                                              ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %251 = getelementptr inbounds %class.QWorld, ptr %46, i32 0, i32 1
  store ptr %251, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %252 = load ptr, ptr %38, align 8, !tbaa !5
  %253 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %252) #5
  %254 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.129", ptr %39, i32 0, i32 0
  store ptr %253, ptr %254, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %255 = load ptr, ptr %38, align 8, !tbaa !5
  %256 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %255) #5
  %257 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.129", ptr %40, i32 0, i32 0
  store ptr %256, ptr %257, align 8
  br label %258

258:                                              ; preds = %270, %250
  %259 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %40) #5
  br i1 %259, label %261, label %260

260:                                              ; preds = %258
  store i32 22, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %272

261:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #5
  %263 = load ptr, ptr %262, align 8, !tbaa !5
  store ptr %263, ptr %41, align 8, !tbaa !5
  %264 = load ptr, ptr %41, align 8, !tbaa !5
  %265 = load ptr, ptr %41, align 8, !tbaa !5
  %266 = call noundef float @_ZN7QSpring11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(39) %265)
  %267 = load ptr, ptr %264, align 8, !tbaa !32
  %268 = getelementptr inbounds ptr, ptr %267, i64 0
  %269 = load ptr, ptr %268, align 8
  call void %269(ptr noundef nonnull align 8 dereferenceable(39) %264, float noundef %266, i1 noundef zeroext false, i1 noundef zeroext true)
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  br label %270

270:                                              ; preds = %261
  %271 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %39) #5
  br label %258

272:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %273 = getelementptr inbounds %class.QWorld, ptr %46, i32 0, i32 0
  store ptr %273, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %274 = load ptr, ptr %42, align 8, !tbaa !5
  %275 = call ptr @_ZNSt6vectorIP6QJointSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %274) #5
  %276 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.127", ptr %43, i32 0, i32 0
  store ptr %275, ptr %276, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %277 = load ptr, ptr %42, align 8, !tbaa !5
  %278 = call ptr @_ZNSt6vectorIP6QJointSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %277) #5
  %279 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.127", ptr %44, i32 0, i32 0
  store ptr %278, ptr %279, align 8
  br label %280

280:                                              ; preds = %290, %272
  %281 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP6QJointSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #5
  br i1 %281, label %283, label %282

282:                                              ; preds = %280
  store i32 24, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %292

283:                                              ; preds = %280
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %284 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP6QJointSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #5
  %285 = load ptr, ptr %284, align 8, !tbaa !5
  store ptr %285, ptr %45, align 8, !tbaa !5
  %286 = load ptr, ptr %45, align 8, !tbaa !5
  %287 = load ptr, ptr %286, align 8, !tbaa !32
  %288 = getelementptr inbounds ptr, ptr %287, i64 0
  %289 = load ptr, ptr %288, align 8
  call void %289(ptr noundef nonnull align 8 dereferenceable(89) %286)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %290

290:                                              ; preds = %283
  %291 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP6QJointSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #5
  br label %280

292:                                              ; preds = %282
  ret void

293:                                              ; preds = %245
  unreachable
}

declare noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293)) #4

declare noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293), i32 noundef) #4

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290)) #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody38GetPassivationOfInternalSpringsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) #1 align 2

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

declare noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290)) #4

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { 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, !15, i64 142}
!10 = !{!"_ZTS5QBody", !11, i64 8, !11, i64 12, !6, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !11, i64 44, !13, i64 48, !14, i64 76, !15, i64 80, !15, i64 81, !15, i64 82, !11, i64 84, !16, i64 88, !15, i64 92, !11, i64 96, !15, i64 100, !15, i64 101, !12, i64 104, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !17, i64 132, !17, i64 136, !15, i64 140, !15, i64 141, !15, i64 142, !17, i64 144, !17, i64 148, !17, i64 152, !15, i64 156, !18, i64 160, !18, i64 192, !20, i64 224, !15, i64 256, !21, i64 264, !25, i64 288, !15, i64 292}
!11 = !{!"float", !7, i64 0}
!12 = !{!"_ZTS7QVector", !11, i64 0, !11, i64 4}
!13 = !{!"_ZTS5QAABB", !12, i64 0, !12, i64 8, !12, i64 16, !11, i64 24}
!14 = !{!"_ZTSN5QBody5ModesE", !7, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN5QBody9BodyTypesE", !7, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSSt8functionIFvP5QBodyEE", !19, i64 0, !6, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!20 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !19, i64 0, !6, i64 24}
!21 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSN5QBody16SimulationModelsE", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!11, !11, i64 0}
!29 = !{!10, !15, i64 82}
!30 = !{!10, !11, i64 84}
!31 = !{!17, !17, i64 0}
!32 = !{!33, !33, i64 0}
!33 = !{!"vtable pointer", !8, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}


; 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.__gnu_cxx::__normal_iterator.35" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.143" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.129" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.144" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.127" = type { ptr }

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6QWorld17UpdateConstraintsEv(ptr noundef nonnull align 8 dereferenceable(272) %0) local_unnamed_addr #3 align 2 {
  %2 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.35", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.144", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.144", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.143", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.129", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.127", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.127", align 8
  %20 = getelementptr inbounds i8, ptr %0, i64 248
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #5
  %21 = tail call ptr @_ZNSt6vectorIP5QBodySaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #5
  store ptr %21, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5
  %22 = tail call ptr @_ZNSt6vectorIP5QBodySaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #5
  store ptr %22, ptr %3, align 8
  %23 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  br i1 %23, label %.lr.ph78, label %._crit_edge79

._crit_edge79:                                    ; preds = %.loopexit, %1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #5
  %24 = getelementptr inbounds i8, ptr %0, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #5
  %25 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #5
  store ptr %25, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  %26 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #5
  store ptr %26, ptr %17, align 8
  %27 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  br i1 %27, label %.lr.ph81, label %._crit_edge82

.lr.ph78:                                         ; preds = %1, %.loopexit
  %28 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #5
  %29 = load ptr, ptr %28, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %29, i64 142
  %31 = load i8, ptr %30, align 2, !tbaa !9, !range !26, !noundef !27
  %32 = trunc nuw i8 %31 to i1
  br i1 %32, label %.loopexit, label %33

33:                                               ; preds = %.lr.ph78
  %34 = getelementptr inbounds i8, ptr %29, i64 82
  %35 = load i8, ptr %34, align 2, !tbaa !28, !range !26, !noundef !27
  %36 = trunc nuw i8 %35 to i1
  br i1 %36, label %37, label %40

37:                                               ; preds = %33
  %38 = getelementptr inbounds i8, ptr %29, i64 84
  %39 = load float, ptr %38, align 4, !tbaa !29
  br label %42

40:                                               ; preds = %33
  %41 = call noundef float @_ZN6QWorld12GetTimeScaleEv(ptr noundef nonnull align 8 dereferenceable(272) %0)
  br label %42

42:                                               ; preds = %40, %37
  %.0 = phi float [ %39, %37 ], [ %41, %40 ]
  %43 = call noundef i32 @_ZN5QBody7GetModeEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %.not = icmp eq i32 %43, 1
  br i1 %.not, label %.loopexit, label %44

44:                                               ; preds = %42
  %45 = call noundef i32 @_ZN5QBody18GetSimulationModelEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %.not56 = icmp eq i32 %45, 1
  br i1 %.not56, label %.loopexit, label %.preheader57

.preheader57:                                     ; preds = %44
  %46 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %47 = icmp sgt i32 %46, 0
  br i1 %47, label %.lr.ph65, label %.preheader

.preheader:                                       ; preds = %._crit_edge63, %.preheader57
  %48 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %49 = icmp sgt i32 %48, 0
  br i1 %49, label %.lr.ph76, label %.loopexit

.lr.ph65:                                         ; preds = %.preheader57, %._crit_edge63
  %.05464 = phi i32 [ %75, %._crit_edge63 ], [ 0, %.preheader57 ]
  %50 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %29, i32 noundef %.05464)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  %51 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #5
  store ptr %51, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  %52 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #5
  store ptr %52, ptr %5, align 8
  %53 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #5
  br i1 %53, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %.lr.ph65
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  %54 = getelementptr inbounds i8, ptr %50, i64 48
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %55 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %54) #5
  store ptr %55, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %56 = call ptr @_ZNSt6vectorIP7QSpringSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %54) #5
  store ptr %56, ptr %7, align 8
  %57 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  br i1 %57, label %.lr.ph59, label %._crit_edge60

.lr.ph:                                           ; preds = %.lr.ph65, %.lr.ph
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  %60 = call noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %59)
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  %62 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #5
  br i1 %62, label %.lr.ph, label %._crit_edge

._crit_edge60:                                    ; preds = %.lr.ph59, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %63 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #5
  store ptr %63, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #5
  %64 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #5
  store ptr %64, ptr %9, align 8
  %65 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #5
  br i1 %65, label %.lr.ph62, label %._crit_edge63

.lr.ph59:                                         ; preds = %._crit_edge, %.lr.ph59
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  %67 = load ptr, ptr %66, align 8, !tbaa !5
  %68 = call noundef float @_ZN9QSoftBody11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(360) %29)
  %69 = fmul float %.0, %68
  %70 = call noundef zeroext i1 @_ZN9QSoftBody38GetPassivationOfInternalSpringsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360) %29)
  %71 = load ptr, ptr %67, align 8, !tbaa !30
  %72 = load ptr, ptr %71, align 8
  call void %72(ptr noundef nonnull align 8 dereferenceable(39) %67, float noundef %69, i1 noundef zeroext %70, i1 noundef zeroext false)
  %73 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  %74 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  br i1 %74, label %.lr.ph59, label %._crit_edge60

._crit_edge63:                                    ; preds = %.lr.ph62, %._crit_edge60
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  %75 = add nuw nsw i32 %.05464, 1
  %76 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %77 = icmp slt i32 %75, %76
  br i1 %77, label %.lr.ph65, label %.preheader, !llvm.loop !32

.lr.ph62:                                         ; preds = %._crit_edge60, %.lr.ph62
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #5
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = call noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %79)
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #5
  %82 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #5
  br i1 %82, label %.lr.ph62, label %._crit_edge63

.lr.ph76:                                         ; preds = %.preheader, %._crit_edge74
  %.05575 = phi i32 [ %107, %._crit_edge74 ], [ 0, %.preheader ]
  %83 = call noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293) %29, i32 noundef %.05575)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  %84 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #5
  store ptr %84, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #5
  %85 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #5
  store ptr %85, ptr %11, align 8
  %86 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  br i1 %86, label %.lr.ph67, label %._crit_edge68

._crit_edge68:                                    ; preds = %.lr.ph67, %.lr.ph76
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  %87 = getelementptr inbounds i8, ptr %83, i64 72
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  %88 = call ptr @_ZNSt6vectorIP16QAngleConstraintSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #5
  store ptr %88, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  %89 = call ptr @_ZNSt6vectorIP16QAngleConstraintSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #5
  store ptr %89, ptr %13, align 8
  %90 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  br i1 %90, label %.lr.ph70, label %._crit_edge71

.lr.ph67:                                         ; preds = %.lr.ph76, %.lr.ph67
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #5
  %92 = load ptr, ptr %91, align 8, !tbaa !5
  %93 = call noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %92)
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #5
  %95 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  br i1 %95, label %.lr.ph67, label %._crit_edge68

._crit_edge71:                                    ; preds = %.lr.ph70, %._crit_edge68
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #5
  %96 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #5
  store ptr %96, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %97 = call ptr @_ZNSt6vectorIP9QParticleSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #5
  store ptr %97, ptr %15, align 8
  %98 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #5
  br i1 %98, label %.lr.ph73, label %._crit_edge74

.lr.ph70:                                         ; preds = %._crit_edge68, %.lr.ph70
  %99 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #5
  %100 = load ptr, ptr %99, align 8, !tbaa !5
  %101 = call noundef float @_ZN16QAngleConstraint11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(59) %100)
  %102 = fmul float %.0, %101
  %103 = load ptr, ptr %100, align 8, !tbaa !30
  %104 = load ptr, ptr %103, align 8
  call void %104(ptr noundef nonnull align 8 dereferenceable(59) %100, float noundef %102, i1 noundef zeroext false)
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #5
  %106 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP16QAngleConstraintSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  br i1 %106, label %.lr.ph70, label %._crit_edge71

._crit_edge74:                                    ; preds = %.lr.ph73, %._crit_edge71
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  %107 = add nuw nsw i32 %.05575, 1
  %108 = call noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293) %29)
  %109 = icmp slt i32 %107, %108
  br i1 %109, label %.lr.ph76, label %.loopexit, !llvm.loop !34

.lr.ph73:                                         ; preds = %._crit_edge71, %.lr.ph73
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  %111 = load ptr, ptr %110, align 8, !tbaa !5
  %112 = call noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290) %111)
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP9QParticleSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  %114 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP9QParticleSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #5
  br i1 %114, label %.lr.ph73, label %._crit_edge74

.loopexit:                                        ; preds = %._crit_edge74, %.preheader, %42, %44, %.lr.ph78
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP5QBodySt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %2) #5
  %116 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP5QBodySt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  br i1 %116, label %.lr.ph78, label %._crit_edge79

._crit_edge82:                                    ; preds = %.lr.ph81, %._crit_edge79
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  %117 = call ptr @_ZNSt6vectorIP6QJointSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  store ptr %117, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  %118 = call ptr @_ZNSt6vectorIP6QJointSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  store ptr %118, ptr %19, align 8
  %119 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP6QJointSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  br i1 %119, label %.lr.ph84, label %._crit_edge85

.lr.ph81:                                         ; preds = %._crit_edge79, %.lr.ph81
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  %122 = call noundef float @_ZN7QSpring11GetRigidityEv(ptr noundef nonnull align 8 dereferenceable(39) %121)
  %123 = load ptr, ptr %121, align 8, !tbaa !30
  %124 = load ptr, ptr %123, align 8
  call void %124(ptr noundef nonnull align 8 dereferenceable(39) %121, float noundef %122, i1 noundef zeroext false, i1 noundef zeroext true)
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP7QSpringSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  %126 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP7QSpringSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  br i1 %126, label %.lr.ph81, label %._crit_edge82

._crit_edge85:                                    ; preds = %.lr.ph84, %._crit_edge82
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  ret void

.lr.ph84:                                         ; preds = %._crit_edge82, %.lr.ph84
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP6QJointSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  %128 = load ptr, ptr %127, align 8, !tbaa !5
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  %130 = load ptr, ptr %129, align 8
  call void %130(ptr noundef nonnull align 8 dereferenceable(89) %128)
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP6QJointSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  %132 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP6QJointSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  br i1 %132, label %.lr.ph84, label %._crit_edge85
}

declare noundef i32 @_ZN5QBody12GetMeshCountEv(ptr noundef nonnull align 8 dereferenceable(293)) local_unnamed_addr #4

declare noundef ptr @_ZN5QBody9GetMeshAtEi(ptr noundef nonnull align 8 dereferenceable(293), i32 noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

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

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

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

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

declare noundef ptr @_ZN9QParticle22ClearAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9QSoftBody38GetPassivationOfInternalSpringsEnabledEv(ptr noundef nonnull align 8 dereferenceable(360)) local_unnamed_addr #1 align 2

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

declare noundef ptr @_ZN9QParticle22ApplyAccumulatedForcesEv(ptr noundef nonnull align 8 dereferenceable(290)) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { 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, !15, i64 142}
!10 = !{!"_ZTS5QBody", !11, i64 8, !11, i64 12, !6, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !11, i64 44, !13, i64 48, !14, i64 76, !15, i64 80, !15, i64 81, !15, i64 82, !11, i64 84, !16, i64 88, !15, i64 92, !11, i64 96, !15, i64 100, !15, i64 101, !12, i64 104, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !17, i64 132, !17, i64 136, !15, i64 140, !15, i64 141, !15, i64 142, !17, i64 144, !17, i64 148, !17, i64 152, !15, i64 156, !18, i64 160, !18, i64 192, !20, i64 224, !15, i64 256, !21, i64 264, !25, i64 288, !15, i64 292}
!11 = !{!"float", !7, i64 0}
!12 = !{!"_ZTS7QVector", !11, i64 0, !11, i64 4}
!13 = !{!"_ZTS5QAABB", !12, i64 0, !12, i64 8, !12, i64 16, !11, i64 24}
!14 = !{!"_ZTSN5QBody5ModesE", !7, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN5QBody9BodyTypesE", !7, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSSt8functionIFvP5QBodyEE", !19, i64 0, !6, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!20 = !{!"_ZTSSt8functionIFbP5QBodyNS0_13CollisionInfoEEE", !19, i64 0, !6, i64 24}
!21 = !{!"_ZTSSt6vectorIP5QMeshSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIP5QMeshSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP5QMeshSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSN5QBody16SimulationModelsE", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!10, !15, i64 82}
!29 = !{!10, !11, i64 84}
!30 = !{!31, !31, i64 0}
!31 = !{!"vtable pointer", !8, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass