; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Ragdoll/Ragdoll.ll (ZN3JPH15RagdollSettings9StabilizeEv)

; 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.JPH::Array.27" = type { i64, i64, ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.2 }
%union.anon.2 = type { <4 x float> }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Array.33" = type { i64, i64, ptr }
%"class.JPH::Array.36" = type { i64, i64, ptr }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::RagdollSettings" = type { %"class.JPH::RefTarget", %"class.JPH::Ref.13", %"class.JPH::Array", %"class.JPH::Array.14", %"class.JPH::Array.17", %"class.JPH::Array.20" }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Ref.13" = type { ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.14" = type { i64, i64, ptr }
%"class.JPH::Array.20" = type { i64, i64, ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.3", %"class.JPH::RefConst.4" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::RefConst.3" = type { ptr }
%"class.JPH::RefConst.4" = type { ptr }
%"class.JPH::Skeleton::Joint" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.32 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.32 = type { i64, [8 x i8] }
%struct.Principal = type <{ %"class.JPH::Mat44", %"class.JPH::Vec3", float, [12 x i8] }>

@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [40 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3JPH15RagdollSettings9StabilizeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  %4 = alloca %"class.JPH::Array.27", align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.JPH::MassProperties", align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.JPH::Array.17", align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca %"class.JPH::Array.33", align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca float, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca %"class.JPH::Vec4", align 16
  %40 = alloca float, align 4
  %41 = alloca %"class.JPH::Array.36", align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca %"struct.JPH::AssertLastParam", align 1
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Mat44", align 16
  %62 = alloca %"class.JPH::Mat44", align 16
  %63 = alloca %"class.JPH::Mat44", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Mat44", align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  %66 = load ptr, ptr %3, align 8
  %67 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %68 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %67)
  %69 = call noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %68)
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %71, label %72

71:                                               ; preds = %1
  store i1 true, ptr %2, align 1
  br label %769

72:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 24, ptr %4) #9
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #9
  %73 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %74 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %73)
          to label %75 unwind label %86

75:                                               ; preds = %72
  %76 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %74)
          to label %77 unwind label %86

77:                                               ; preds = %75
  %78 = sext i32 %76 to i64
  invoke void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %78)
          to label %79 unwind label %86

79:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  store i64 0, ptr %7, align 8, !tbaa !9
  br label %80

80:                                               ; preds = %137, %79
  %81 = load i64, ptr %7, align 8, !tbaa !9
  %82 = invoke noundef i64 @_ZNK3JPH5ArrayIbNS_12STLAllocatorIbEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %83 unwind label %90

83:                                               ; preds = %80
  %84 = icmp ult i64 %81, %82
  br i1 %84, label %94, label %85

85:                                               ; preds = %83
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %143

86:                                               ; preds = %77, %75, %72
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %5, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %6, align 4
  br label %768

90:                                               ; preds = %80
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %5, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %6, align 4
  br label %142

94:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %95 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %96 = load i64, ptr %7, align 8, !tbaa !9
  %97 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %95, i64 noundef %96)
          to label %98 unwind label %124

98:                                               ; preds = %94
  store ptr %97, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #9
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = invoke noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %99)
          to label %101 unwind label %128

101:                                              ; preds = %98
  %102 = zext i1 %100 to i8
  store i8 %102, ptr %9, align 1, !tbaa !11
  %103 = load i8, ptr %9, align 1, !tbaa !11, !range !13, !noundef !14
  %104 = trunc i8 %103 to i1
  %105 = xor i1 %104, true
  %106 = load i64, ptr %7, align 8, !tbaa !9
  %107 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %106)
          to label %108 unwind label %128

108:                                              ; preds = %101
  %109 = zext i1 %105 to i8
  store i8 %109, ptr %107, align 1, !tbaa !11
  %110 = load i8, ptr %9, align 1, !tbaa !11, !range !13, !noundef !14
  %111 = trunc i8 %110 to i1
  br i1 %111, label %112, label %136

112:                                              ; preds = %108
  %113 = load ptr, ptr %8, align 8, !tbaa !5
  %114 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %113, i32 0, i32 26
  %115 = load i8, ptr %114, align 16, !tbaa !15
  %116 = icmp ne i8 %115, 2
  br i1 %116, label %117, label %136

117:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 80, ptr %10) #9
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16 %10, ptr noundef nonnull align 16 dereferenceable(256) %118)
          to label %119 unwind label %132

119:                                              ; preds = %117
  %120 = load ptr, ptr %8, align 8, !tbaa !5
  %121 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %120, i32 0, i32 28
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %121, ptr align 16 %10, i64 80, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #9
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %122, i32 0, i32 26
  store i8 2, ptr %123, align 16, !tbaa !15
  br label %136

124:                                              ; preds = %94
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %5, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %6, align 4
  br label %141

128:                                              ; preds = %101, %98
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %5, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %6, align 4
  br label %140

132:                                              ; preds = %117
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %5, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #9
  br label %140

136:                                              ; preds = %119, %112, %108
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %137

137:                                              ; preds = %136
  %138 = load i64, ptr %7, align 8, !tbaa !9
  %139 = add i64 %138, 1
  store i64 %139, ptr %7, align 8, !tbaa !9
  br label %80, !llvm.loop !36

140:                                              ; preds = %132, %128
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  br label %141

141:                                              ; preds = %140, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %142

142:                                              ; preds = %141, %90
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  br label %768

143:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 0, ptr %11, align 4, !tbaa !38
  br label %144

144:                                              ; preds = %759, %143
  %145 = load i32, ptr %11, align 4, !tbaa !38
  %146 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %147 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %146)
          to label %148 unwind label %153

148:                                              ; preds = %144
  %149 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %147)
          to label %150 unwind label %153

150:                                              ; preds = %148
  %151 = icmp slt i32 %145, %149
  br i1 %151, label %157, label %152

152:                                              ; preds = %150
  store i32 5, ptr %12, align 4
  br label %763

153:                                              ; preds = %148, %144
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %5, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %6, align 4
  br label %765

157:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %158 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %159 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %160 unwind label %211

160:                                              ; preds = %157
  %161 = load i32, ptr %11, align 4, !tbaa !38
  %162 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %159, i32 noundef %161)
          to label %163 unwind label %211

163:                                              ; preds = %160
  %164 = getelementptr inbounds %"class.JPH::Skeleton::Joint", ptr %162, i32 0, i32 2
  %165 = load i32, ptr %164, align 8, !tbaa !39
  store i32 %165, ptr %13, align 4, !tbaa !38
  %166 = load i32, ptr %11, align 4, !tbaa !38
  %167 = sext i32 %166 to i64
  %168 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %167)
          to label %169 unwind label %211

169:                                              ; preds = %163
  %170 = load i8, ptr %168, align 1, !tbaa !11, !range !13, !noundef !14
  %171 = trunc i8 %170 to i1
  br i1 %171, label %755, label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %13, align 4, !tbaa !38
  %174 = icmp eq i32 %173, -1
  br i1 %174, label %182, label %175

175:                                              ; preds = %172
  %176 = load i32, ptr %13, align 4, !tbaa !38
  %177 = sext i32 %176 to i64
  %178 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %177)
          to label %179 unwind label %211

179:                                              ; preds = %175
  %180 = load i8, ptr %178, align 1, !tbaa !11, !range !13, !noundef !14
  %181 = trunc i8 %180 to i1
  br i1 %181, label %182, label %755

182:                                              ; preds = %179, %172
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 0, ptr %14, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #9
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  %183 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %184 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %183)
          to label %185 unwind label %215

185:                                              ; preds = %182
  %186 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %184)
          to label %187 unwind label %215

187:                                              ; preds = %185
  %188 = sext i32 %186 to i64
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %188)
          to label %189 unwind label %215

189:                                              ; preds = %187
  %190 = load i32, ptr %11, align 4, !tbaa !38
  %191 = sext i32 %190 to i64
  %192 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %191)
          to label %193 unwind label %215

193:                                              ; preds = %189
  store i8 1, ptr %192, align 1, !tbaa !11
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 4 dereferenceable(4) %11)
          to label %194 unwind label %215

194:                                              ; preds = %193
  br label %195

195:                                              ; preds = %259, %194
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  %196 = load i32, ptr %14, align 4, !tbaa !38
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %14, align 4, !tbaa !38
  %198 = sext i32 %196 to i64
  %199 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %198)
          to label %200 unwind label %219

200:                                              ; preds = %195
  %201 = load i32, ptr %199, align 4, !tbaa !38
  store i32 %201, ptr %16, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !38
  br label %202

202:                                              ; preds = %252, %200
  %203 = load i32, ptr %17, align 4, !tbaa !38
  %204 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %205 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %204)
          to label %206 unwind label %223

206:                                              ; preds = %202
  %207 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %205)
          to label %208 unwind label %223

208:                                              ; preds = %206
  %209 = icmp slt i32 %203, %207
  br i1 %209, label %227, label %210

210:                                              ; preds = %208
  store i32 10, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %255

211:                                              ; preds = %175, %163, %160, %157
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %5, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %6, align 4
  br label %762

215:                                              ; preds = %262, %256, %193, %189, %187, %185, %182
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %5, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %6, align 4
  br label %754

219:                                              ; preds = %195
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %5, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %6, align 4
  br label %267

223:                                              ; preds = %249, %245, %237, %234, %227, %206, %202
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %5, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %267

227:                                              ; preds = %208
  %228 = load i32, ptr %17, align 4, !tbaa !38
  %229 = sext i32 %228 to i64
  %230 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %229)
          to label %231 unwind label %223

231:                                              ; preds = %227
  %232 = load i8, ptr %230, align 1, !tbaa !11, !range !13, !noundef !14
  %233 = trunc i8 %232 to i1
  br i1 %233, label %251, label %234

234:                                              ; preds = %231
  %235 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %236 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %235)
          to label %237 unwind label %223

237:                                              ; preds = %234
  %238 = load i32, ptr %17, align 4, !tbaa !38
  %239 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %236, i32 noundef %238)
          to label %240 unwind label %223

240:                                              ; preds = %237
  %241 = getelementptr inbounds %"class.JPH::Skeleton::Joint", ptr %239, i32 0, i32 2
  %242 = load i32, ptr %241, align 8, !tbaa !39
  %243 = load i32, ptr %16, align 4, !tbaa !38
  %244 = icmp eq i32 %242, %243
  br i1 %244, label %245, label %251

245:                                              ; preds = %240
  %246 = load i32, ptr %17, align 4, !tbaa !38
  %247 = sext i32 %246 to i64
  %248 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %247)
          to label %249 unwind label %223

249:                                              ; preds = %245
  store i8 1, ptr %248, align 1, !tbaa !11
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %250 unwind label %223

250:                                              ; preds = %249
  br label %251

251:                                              ; preds = %250, %240, %231
  br label %252

252:                                              ; preds = %251
  %253 = load i32, ptr %17, align 4, !tbaa !38
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %17, align 4, !tbaa !38
  br label %202, !llvm.loop !43

255:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %256

256:                                              ; preds = %255
  %257 = load i32, ptr %14, align 4, !tbaa !38
  %258 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %259 unwind label %215

259:                                              ; preds = %256
  %260 = trunc i64 %258 to i32
  %261 = icmp slt i32 %257, %260
  br i1 %261, label %195, label %262, !llvm.loop !44

262:                                              ; preds = %259
  %263 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %264 unwind label %215

264:                                              ; preds = %262
  %265 = icmp eq i64 %263, 1
  br i1 %265, label %266, label %268

266:                                              ; preds = %264
  store i32 7, ptr %12, align 4
  br label %747

267:                                              ; preds = %223, %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %754

268:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store float 0x3FE99999A0000000, ptr %18, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store float 0x3FF3333340000000, ptr %19, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store float 1.000000e+00, ptr %20, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #9
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #9
  %269 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %270 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %269)
          to label %271 unwind label %289

271:                                              ; preds = %268
  %272 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %270)
          to label %273 unwind label %289

273:                                              ; preds = %271
  %274 = sext i32 %272 to i64
  invoke void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %274)
          to label %275 unwind label %289

275:                                              ; preds = %273
  %276 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef 0)
          to label %277 unwind label %289

277:                                              ; preds = %275
  %278 = load i32, ptr %276, align 4, !tbaa !38
  %279 = sext i32 %278 to i64
  %280 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %279)
          to label %281 unwind label %289

281:                                              ; preds = %277
  store float 1.000000e+00, ptr %280, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 1, ptr %22, align 4, !tbaa !38
  br label %282

282:                                              ; preds = %348, %281
  %283 = load i32, ptr %22, align 4, !tbaa !38
  %284 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %285 unwind label %293

285:                                              ; preds = %282
  %286 = trunc i64 %284 to i32
  %287 = icmp slt i32 %283, %286
  br i1 %287, label %297, label %288

288:                                              ; preds = %285
  store i32 13, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %366

289:                                              ; preds = %277, %275, %273, %271, %268
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %5, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %6, align 4
  br label %753

293:                                              ; preds = %282
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %5, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %6, align 4
  br label %365

297:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %298 = load i32, ptr %22, align 4, !tbaa !38
  %299 = sext i32 %298 to i64
  %300 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %299)
          to label %301 unwind label %351

301:                                              ; preds = %297
  %302 = load i32, ptr %300, align 4, !tbaa !38
  store i32 %302, ptr %23, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %303 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %304 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %303)
          to label %305 unwind label %355

305:                                              ; preds = %301
  %306 = load i32, ptr %23, align 4, !tbaa !38
  %307 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %304, i32 noundef %306)
          to label %308 unwind label %355

308:                                              ; preds = %305
  %309 = getelementptr inbounds %"class.JPH::Skeleton::Joint", ptr %307, i32 0, i32 2
  %310 = load i32, ptr %309, align 8, !tbaa !39
  store i32 %310, ptr %24, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %311 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %312 = load i32, ptr %23, align 4, !tbaa !38
  %313 = sext i32 %312 to i64
  %314 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %311, i64 noundef %313)
          to label %315 unwind label %359

315:                                              ; preds = %308
  %316 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %314, i32 0, i32 28
  %317 = getelementptr inbounds %"class.JPH::MassProperties", ptr %316, i32 0, i32 0
  %318 = load float, ptr %317, align 16, !tbaa !45
  %319 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %320 = load i32, ptr %24, align 4, !tbaa !38
  %321 = sext i32 %320 to i64
  %322 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %319, i64 noundef %321)
          to label %323 unwind label %359

323:                                              ; preds = %315
  %324 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %322, i32 0, i32 28
  %325 = getelementptr inbounds %"class.JPH::MassProperties", ptr %324, i32 0, i32 0
  %326 = load float, ptr %325, align 16, !tbaa !45
  %327 = fdiv float %318, %326
  store float %327, ptr %25, align 4, !tbaa !34
  %328 = load i32, ptr %24, align 4, !tbaa !38
  %329 = sext i32 %328 to i64
  %330 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %329)
          to label %331 unwind label %359

331:                                              ; preds = %323
  %332 = load float, ptr %330, align 4, !tbaa !34
  %333 = load float, ptr %25, align 4, !tbaa !34
  %334 = invoke noundef float @_ZN3JPH5ClampIfEET_S1_S1_S1_(float noundef %333, float noundef 0x3FE99999A0000000, float noundef 0x3FF3333340000000)
          to label %335 unwind label %359

335:                                              ; preds = %331
  %336 = fmul float %332, %334
  %337 = load i32, ptr %23, align 4, !tbaa !38
  %338 = sext i32 %337 to i64
  %339 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %338)
          to label %340 unwind label %359

340:                                              ; preds = %335
  store float %336, ptr %339, align 4, !tbaa !34
  %341 = load i32, ptr %23, align 4, !tbaa !38
  %342 = sext i32 %341 to i64
  %343 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %342)
          to label %344 unwind label %359

344:                                              ; preds = %340
  %345 = load float, ptr %343, align 4, !tbaa !34
  %346 = load float, ptr %20, align 4, !tbaa !34
  %347 = fadd float %346, %345
  store float %347, ptr %20, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %348

348:                                              ; preds = %344
  %349 = load i32, ptr %22, align 4, !tbaa !38
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %22, align 4, !tbaa !38
  br label %282, !llvm.loop !46

351:                                              ; preds = %297
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %5, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %6, align 4
  br label %364

355:                                              ; preds = %305, %301
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %5, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %6, align 4
  br label %363

359:                                              ; preds = %340, %335, %331, %323, %315, %308
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %5, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %363

363:                                              ; preds = %359, %355
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %364

364:                                              ; preds = %363, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %365

365:                                              ; preds = %364, %293
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %753

366:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store float 0.000000e+00, ptr %26, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  store ptr %15, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %367 = load ptr, ptr %27, align 8, !tbaa !5
  %368 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %367)
          to label %369 unwind label %378

369:                                              ; preds = %366
  store ptr %368, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %370 = load ptr, ptr %27, align 8, !tbaa !5
  %371 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %370)
          to label %372 unwind label %382

372:                                              ; preds = %369
  store ptr %371, ptr %29, align 8, !tbaa !5
  br label %373

373:                                              ; preds = %399, %372
  %374 = load ptr, ptr %28, align 8, !tbaa !5
  %375 = load ptr, ptr %29, align 8, !tbaa !5
  %376 = icmp ne ptr %374, %375
  br i1 %376, label %386, label %377

377:                                              ; preds = %373
  store i32 16, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %408

378:                                              ; preds = %366
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %5, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %6, align 4
  br label %407

382:                                              ; preds = %369
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %5, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %6, align 4
  br label %406

386:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %387 = load ptr, ptr %28, align 8, !tbaa !5
  %388 = load i32, ptr %387, align 4, !tbaa !38
  store i32 %388, ptr %30, align 4, !tbaa !38
  %389 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %390 = load i32, ptr %30, align 4, !tbaa !38
  %391 = sext i32 %390 to i64
  %392 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %389, i64 noundef %391)
          to label %393 unwind label %402

393:                                              ; preds = %386
  %394 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %392, i32 0, i32 28
  %395 = getelementptr inbounds %"class.JPH::MassProperties", ptr %394, i32 0, i32 0
  %396 = load float, ptr %395, align 16, !tbaa !45
  %397 = load float, ptr %26, align 4, !tbaa !34
  %398 = fadd float %397, %396
  store float %398, ptr %26, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %399

399:                                              ; preds = %393
  %400 = load ptr, ptr %28, align 8, !tbaa !5
  %401 = getelementptr inbounds i32, ptr %400, i32 1
  store ptr %401, ptr %28, align 8, !tbaa !5
  br label %373

402:                                              ; preds = %386
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %5, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %406

406:                                              ; preds = %402, %382
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %407

407:                                              ; preds = %406, %378
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %752

408:                                              ; preds = %377
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %409 = load float, ptr %26, align 4, !tbaa !34
  %410 = load float, ptr %20, align 4, !tbaa !34
  %411 = fdiv float %409, %410
  store float %411, ptr %31, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  store ptr %15, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %412 = load ptr, ptr %32, align 8, !tbaa !5
  %413 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %412)
          to label %414 unwind label %423

414:                                              ; preds = %408
  store ptr %413, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %415 = load ptr, ptr %32, align 8, !tbaa !5
  %416 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %415)
          to label %417 unwind label %427

417:                                              ; preds = %414
  store ptr %416, ptr %34, align 8, !tbaa !5
  br label %418

418:                                              ; preds = %471, %417
  %419 = load ptr, ptr %33, align 8, !tbaa !5
  %420 = load ptr, ptr %34, align 8, !tbaa !5
  %421 = icmp ne ptr %419, %420
  br i1 %421, label %431, label %422

422:                                              ; preds = %418
  store i32 18, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %485

423:                                              ; preds = %408
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %5, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %6, align 4
  br label %484

427:                                              ; preds = %414
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %5, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %6, align 4
  br label %483

431:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  %432 = load ptr, ptr %33, align 8, !tbaa !5
  %433 = load i32, ptr %432, align 4, !tbaa !38
  store i32 %433, ptr %35, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %434 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %435 = load i32, ptr %35, align 4, !tbaa !38
  %436 = sext i32 %435 to i64
  %437 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %434, i64 noundef %436)
          to label %438 unwind label %474

438:                                              ; preds = %431
  store ptr %437, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  %439 = load ptr, ptr %36, align 8, !tbaa !5
  %440 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %439, i32 0, i32 28
  %441 = getelementptr inbounds %"class.JPH::MassProperties", ptr %440, i32 0, i32 0
  %442 = load float, ptr %441, align 16, !tbaa !45
  store float %442, ptr %37, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  %443 = load i32, ptr %35, align 4, !tbaa !38
  %444 = sext i32 %443 to i64
  %445 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %444)
          to label %446 unwind label %478

446:                                              ; preds = %438
  %447 = load float, ptr %445, align 4, !tbaa !34
  %448 = load float, ptr %31, align 4, !tbaa !34
  %449 = fmul float %447, %448
  store float %449, ptr %38, align 4, !tbaa !34
  %450 = load float, ptr %38, align 4, !tbaa !34
  %451 = load ptr, ptr %36, align 8, !tbaa !5
  %452 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %451, i32 0, i32 28
  %453 = getelementptr inbounds %"class.JPH::MassProperties", ptr %452, i32 0, i32 0
  store float %450, ptr %453, align 16, !tbaa !45
  %454 = load float, ptr %38, align 4, !tbaa !34
  %455 = load float, ptr %37, align 4, !tbaa !34
  %456 = fdiv float %454, %455
  %457 = load ptr, ptr %36, align 8, !tbaa !5
  %458 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %457, i32 0, i32 28
  %459 = getelementptr inbounds %"class.JPH::MassProperties", ptr %458, i32 0, i32 1
  %460 = invoke noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44mLEf(ptr noundef nonnull align 16 dereferenceable(64) %459, float noundef %456)
          to label %461 unwind label %478

461:                                              ; preds = %446
  %462 = load ptr, ptr %36, align 8, !tbaa !5
  %463 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %462, i32 0, i32 28
  %464 = getelementptr inbounds %"class.JPH::MassProperties", ptr %463, i32 0, i32 1
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %465 unwind label %478

465:                                              ; preds = %461
  %466 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %467 = load double, ptr %466, align 16
  %468 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %469 = load double, ptr %468, align 8
  invoke void @_ZN3JPH5Mat4410SetColumn4EjNS_4Vec4E(ptr noundef nonnull align 16 dereferenceable(64) %464, i32 noundef 3, double %467, double %469)
          to label %470 unwind label %478

470:                                              ; preds = %465
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %471

471:                                              ; preds = %470
  %472 = load ptr, ptr %33, align 8, !tbaa !5
  %473 = getelementptr inbounds i32, ptr %472, i32 1
  store ptr %473, ptr %33, align 8, !tbaa !5
  br label %418

474:                                              ; preds = %431
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %5, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %6, align 4
  br label %482

478:                                              ; preds = %465, %461, %446, %438
  %479 = landingpad { ptr, i32 }
          cleanup
  %480 = extractvalue { ptr, i32 } %479, 0
  store ptr %480, ptr %5, align 8
  %481 = extractvalue { ptr, i32 } %479, 1
  store i32 %481, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  br label %482

482:                                              ; preds = %478, %474
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %483

483:                                              ; preds = %482, %427
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %484

484:                                              ; preds = %483, %423
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %751

485:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  store float 2.000000e+00, ptr %40, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #9
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #9
  %486 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %487 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %486)
          to label %488 unwind label %501

488:                                              ; preds = %485
  invoke void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %487)
          to label %489 unwind label %501

489:                                              ; preds = %488
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  store ptr %15, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %490 = load ptr, ptr %42, align 8, !tbaa !5
  %491 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %490)
          to label %492 unwind label %505

492:                                              ; preds = %489
  store ptr %491, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %493 = load ptr, ptr %42, align 8, !tbaa !5
  %494 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %493)
          to label %495 unwind label %509

495:                                              ; preds = %492
  store ptr %494, ptr %44, align 8, !tbaa !5
  br label %496

496:                                              ; preds = %550, %495
  %497 = load ptr, ptr %43, align 8, !tbaa !5
  %498 = load ptr, ptr %44, align 8, !tbaa !5
  %499 = icmp ne ptr %497, %498
  br i1 %499, label %513, label %500

500:                                              ; preds = %496
  store i32 20, ptr %12, align 4
  br label %553

501:                                              ; preds = %488, %485
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %5, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %6, align 4
  br label %750

505:                                              ; preds = %489
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %5, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %6, align 4
  br label %556

509:                                              ; preds = %492
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %5, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %6, align 4
  br label %555

513:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  %514 = load ptr, ptr %43, align 8, !tbaa !5
  %515 = load i32, ptr %514, align 4, !tbaa !38
  store i32 %515, ptr %45, align 4, !tbaa !38
  %516 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %517 = load i32, ptr %45, align 4, !tbaa !38
  %518 = sext i32 %517 to i64
  %519 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %516, i64 noundef %518)
          to label %520 unwind label %539

520:                                              ; preds = %513
  %521 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %519, i32 0, i32 28
  %522 = load i32, ptr %45, align 4, !tbaa !38
  %523 = sext i32 %522 to i64
  %524 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %523)
          to label %525 unwind label %539

525:                                              ; preds = %520
  %526 = getelementptr inbounds %struct.Principal, ptr %524, i32 0, i32 0
  %527 = load i32, ptr %45, align 4, !tbaa !38
  %528 = sext i32 %527 to i64
  %529 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %528)
          to label %530 unwind label %539

530:                                              ; preds = %525
  %531 = getelementptr inbounds %struct.Principal, ptr %529, i32 0, i32 1
  %532 = invoke noundef zeroext i1 @_ZNK3JPH14MassProperties34DecomposePrincipalMomentsOfInertiaERNS_5Mat44ERNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80) %521, ptr noundef nonnull align 16 dereferenceable(64) %526, ptr noundef nonnull align 16 dereferenceable(16) %531)
          to label %533 unwind label %539

533:                                              ; preds = %530
  br i1 %532, label %546, label %534

534:                                              ; preds = %533
  br label %535

535:                                              ; preds = %534
  %536 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 159, ptr noundef @.str.5)
          to label %537 unwind label %539

537:                                              ; preds = %535
  br i1 %536, label %538, label %543

538:                                              ; preds = %537
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !47
  br label %543

539:                                              ; preds = %535, %530, %525, %520, %513
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %5, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  br label %555

543:                                              ; preds = %538, %537
  br label %544

544:                                              ; preds = %543
  br label %545

545:                                              ; preds = %544
  store i1 false, ptr %2, align 1
  store i32 1, ptr %12, align 4
  br label %547

546:                                              ; preds = %533
  store i32 0, ptr %12, align 4
  br label %547

547:                                              ; preds = %546, %545
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  %548 = load i32, ptr %12, align 4
  switch i32 %548, label %553 [
    i32 0, label %549
  ]

549:                                              ; preds = %547
  br label %550

550:                                              ; preds = %549
  %551 = load ptr, ptr %43, align 8, !tbaa !5
  %552 = getelementptr inbounds i32, ptr %551, i32 1
  store ptr %552, ptr %43, align 8, !tbaa !5
  br label %496

553:                                              ; preds = %547, %500
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  %554 = load i32, ptr %12, align 4
  switch i32 %554, label %746 [
    i32 20, label %557
  ]

555:                                              ; preds = %539, %509
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %556

556:                                              ; preds = %555, %505
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %750

557:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %558 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %559 unwind label %566

559:                                              ; preds = %557
  %560 = trunc i64 %558 to i32
  %561 = sub nsw i32 %560, 1
  store i32 %561, ptr %47, align 4, !tbaa !38
  br label %562

562:                                              ; preds = %605, %559
  %563 = load i32, ptr %47, align 4, !tbaa !38
  %564 = icmp sgt i32 %563, 0
  br i1 %564, label %570, label %565

565:                                              ; preds = %562
  store i32 24, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %618

566:                                              ; preds = %557
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %5, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %6, align 4
  br label %617

570:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %571 = load i32, ptr %47, align 4, !tbaa !38
  %572 = sext i32 %571 to i64
  %573 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %572)
          to label %574 unwind label %608

574:                                              ; preds = %570
  %575 = load i32, ptr %573, align 4, !tbaa !38
  store i32 %575, ptr %48, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %576 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 1
  %577 = invoke noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %576)
          to label %578 unwind label %612

578:                                              ; preds = %574
  %579 = load i32, ptr %48, align 4, !tbaa !38
  %580 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %577, i32 noundef %579)
          to label %581 unwind label %612

581:                                              ; preds = %578
  %582 = getelementptr inbounds %"class.JPH::Skeleton::Joint", ptr %580, i32 0, i32 2
  %583 = load i32, ptr %582, align 8, !tbaa !39
  store i32 %583, ptr %49, align 4, !tbaa !38
  %584 = load i32, ptr %48, align 4, !tbaa !38
  %585 = sext i32 %584 to i64
  %586 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %585)
          to label %587 unwind label %612

587:                                              ; preds = %581
  %588 = getelementptr inbounds %struct.Principal, ptr %586, i32 0, i32 1
  %589 = invoke noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %588, i32 noundef 0)
          to label %590 unwind label %612

590:                                              ; preds = %587
  %591 = load i32, ptr %48, align 4, !tbaa !38
  %592 = sext i32 %591 to i64
  %593 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %592)
          to label %594 unwind label %612

594:                                              ; preds = %590
  %595 = getelementptr inbounds %struct.Principal, ptr %593, i32 0, i32 2
  %596 = load float, ptr %595, align 16, !tbaa !48
  %597 = fadd float %589, %596
  %598 = load i32, ptr %49, align 4, !tbaa !38
  %599 = sext i32 %598 to i64
  %600 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %599)
          to label %601 unwind label %612

601:                                              ; preds = %594
  %602 = getelementptr inbounds %struct.Principal, ptr %600, i32 0, i32 2
  %603 = load float, ptr %602, align 16, !tbaa !48
  %604 = fadd float %603, %597
  store float %604, ptr %602, align 16, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %605

605:                                              ; preds = %601
  %606 = load i32, ptr %47, align 4, !tbaa !38
  %607 = add nsw i32 %606, -1
  store i32 %607, ptr %47, align 4, !tbaa !38
  br label %562, !llvm.loop !50

608:                                              ; preds = %570
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %5, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %6, align 4
  br label %616

612:                                              ; preds = %594, %590, %587, %581, %578, %574
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %5, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %616

616:                                              ; preds = %612, %608
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %617

617:                                              ; preds = %616, %566
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %750

618:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  store ptr %15, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %619 = load ptr, ptr %50, align 8, !tbaa !5
  %620 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %619)
          to label %621 unwind label %630

621:                                              ; preds = %618
  store ptr %620, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %622 = load ptr, ptr %50, align 8, !tbaa !5
  %623 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %622)
          to label %624 unwind label %634

624:                                              ; preds = %621
  store ptr %623, ptr %52, align 8, !tbaa !5
  br label %625

625:                                              ; preds = %738, %624
  %626 = load ptr, ptr %51, align 8, !tbaa !5
  %627 = load ptr, ptr %52, align 8, !tbaa !5
  %628 = icmp ne ptr %626, %627
  br i1 %628, label %638, label %629

629:                                              ; preds = %625
  store i32 27, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %745

630:                                              ; preds = %618
  %631 = landingpad { ptr, i32 }
          cleanup
  %632 = extractvalue { ptr, i32 } %631, 0
  store ptr %632, ptr %5, align 8
  %633 = extractvalue { ptr, i32 } %631, 1
  store i32 %633, ptr %6, align 4
  br label %744

634:                                              ; preds = %621
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %5, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %6, align 4
  br label %743

638:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  %639 = load ptr, ptr %51, align 8, !tbaa !5
  %640 = load i32, ptr %639, align 4, !tbaa !38
  store i32 %640, ptr %53, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %641 = getelementptr inbounds %"class.JPH::RagdollSettings", ptr %66, i32 0, i32 2
  %642 = load i32, ptr %53, align 4, !tbaa !38
  %643 = sext i32 %642 to i64
  %644 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %641, i64 noundef %643)
          to label %645 unwind label %711

645:                                              ; preds = %638
  store ptr %644, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %646 = load i32, ptr %53, align 4, !tbaa !38
  %647 = sext i32 %646 to i64
  %648 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %647)
          to label %649 unwind label %715

649:                                              ; preds = %645
  store ptr %648, ptr %55, align 8, !tbaa !5
  %650 = load ptr, ptr %55, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.Principal, ptr %650, i32 0, i32 2
  %652 = load float, ptr %651, align 16, !tbaa !48
  %653 = fcmp une float %652, 0.000000e+00
  br i1 %653, label %654, label %737

654:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %655 = load ptr, ptr %55, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.Principal, ptr %655, i32 0, i32 1
  %657 = invoke noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %656, i32 noundef 0)
          to label %658 unwind label %719

658:                                              ; preds = %654
  %659 = fmul float 2.000000e+00, %657
  store float %659, ptr %57, align 4, !tbaa !34
  %660 = load ptr, ptr %55, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.Principal, ptr %660, i32 0, i32 2
  %662 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %57, ptr noundef nonnull align 4 dereferenceable(4) %661)
          to label %663 unwind label %719

663:                                              ; preds = %658
  %664 = load float, ptr %662, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  store float %664, ptr %56, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #9
  %665 = load ptr, ptr %55, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.Principal, ptr %665, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 %666, i64 16, i1 false), !tbaa.struct !51
  %667 = load float, ptr %56, align 4, !tbaa !34
  %668 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %667)
          to label %669 unwind label %723

669:                                              ; preds = %663
  %670 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %671 = getelementptr inbounds %union.anon, ptr %670, i32 0, i32 0
  %672 = getelementptr inbounds { double, double }, ptr %671, i32 0, i32 0
  %673 = extractvalue { double, double } %668, 0
  store double %673, ptr %672, align 16
  %674 = getelementptr inbounds { double, double }, ptr %671, i32 0, i32 1
  %675 = extractvalue { double, double } %668, 1
  store double %675, ptr %674, align 8
  %676 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %677 = load double, ptr %676, align 16
  %678 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %679 = load double, ptr %678, align 8
  %680 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %681 = load double, ptr %680, align 16
  %682 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %683 = load double, ptr %682, align 8
  %684 = invoke { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double %677, double %679, double %681, double %683)
          to label %685 unwind label %723

685:                                              ; preds = %669
  %686 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %687 = getelementptr inbounds %union.anon, ptr %686, i32 0, i32 0
  %688 = getelementptr inbounds { double, double }, ptr %687, i32 0, i32 0
  %689 = extractvalue { double, double } %684, 0
  store double %689, ptr %688, align 16
  %690 = getelementptr inbounds { double, double }, ptr %687, i32 0, i32 1
  %691 = extractvalue { double, double } %684, 1
  store double %691, ptr %690, align 8
  %692 = load ptr, ptr %55, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.Principal, ptr %692, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %693, ptr align 16 %58, i64 16, i1 false), !tbaa.struct !51
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr %62) #9
  %694 = load ptr, ptr %55, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.Principal, ptr %694, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 64, ptr %63) #9
  %696 = load ptr, ptr %55, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.Principal, ptr %696, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %64, ptr align 16 %697, i64 16, i1 false), !tbaa.struct !51
  %698 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %699 = load double, ptr %698, align 16
  %700 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %701 = load double, ptr %700, align 8
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %63, double %699, double %701)
          to label %702 unwind label %727

702:                                              ; preds = %685
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %62, ptr noundef nonnull align 16 dereferenceable(64) %695, ptr noundef nonnull align 16 dereferenceable(64) %63)
          to label %703 unwind label %727

703:                                              ; preds = %702
  call void @llvm.lifetime.start.p0(i64 64, ptr %65) #9
  %704 = load ptr, ptr %55, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.Principal, ptr %704, i32 0, i32 0
  invoke void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %65, ptr noundef nonnull align 16 dereferenceable(64) %705)
          to label %706 unwind label %731

706:                                              ; preds = %703
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %61, ptr noundef nonnull align 16 dereferenceable(64) %62, ptr noundef nonnull align 16 dereferenceable(64) %65)
          to label %707 unwind label %731

707:                                              ; preds = %706
  %708 = load ptr, ptr %54, align 8, !tbaa !5
  %709 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %708, i32 0, i32 28
  %710 = getelementptr inbounds %"class.JPH::MassProperties", ptr %709, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %710, ptr align 16 %61, i64 64, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 64, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %737

711:                                              ; preds = %638
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %5, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %6, align 4
  br label %742

715:                                              ; preds = %645
  %716 = landingpad { ptr, i32 }
          cleanup
  %717 = extractvalue { ptr, i32 } %716, 0
  store ptr %717, ptr %5, align 8
  %718 = extractvalue { ptr, i32 } %716, 1
  store i32 %718, ptr %6, align 4
  br label %741

719:                                              ; preds = %658, %654
  %720 = landingpad { ptr, i32 }
          cleanup
  %721 = extractvalue { ptr, i32 } %720, 0
  store ptr %721, ptr %5, align 8
  %722 = extractvalue { ptr, i32 } %720, 1
  store i32 %722, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %736

723:                                              ; preds = %669, %663
  %724 = landingpad { ptr, i32 }
          cleanup
  %725 = extractvalue { ptr, i32 } %724, 0
  store ptr %725, ptr %5, align 8
  %726 = extractvalue { ptr, i32 } %724, 1
  store i32 %726, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  br label %736

727:                                              ; preds = %702, %685
  %728 = landingpad { ptr, i32 }
          cleanup
  %729 = extractvalue { ptr, i32 } %728, 0
  store ptr %729, ptr %5, align 8
  %730 = extractvalue { ptr, i32 } %728, 1
  store i32 %730, ptr %6, align 4
  br label %735

731:                                              ; preds = %706, %703
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %5, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %65) #9
  br label %735

735:                                              ; preds = %731, %727
  call void @llvm.lifetime.end.p0(i64 64, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %61) #9
  br label %736

736:                                              ; preds = %735, %723, %719
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %741

737:                                              ; preds = %707, %649
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %738

738:                                              ; preds = %737
  %739 = load ptr, ptr %51, align 8, !tbaa !5
  %740 = getelementptr inbounds i32, ptr %739, i32 1
  store ptr %740, ptr %51, align 8, !tbaa !5
  br label %625

741:                                              ; preds = %736, %715
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %742

742:                                              ; preds = %741, %711
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  br label %743

743:                                              ; preds = %742, %634
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %744

744:                                              ; preds = %743, %630
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %750

745:                                              ; preds = %629
  store i32 0, ptr %12, align 4
  br label %746

746:                                              ; preds = %745, %553
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %747

747:                                              ; preds = %746, %266
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  %748 = load i32, ptr %12, align 4
  switch i32 %748, label %756 [
    i32 0, label %749
  ]

749:                                              ; preds = %747
  br label %755

750:                                              ; preds = %744, %617, %556, %501
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %751

751:                                              ; preds = %750, %484
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %752

752:                                              ; preds = %751, %407
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %753

753:                                              ; preds = %752, %365, %289
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  br label %754

754:                                              ; preds = %753, %267, %215
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %762

755:                                              ; preds = %749, %179, %169
  store i32 0, ptr %12, align 4
  br label %756

756:                                              ; preds = %755, %747
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  %757 = load i32, ptr %12, align 4
  switch i32 %757, label %763 [
    i32 0, label %758
    i32 7, label %759
  ]

758:                                              ; preds = %756
  br label %759

759:                                              ; preds = %758, %756
  %760 = load i32, ptr %11, align 4, !tbaa !38
  %761 = add nsw i32 %760, 1
  store i32 %761, ptr %11, align 4, !tbaa !38
  br label %144, !llvm.loop !53

762:                                              ; preds = %754, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %765

763:                                              ; preds = %756, %152
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  %764 = load i32, ptr %12, align 4
  switch i32 %764, label %767 [
    i32 5, label %766
  ]

765:                                              ; preds = %762, %153
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %768

766:                                              ; preds = %763
  store i1 true, ptr %2, align 1
  store i32 1, ptr %12, align 4
  br label %767

767:                                              ; preds = %766, %763
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #9
  br label %769

768:                                              ; preds = %765, %142, %86
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %4) #9
  br label %771

769:                                              ; preds = %767, %71
  %770 = load i1, ptr %2, align 1
  ret i1 %770

771:                                              ; preds = %768
  %772 = load ptr, ptr %5, align 8
  %773 = load i32, ptr %6, align 4
  %774 = insertvalue { ptr, i32 } poison, ptr %772, 0
  %775 = insertvalue { ptr, i32 } %774, i32 %773, 1
  resume { ptr, i32 } %775
}

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256)) #3 align 2

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

declare void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16, ptr noundef nonnull align 16 dereferenceable(256)) #5

; 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 noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH5ClampIfEET_S1_S1_S1_(float noundef, float noundef, float noundef) #7

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44mLEf(ptr noundef nonnull align 16 dereferenceable(64), float noundef) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4410SetColumn4EjNS_4Vec4E(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, double, double) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef, float noundef) unnamed_addr #8 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

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

declare noundef zeroext i1 @_ZNK3JPH14MassProperties34DecomposePrincipalMomentsOfInertiaERNS_5Mat44ERNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(16)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16), i32 noundef) #7 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double, double, double, double) #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64)) #7 align 2

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 = { 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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!16, !28, i64 144}
!16 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !17, i64 0, !18, i64 16, !17, i64 32, !17, i64 48, !10, i64 64, !20, i64 72, !21, i64 80, !24, i64 96, !25, i64 97, !12, i64 98, !12, i64 99, !12, i64 100, !12, i64 101, !12, i64 102, !26, i64 103, !12, i64 104, !12, i64 105, !27, i64 108, !27, i64 112, !27, i64 116, !27, i64 120, !27, i64 124, !27, i64 128, !27, i64 132, !23, i64 136, !23, i64 140, !28, i64 144, !27, i64 148, !29, i64 160, !31, i64 240, !32, i64 248}
!17 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!18 = !{!"_ZTSN3JPH4QuatE", !19, i64 0}
!19 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!20 = !{!"short", !7, i64 0}
!21 = !{!"_ZTSN3JPH14CollisionGroupE", !22, i64 0, !23, i64 8, !23, i64 12}
!22 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!23 = !{!"int", !7, i64 0}
!24 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!25 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!26 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!27 = !{!"float", !7, i64 0}
!28 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!29 = !{!"_ZTSN3JPH14MassPropertiesE", !27, i64 0, !30, i64 16}
!30 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!31 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!32 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!33 = !{i64 0, i64 4, !34, i64 16, i64 64, !35}
!34 = !{!27, !27, i64 0}
!35 = !{!7, !7, i64 0}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!23, !23, i64 0}
!39 = !{!40, !23, i64 64}
!40 = !{!"_ZTSN3JPH8Skeleton5JointE", !41, i64 0, !41, i64 32, !23, i64 64}
!41 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !42, i64 0, !10, i64 8, !7, i64 16}
!42 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !6, i64 0}
!43 = distinct !{!43, !37}
!44 = distinct !{!44, !37}
!45 = !{!16, !27, i64 160}
!46 = distinct !{!46, !37}
!47 = !{i64 2159894760}
!48 = !{!49, !27, i64 80}
!49 = !{!"_ZTSZN3JPH15RagdollSettings9StabilizeEvE9Principal", !30, i64 0, !17, i64 64, !27, i64 80}
!50 = distinct !{!50, !37}
!51 = !{i64 0, i64 16, !35}
!52 = !{i64 0, i64 64, !35}
!53 = distinct !{!53, !37}


; 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.JPH::Array.27" = type { i64, i64, ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.2 }
%union.anon.2 = type { <4 x float> }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Array.33" = type { i64, i64, ptr }
%"class.JPH::Array.36" = type { i64, i64, ptr }

@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [40 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3JPH15RagdollSettings9StabilizeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Array.27", align 8
  %3 = alloca %"class.JPH::MassProperties", align 16
  %4 = alloca i32, align 4
  %5 = alloca %"class.JPH::Array.17", align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.JPH::Array.33", align 8
  %8 = alloca %"class.JPH::Vec4", align 16
  %9 = alloca %"class.JPH::Array.36", align 8
  %10 = alloca float, align 4
  %11 = alloca %"class.JPH::Mat44", align 16
  %12 = alloca %"class.JPH::Mat44", align 16
  %13 = alloca %"class.JPH::Mat44", align 16
  %14 = alloca %"class.JPH::Mat44", align 16
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = tail call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %17 = tail call noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %16)
  %18 = icmp eq i32 %17, 0
  br i1 %18, label %343, label %19

19:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #9
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #9
  %20 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %21 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %22 unwind label %28

22:                                               ; preds = %19
  %23 = sext i32 %21 to i64
  invoke void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %23)
          to label %.preheader187 unwind label %28

.preheader187:                                    ; preds = %22
  %24 = call noundef i64 @_ZNK3JPH5ArrayIbNS_12STLAllocatorIbEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2)
  %.not251 = icmp eq i64 %24, 0
  br i1 %.not251, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader187
  %25 = getelementptr inbounds i8, ptr %0, i64 16
  br label %30

._crit_edge:                                      ; preds = %50, %.preheader187
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #9
  %26 = getelementptr inbounds i8, ptr %0, i64 16
  %27 = getelementptr inbounds i8, ptr %8, i64 8
  br label %54

28:                                               ; preds = %22, %19
  %29 = landingpad { ptr, i32 }
          cleanup
  br label %342

30:                                               ; preds = %.lr.ph, %50
  %.0132217 = phi i64 [ 0, %.lr.ph ], [ %51, %50 ]
  %31 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.0132217)
          to label %32 unwind label %44

32:                                               ; preds = %30
  %33 = call noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256) %31)
  %34 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %.0132217)
          to label %35 unwind label %46

35:                                               ; preds = %32
  %36 = xor i1 %33, true
  %37 = zext i1 %36 to i8
  store i8 %37, ptr %34, align 1, !tbaa !5
  br i1 %33, label %38, label %50

38:                                               ; preds = %35
  %39 = getelementptr inbounds i8, ptr %31, i64 144
  %40 = load i8, ptr %39, align 16, !tbaa !9
  %.not175 = icmp eq i8 %40, 2
  br i1 %.not175, label %50, label %41

41:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %3) #9
  invoke void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::MassProperties") align 16 %3, ptr noundef nonnull align 16 dereferenceable(256) %31)
          to label %42 unwind label %48

42:                                               ; preds = %41
  %43 = getelementptr inbounds i8, ptr %31, i64 160
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(80) %43, ptr noundef nonnull align 16 dereferenceable(80) %3, i64 80, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #9
  store i8 2, ptr %39, align 16, !tbaa !9
  br label %50

44:                                               ; preds = %30
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %342

46:                                               ; preds = %32
  %47 = landingpad { ptr, i32 }
          cleanup
  br label %342

48:                                               ; preds = %41
  %49 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #9
  br label %342

50:                                               ; preds = %42, %38, %35
  %51 = add nuw i64 %.0132217, 1
  %52 = call noundef i64 @_ZNK3JPH5ArrayIbNS_12STLAllocatorIbEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2)
  %53 = icmp ult i64 %51, %52
  br i1 %53, label %30, label %._crit_edge, !llvm.loop !32

54:                                               ; preds = %338, %._crit_edge
  %storemerge = phi i32 [ 0, %._crit_edge ], [ %340, %338 ]
  store i32 %storemerge, ptr %4, align 4, !tbaa !34
  %55 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %56 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %57 unwind label %58

57:                                               ; preds = %54
  %.not286 = icmp sge i32 %storemerge, %56
  br i1 %.not286, label %.loopexit312, label %60

58:                                               ; preds = %54
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %341

60:                                               ; preds = %57
  %61 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %62 = load i32, ptr %4, align 4, !tbaa !34
  %63 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %61, i32 noundef %62)
          to label %64 unwind label %103

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %63, i64 64
  %66 = load i32, ptr %65, align 8, !tbaa !35
  %67 = load i32, ptr %4, align 4, !tbaa !34
  %68 = sext i32 %67 to i64
  %69 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %68)
          to label %70 unwind label %103

70:                                               ; preds = %64
  %71 = load i8, ptr %69, align 1, !tbaa !5, !range !39, !noundef !40
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %338, label %73

73:                                               ; preds = %70
  %74 = icmp eq i32 %66, -1
  br i1 %74, label %81, label %75

75:                                               ; preds = %73
  %76 = sext i32 %66 to i64
  %77 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %76)
          to label %78 unwind label %103

78:                                               ; preds = %75
  %79 = load i8, ptr %77, align 1, !tbaa !5, !range !39, !noundef !40
  %80 = trunc nuw i8 %79 to i1
  br i1 %80, label %81, label %338

81:                                               ; preds = %78, %73
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %82 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %83 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %84 unwind label %105

84:                                               ; preds = %81
  %85 = sext i32 %83 to i64
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %85)
          to label %86 unwind label %105

86:                                               ; preds = %84
  %87 = load i32, ptr %4, align 4, !tbaa !34
  %88 = sext i32 %87 to i64
  %89 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %88)
          to label %90 unwind label %105

90:                                               ; preds = %86
  store i8 1, ptr %89, align 1, !tbaa !5
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %.preheader unwind label %105

.preheader:                                       ; preds = %90, %99
  %indvars.iv = phi i64 [ %indvars.iv.next, %99 ], [ 0, %90 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %91 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %indvars.iv)
          to label %92 unwind label %107

92:                                               ; preds = %.preheader
  %93 = load i32, ptr %91, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #9
  br label %94

94:                                               ; preds = %131, %92
  %storemerge150 = phi i32 [ 0, %92 ], [ %133, %131 ]
  store i32 %storemerge150, ptr %6, align 4, !tbaa !34
  %95 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %96 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %97 unwind label %109

97:                                               ; preds = %94
  %98 = icmp slt i32 %storemerge150, %96
  br i1 %98, label %111, label %99

99:                                               ; preds = %97
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  %100 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %sext = shl i64 %100, 32
  %101 = ashr exact i64 %sext, 32
  %102 = icmp slt i64 %indvars.iv.next, %101
  br i1 %102, label %.preheader, label %134, !llvm.loop !41

103:                                              ; preds = %75, %64, %60
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %341

105:                                              ; preds = %90, %86, %84, %81
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %337

107:                                              ; preds = %.preheader
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %337

109:                                              ; preds = %130, %126, %118, %111, %94
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  br label %337

111:                                              ; preds = %97
  %112 = load i32, ptr %6, align 4, !tbaa !34
  %113 = sext i32 %112 to i64
  %114 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %113)
          to label %115 unwind label %109

115:                                              ; preds = %111
  %116 = load i8, ptr %114, align 1, !tbaa !5, !range !39, !noundef !40
  %117 = trunc nuw i8 %116 to i1
  br i1 %117, label %131, label %118

118:                                              ; preds = %115
  %119 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %120 = load i32, ptr %6, align 4, !tbaa !34
  %121 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %119, i32 noundef %120)
          to label %122 unwind label %109

122:                                              ; preds = %118
  %123 = getelementptr inbounds i8, ptr %121, i64 64
  %124 = load i32, ptr %123, align 8, !tbaa !35
  %125 = icmp eq i32 %124, %93
  br i1 %125, label %126, label %131

126:                                              ; preds = %122
  %127 = load i32, ptr %6, align 4, !tbaa !34
  %128 = sext i32 %127 to i64
  %129 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %128)
          to label %130 unwind label %109

130:                                              ; preds = %126
  store i8 1, ptr %129, align 1, !tbaa !5
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %131 unwind label %109

131:                                              ; preds = %115, %122, %130
  %132 = load i32, ptr %6, align 4, !tbaa !34
  %133 = add nsw i32 %132, 1
  br label %94, !llvm.loop !42

134:                                              ; preds = %99
  %135 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %136 = icmp eq i64 %135, 1
  br i1 %136, label %.thread181, label %137

.thread181:                                       ; preds = %134
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %338

137:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  %138 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %139 = invoke noundef i32 @_ZNK3JPH8Skeleton13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(32) %138)
          to label %140 unwind label %154

140:                                              ; preds = %137
  %141 = sext i32 %139 to i64
  invoke void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %141)
          to label %142 unwind label %154

142:                                              ; preds = %140
  %143 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef 0)
          to label %144 unwind label %154

144:                                              ; preds = %142
  %145 = load i32, ptr %143, align 4, !tbaa !34
  %146 = sext i32 %145 to i64
  %147 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %146)
          to label %148 unwind label %154

148:                                              ; preds = %144
  store float 1.000000e+00, ptr %147, align 4, !tbaa !30
  %149 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %150 = trunc i64 %149 to i32
  %151 = icmp sgt i32 %150, 1
  br i1 %151, label %.lr.ph221, label %._crit_edge222

._crit_edge222:                                   ; preds = %184, %148
  %.0140.lcssa = phi float [ 1.000000e+00, %148 ], [ %186, %184 ]
  %152 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %153 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not223 = icmp eq ptr %152, %153
  br i1 %.not223, label %._crit_edge228, label %.lr.ph227

154:                                              ; preds = %144, %142, %140, %137
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %336

.lr.ph221:                                        ; preds = %148, %184
  %indvars.iv280 = phi i64 [ %indvars.iv.next281, %184 ], [ 1, %148 ]
  %.0140219 = phi float [ %186, %184 ], [ 1.000000e+00, %148 ]
  %156 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %indvars.iv280)
          to label %157 unwind label %190

157:                                              ; preds = %.lr.ph221
  %158 = load i32, ptr %156, align 4, !tbaa !34
  %159 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %160 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %159, i32 noundef %158)
          to label %161 unwind label %192

161:                                              ; preds = %157
  %162 = getelementptr inbounds i8, ptr %160, i64 64
  %163 = load i32, ptr %162, align 8, !tbaa !35
  %164 = sext i32 %158 to i64
  %165 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %164)
          to label %166 unwind label %194

166:                                              ; preds = %161
  %167 = getelementptr inbounds i8, ptr %165, i64 160
  %168 = load float, ptr %167, align 16, !tbaa !43
  %169 = sext i32 %163 to i64
  %170 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %169)
          to label %171 unwind label %194

171:                                              ; preds = %166
  %172 = getelementptr inbounds i8, ptr %170, i64 160
  %173 = load float, ptr %172, align 16, !tbaa !43
  %174 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %169)
          to label %175 unwind label %194

175:                                              ; preds = %171
  %176 = fdiv float %168, %173
  %177 = load float, ptr %174, align 4, !tbaa !30
  %178 = invoke noundef float @_ZN3JPH5ClampIfEET_S1_S1_S1_(float noundef %176, float noundef 0x3FE99999A0000000, float noundef 0x3FF3333340000000)
          to label %179 unwind label %194

179:                                              ; preds = %175
  %180 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %164)
          to label %181 unwind label %194

181:                                              ; preds = %179
  %182 = fmul float %177, %178
  store float %182, ptr %180, align 4, !tbaa !30
  %183 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %164)
          to label %184 unwind label %194

184:                                              ; preds = %181
  %185 = load float, ptr %183, align 4, !tbaa !30
  %186 = fadd float %.0140219, %185
  %indvars.iv.next281 = add nuw nsw i64 %indvars.iv280, 1
  %187 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %sext287 = shl i64 %187, 32
  %188 = ashr exact i64 %sext287, 32
  %189 = icmp slt i64 %indvars.iv.next281, %188
  br i1 %189, label %.lr.ph221, label %._crit_edge222, !llvm.loop !44

190:                                              ; preds = %.lr.ph221
  %191 = landingpad { ptr, i32 }
          cleanup
  br label %336

192:                                              ; preds = %157
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %336

194:                                              ; preds = %181, %179, %175, %171, %166, %161
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %336

._crit_edge228:                                   ; preds = %202, %._crit_edge222
  %.0142.lcssa = phi float [ 0.000000e+00, %._crit_edge222 ], [ %205, %202 ]
  %196 = fdiv float %.0142.lcssa, %.0140.lcssa
  %197 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %198 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not151230 = icmp eq ptr %197, %198
  br i1 %.not151230, label %._crit_edge234, label %.lr.ph233

.lr.ph227:                                        ; preds = %._crit_edge222, %202
  %.0142225 = phi float [ %205, %202 ], [ 0.000000e+00, %._crit_edge222 ]
  %.0143224 = phi ptr [ %206, %202 ], [ %152, %._crit_edge222 ]
  %199 = load i32, ptr %.0143224, align 4, !tbaa !34
  %200 = sext i32 %199 to i64
  %201 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %200)
          to label %202 unwind label %207

202:                                              ; preds = %.lr.ph227
  %203 = getelementptr inbounds i8, ptr %201, i64 160
  %204 = load float, ptr %203, align 16, !tbaa !43
  %205 = fadd float %.0142225, %204
  %206 = getelementptr inbounds i8, ptr %.0143224, i64 4
  %.not = icmp eq ptr %206, %153
  br i1 %.not, label %._crit_edge228, label %.lr.ph227

207:                                              ; preds = %.lr.ph227
  %208 = landingpad { ptr, i32 }
          cleanup
  br label %336

._crit_edge234:                                   ; preds = %227, %._crit_edge228
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #9
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  %209 = call noundef i64 @_ZNK3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  invoke void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %209)
          to label %233 unwind label %238

.lr.ph233:                                        ; preds = %._crit_edge228, %227
  %.0144231 = phi ptr [ %228, %227 ], [ %197, %._crit_edge228 ]
  %210 = load i32, ptr %.0144231, align 4, !tbaa !34
  %211 = sext i32 %210 to i64
  %212 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %211)
          to label %213 unwind label %229

213:                                              ; preds = %.lr.ph233
  %214 = getelementptr inbounds i8, ptr %212, i64 160
  %215 = load float, ptr %214, align 16, !tbaa !43
  %216 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %211)
          to label %217 unwind label %231

217:                                              ; preds = %213
  %218 = load float, ptr %216, align 4, !tbaa !30
  %219 = fmul float %196, %218
  store float %219, ptr %214, align 16, !tbaa !43
  %220 = fdiv float %219, %215
  %221 = getelementptr inbounds i8, ptr %212, i64 176
  %222 = invoke noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44mLEf(ptr noundef nonnull align 16 dereferenceable(64) %221, float noundef %220)
          to label %223 unwind label %231

223:                                              ; preds = %217
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %224 unwind label %231

224:                                              ; preds = %223
  %225 = load double, ptr %8, align 16
  %226 = load double, ptr %27, align 8
  invoke void @_ZN3JPH5Mat4410SetColumn4EjNS_4Vec4E(ptr noundef nonnull align 16 dereferenceable(64) %221, i32 noundef 3, double %225, double %226)
          to label %227 unwind label %231

227:                                              ; preds = %224
  %228 = getelementptr inbounds i8, ptr %.0144231, i64 4
  %.not151 = icmp eq ptr %228, %198
  br i1 %.not151, label %._crit_edge234, label %.lr.ph233

229:                                              ; preds = %.lr.ph233
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %336

231:                                              ; preds = %224, %223, %217, %213
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %336

233:                                              ; preds = %._crit_edge234
  %234 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %235 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not152235 = icmp eq ptr %234, %235
  br i1 %.not152235, label %._crit_edge240, label %.lr.ph239

236:                                              ; preds = %.critedge
  %237 = getelementptr inbounds i8, ptr %.0145236, i64 4
  %.not152 = icmp eq ptr %237, %235
  br i1 %.not152, label %._crit_edge240, label %.lr.ph239

238:                                              ; preds = %._crit_edge234
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %335

.lr.ph239:                                        ; preds = %233, %236
  %.0145236 = phi ptr [ %237, %236 ], [ %234, %233 ]
  %240 = load i32, ptr %.0145236, align 4, !tbaa !34
  %241 = sext i32 %240 to i64
  %242 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %241)
          to label %243 unwind label %.loopexit

243:                                              ; preds = %.lr.ph239
  %244 = getelementptr inbounds i8, ptr %242, i64 160
  %245 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %241)
          to label %246 unwind label %.loopexit

246:                                              ; preds = %243
  %247 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %241)
          to label %248 unwind label %.loopexit

248:                                              ; preds = %246
  %249 = getelementptr inbounds i8, ptr %247, i64 64
  %250 = invoke noundef zeroext i1 @_ZNK3JPH14MassProperties34DecomposePrincipalMomentsOfInertiaERNS_5Mat44ERNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80) %244, ptr noundef nonnull align 16 dereferenceable(64) %245, ptr noundef nonnull align 16 dereferenceable(16) %249)
          to label %.critedge unwind label %.loopexit

.critedge:                                        ; preds = %248
  br i1 %250, label %236, label %251

251:                                              ; preds = %.critedge
  %252 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 159, ptr noundef nonnull @.str.5)
          to label %253 unwind label %.loopexit.split-lp

253:                                              ; preds = %251
  br i1 %252, label %254, label %.critedge311

254:                                              ; preds = %253
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !45
  br label %.critedge311

.loopexit:                                        ; preds = %.lr.ph239, %243, %246, %248
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %335

.loopexit.split-lp:                               ; preds = %251
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %335

._crit_edge240:                                   ; preds = %236, %233
  %255 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %256 = trunc i64 %255 to i32
  %257 = icmp sgt i32 %256, 1
  br i1 %257, label %.lr.ph245.preheader, label %._crit_edge246

.lr.ph245.preheader:                              ; preds = %._crit_edge240
  %258 = and i64 %255, 2147483647
  br label %.lr.ph245

._crit_edge246:                                   ; preds = %281, %._crit_edge240
  %259 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %260 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %.not153247 = icmp eq ptr %259, %260
  br i1 %.not153247, label %.thread, label %.lr.ph250

.lr.ph245:                                        ; preds = %.lr.ph245.preheader, %281
  %indvars.iv283 = phi i64 [ %258, %.lr.ph245.preheader ], [ %indvars.iv.next284, %281 ]
  %indvars.iv.next284 = add nsw i64 %indvars.iv283, -1
  %261 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %indvars.iv.next284)
          to label %262 unwind label %287

262:                                              ; preds = %.lr.ph245
  %263 = load i32, ptr %261, align 4, !tbaa !34
  %264 = call noundef ptr @_ZNK3JPH3RefINS_8SkeletonEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %265 = invoke noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32) %264, i32 noundef %263)
          to label %266 unwind label %289

266:                                              ; preds = %262
  %267 = getelementptr inbounds i8, ptr %265, i64 64
  %268 = load i32, ptr %267, align 8, !tbaa !35
  %269 = sext i32 %263 to i64
  %270 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %269)
          to label %271 unwind label %289

271:                                              ; preds = %266
  %272 = getelementptr inbounds i8, ptr %270, i64 64
  %273 = invoke noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %272, i32 noundef 0)
          to label %274 unwind label %289

274:                                              ; preds = %271
  %275 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %269)
          to label %276 unwind label %289

276:                                              ; preds = %274
  %277 = getelementptr inbounds i8, ptr %275, i64 80
  %278 = load float, ptr %277, align 16, !tbaa !46
  %279 = sext i32 %268 to i64
  %280 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %279)
          to label %281 unwind label %289

281:                                              ; preds = %276
  %282 = fadd float %273, %278
  %283 = getelementptr inbounds i8, ptr %280, i64 80
  %284 = load float, ptr %283, align 16, !tbaa !46
  %285 = fadd float %282, %284
  store float %285, ptr %283, align 16, !tbaa !46
  %286 = icmp ugt i64 %indvars.iv283, 2
  br i1 %286, label %.lr.ph245, label %._crit_edge246, !llvm.loop !48

287:                                              ; preds = %.lr.ph245
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %335

289:                                              ; preds = %276, %274, %271, %266, %262
  %290 = landingpad { ptr, i32 }
          cleanup
  br label %335

.lr.ph250:                                        ; preds = %._crit_edge246, %333
  %.0147248 = phi ptr [ %334, %333 ], [ %259, %._crit_edge246 ]
  %291 = load i32, ptr %.0147248, align 4, !tbaa !34
  %292 = sext i32 %291 to i64
  %293 = invoke noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %292)
          to label %294 unwind label %320

294:                                              ; preds = %.lr.ph250
  %295 = invoke noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %292)
          to label %296 unwind label %322

296:                                              ; preds = %294
  %297 = getelementptr inbounds i8, ptr %295, i64 80
  %298 = load float, ptr %297, align 16, !tbaa !46
  %299 = fcmp une float %298, 0.000000e+00
  br i1 %299, label %300, label %333

300:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #9
  %301 = getelementptr inbounds i8, ptr %295, i64 64
  %302 = invoke noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %301, i32 noundef 0)
          to label %303 unwind label %324

303:                                              ; preds = %300
  %304 = fmul float %302, 2.000000e+00
  store float %304, ptr %10, align 4, !tbaa !30
  %305 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %297)
  %306 = load float, ptr %305, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  %.sroa.06.0.copyload = load double, ptr %301, align 16
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %295, i64 72
  %.sroa.27.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !31
  %307 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %306)
          to label %308 unwind label %326

308:                                              ; preds = %303
  %309 = extractvalue { double, double } %307, 0
  %310 = extractvalue { double, double } %307, 1
  %311 = invoke { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double %.sroa.06.0.copyload, double %.sroa.27.0.copyload, double %309, double %310)
          to label %312 unwind label %326

312:                                              ; preds = %308
  %313 = extractvalue { double, double } %311, 0
  %314 = extractvalue { double, double } %311, 1
  store double %313, ptr %301, align 16
  store double %314, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #9
  invoke void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %13, double %313, double %314)
          to label %315 unwind label %328

315:                                              ; preds = %312
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %12, ptr noundef nonnull align 16 dereferenceable(64) %295, ptr noundef nonnull align 16 dereferenceable(64) %13)
          to label %316 unwind label %328

316:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #9
  invoke void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %14, ptr noundef nonnull align 16 dereferenceable(64) %295)
          to label %317 unwind label %330

317:                                              ; preds = %316
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %11, ptr noundef nonnull align 16 dereferenceable(64) %12, ptr noundef nonnull align 16 dereferenceable(64) %14)
          to label %318 unwind label %330

318:                                              ; preds = %317
  %319 = getelementptr inbounds i8, ptr %293, i64 176
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %319, ptr noundef nonnull align 16 dereferenceable(64) %11, i64 64, i1 false), !tbaa.struct !49
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #9
  br label %333

320:                                              ; preds = %.lr.ph250
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %335

322:                                              ; preds = %294
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %335

324:                                              ; preds = %300
  %325 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  br label %335

326:                                              ; preds = %308, %303
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %335

328:                                              ; preds = %315, %312
  %329 = landingpad { ptr, i32 }
          cleanup
  br label %332

330:                                              ; preds = %317, %316
  %331 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #9
  br label %332

332:                                              ; preds = %330, %328
  %.pn = phi { ptr, i32 } [ %331, %330 ], [ %329, %328 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #9
  br label %335

333:                                              ; preds = %318, %296
  %334 = getelementptr inbounds i8, ptr %.0147248, i64 4
  %.not153 = icmp eq ptr %334, %260
  br i1 %.not153, label %.thread, label %.lr.ph250

.thread:                                          ; preds = %333, %._crit_edge246
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %338

335:                                              ; preds = %.loopexit, %.loopexit.split-lp, %320, %324, %326, %332, %322, %287, %289, %238
  %.pn158.pn = phi { ptr, i32 } [ %239, %238 ], [ %290, %289 ], [ %288, %287 ], [ %321, %320 ], [ %323, %322 ], [ %.pn, %332 ], [ %327, %326 ], [ %325, %324 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  br label %336

336:                                              ; preds = %207, %229, %231, %335, %190, %194, %192, %154
  %.pn166.pn.pn = phi { ptr, i32 } [ %155, %154 ], [ %191, %190 ], [ %195, %194 ], [ %193, %192 ], [ %208, %207 ], [ %.pn158.pn, %335 ], [ %232, %231 ], [ %230, %229 ]
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %337

337:                                              ; preds = %107, %109, %336, %105
  %.pn170.pn = phi { ptr, i32 } [ %.pn166.pn.pn, %336 ], [ %106, %105 ], [ %110, %109 ], [ %108, %107 ]
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %341

338:                                              ; preds = %.thread, %70, %78, %.thread181
  %339 = load i32, ptr %4, align 4, !tbaa !34
  %340 = add nsw i32 %339, 1
  br label %54, !llvm.loop !50

.critedge311:                                     ; preds = %254, %253
  call void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  call void @_ZN3JPH5ArrayIfNS_12STLAllocatorIfEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %.loopexit312

.loopexit312:                                     ; preds = %57, %.critedge311
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #9
  br label %343

341:                                              ; preds = %103, %337, %58
  %.pn170.pn.pn.pn = phi { ptr, i32 } [ %59, %58 ], [ %.pn170.pn, %337 ], [ %104, %103 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  br label %342

342:                                              ; preds = %44, %48, %46, %341, %28
  %.pn176.pn.pn = phi { ptr, i32 } [ %.pn170.pn.pn.pn, %341 ], [ %29, %28 ], [ %45, %44 ], [ %49, %48 ], [ %47, %46 ]
  call void @_ZN3JPH5ArrayIbNS_12STLAllocatorIbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #9
  resume { ptr, i32 } %.pn176.pn.pn

343:                                              ; preds = %1, %.loopexit312
  %.9 = phi i1 [ %.not286, %.loopexit312 ], [ true, %1 ]
  ret i1 %.9
}

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(264) ptr @_ZN3JPH5ArrayINS_15RagdollSettings4PartENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH20BodyCreationSettings17HasMassPropertiesEv(ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #3 align 2

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

declare void @_ZNK3JPH20BodyCreationSettings17GetMassPropertiesEv(ptr dead_on_unwind writable sret(%"class.JPH::MassProperties") align 16, ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #5

; Function Attrs: mustprogress 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 noundef nonnull align 8 dereferenceable(68) ptr @_ZN3JPH8Skeleton8GetJointEi(ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH5ClampIfEET_S1_S1_S1_(float noundef, float noundef, float noundef) local_unnamed_addr #7

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44mLEf(ptr noundef nonnull align 16 dereferenceable(64), float noundef) local_unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4410SetColumn4EjNS_4Vec4E(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, double, double) local_unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef, float noundef) unnamed_addr #8 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

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

declare noundef zeroext i1 @_ZNK3JPH14MassProperties34DecomposePrincipalMomentsOfInertiaERNS_5Mat44ERNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(80), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 16 dereferenceable(84) ptr @_ZN3JPH5ArrayIZNS_15RagdollSettings9StabilizeEvE9PrincipalNS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16), i32 noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec34sMaxES0_S0_(double, double, double, double) local_unnamed_addr #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) local_unnamed_addr #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #8 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat446sScaleENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) local_unnamed_addr #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH5Mat4411Inversed3x3Ev(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #7 align 2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 = { 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 = !{!"bool", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !24, i64 144}
!10 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !11, i64 0, !12, i64 16, !11, i64 32, !11, i64 48, !14, i64 64, !15, i64 72, !16, i64 80, !20, i64 96, !21, i64 97, !6, i64 98, !6, i64 99, !6, i64 100, !6, i64 101, !6, i64 102, !22, i64 103, !6, i64 104, !6, i64 105, !23, i64 108, !23, i64 112, !23, i64 116, !23, i64 120, !23, i64 124, !23, i64 128, !23, i64 132, !19, i64 136, !19, i64 140, !24, i64 144, !23, i64 148, !25, i64 160, !27, i64 240, !28, i64 248}
!11 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!12 = !{!"_ZTSN3JPH4QuatE", !13, i64 0}
!13 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = !{!"_ZTSN3JPH14CollisionGroupE", !17, i64 0, !19, i64 8, !19, i64 12}
!17 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !18, i64 0}
!18 = !{!"any pointer", !7, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!21 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!22 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!25 = !{!"_ZTSN3JPH14MassPropertiesE", !23, i64 0, !26, i64 16}
!26 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !18, i64 0}
!28 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !18, i64 0}
!29 = !{i64 0, i64 4, !30, i64 16, i64 64, !31}
!30 = !{!23, !23, i64 0}
!31 = !{!7, !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!19, !19, i64 0}
!35 = !{!36, !19, i64 64}
!36 = !{!"_ZTSN3JPH8Skeleton5JointE", !37, i64 0, !37, i64 32, !19, i64 64}
!37 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEE", !38, i64 0, !14, i64 8, !7, i64 16}
!38 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEE12_Alloc_hiderE", !18, i64 0}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = distinct !{!41, !33}
!42 = distinct !{!42, !33}
!43 = !{!10, !23, i64 160}
!44 = distinct !{!44, !33}
!45 = !{i64 2159894760}
!46 = !{!47, !23, i64 80}
!47 = !{!"_ZTSZN3JPH15RagdollSettings9StabilizeEvE9Principal", !26, i64 0, !11, i64 64, !23, i64 80}
!48 = distinct !{!48, !33}
!49 = !{i64 0, i64 64, !31}
!50 = distinct !{!50, !33}


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