; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/SoftBody (SoftBodyMotionProperties)

; 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::ScopeExit" = type { %class.anon, i8, [7 x i8] }
%class.anon = type <{ ptr, ptr, i32, [4 x i8] }>
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::SoftBodyMotionProperties" = type <{ %"class.JPH::MotionProperties.base", [2 x i8], %"class.JPH::RefConst", %"class.JPH::Array", %"class.JPH::Array.1", %"class.JPH::Array.4", %"class.JPH::Array.7", %"class.JPH::AABox", %"class.JPH::AABox", i32, i32, float, float, i8, %"struct.std::atomic", i8, i8, [12 x i8] }>
%"class.JPH::MotionProperties.base" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Float3", %"class.JPH::Float3", float, float, float, float, float, float, i32, i32, i8, i8, i8, i8, i8, [3 x i8], [3 x %"class.JPH::Sphere"], float, i8, i8 }>
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Sphere" = type { %"class.JPH::Float3", float }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.1" = type { i64, i64, ptr }
%"class.JPH::Array.4" = type { i64, i64, ptr }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.JPH::SoftBodySharedSettings" = type { %"class.JPH::RefTarget", %"class.JPH::Array.13", %"class.JPH::Array.16", %"class.JPH::Array.19", %"class.JPH::Array.22", %"class.JPH::Array.25", %"class.JPH::Array.28", %"class.JPH::Array.31", %"class.JPH::Array.34", %"class.JPH::Array.37", float, %"class.JPH::Array.40", %"class.JPH::Array.43", %"class.JPH::Array.46" }
%"class.JPH::RefTarget" = type { %"struct.std::atomic.11" }
%"struct.std::atomic.11" = type { %"struct.std::__atomic_base.12" }
%"struct.std::__atomic_base.12" = type { i32 }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.JPH::Array.16" = type { i64, i64, ptr }
%"class.JPH::Array.19" = type { i64, i64, ptr }
%"class.JPH::Array.22" = type { i64, i64, ptr }
%"class.JPH::Array.25" = type { i64, i64, ptr }
%"class.JPH::Array.28" = type { i64, i64, ptr }
%"class.JPH::Array.31" = type { i64, i64, ptr }
%"class.JPH::Array.34" = type { i64, i64, ptr }
%"class.JPH::Array.37" = type { i64, i64, ptr }
%"class.JPH::Array.40" = type { i64, i64, ptr }
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::SoftBodySharedSettings::InvBind" = type { i32, %"class.JPH::Mat44" }
%"class.JPH::SoftBodySharedSettings::Skinned" = type { i32, [4 x %"class.JPH::SoftBodySharedSettings::SkinWeight"], float, float, float, i32 }
%"class.JPH::SoftBodySharedSettings::SkinWeight" = type { i32, float }
%"struct.JPH::SoftBodySharedSettings::Vertex" = type { %"class.JPH::Float3", %"class.JPH::Float3", float }
%"struct.JPH::SoftBodyMotionProperties::SkinState" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"struct.JPH::SoftBodySharedSettings::Face" = type { [3 x i32], i32 }
%"class.JPH::SoftBodyVertex" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Plane", i32, i8, float, float }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }

@.str.1 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 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: 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) #1

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64), double, double) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #2 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #5 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS2_jbRNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(372) %0, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #6 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %"class.JPH::ScopeExit", align 8
  %17 = alloca %class.anon, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca %"struct.JPH::AssertLastParam", align 1
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca i32, align 4
  %26 = alloca %"struct.JPH::AssertLastParam", align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca %"struct.JPH::AssertLastParam", align 1
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"struct.JPH::AssertLastParam", align 1
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %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::Vec3", align 16
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  %78 = zext i1 %4 to i8
  store i8 %78, ptr %11, align 1, !tbaa !11
  store ptr %5, ptr %12, align 8, !tbaa !5
  %79 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %80 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %81 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %80)
  %82 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %81, i32 0, i32 7
  %83 = call noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7InvBindENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %82)
  %84 = trunc i64 %83 to i32
  store i32 %84, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %85 = load i32, ptr %13, align 4, !tbaa !9
  %86 = zext i32 %85 to i64
  %87 = mul i64 %86, 64
  %88 = trunc i64 %87 to i32
  store i32 %88, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %89 = load ptr, ptr %12, align 8, !tbaa !5
  %90 = load i32, ptr %14, align 4, !tbaa !9
  %91 = load ptr, ptr %89, align 8, !tbaa !13
  %92 = getelementptr inbounds ptr, ptr %91, i64 2
  %93 = load ptr, ptr %92, align 8
  %94 = call noundef ptr %93(ptr noundef nonnull align 8 dereferenceable(8) %89, i32 noundef %90)
  store ptr %94, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #9
  %95 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 0
  %96 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %96, ptr %95, align 8, !tbaa !5
  %97 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 1
  %98 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %98, ptr %97, align 8, !tbaa !15
  %99 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 2
  %100 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %100, ptr %99, align 8, !tbaa !17
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0EC2EOS8_"(ptr noundef nonnull align 8 dereferenceable(25) %16, ptr noundef nonnull align 8 dereferenceable(20) %17)
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = load i32, ptr %13, align 4, !tbaa !9
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds %"class.JPH::Mat44", ptr %101, i64 %103
  store ptr %104, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %105 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %106 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %107 unwind label %117

107:                                              ; preds = %6
  %108 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %106, i32 0, i32 7
  %109 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7InvBindENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %108)
          to label %110 unwind label %117

110:                                              ; preds = %107
  store ptr %109, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %111, ptr %22, align 8, !tbaa !5
  br label %112

112:                                              ; preds = %149, %110
  %113 = load ptr, ptr %22, align 8, !tbaa !5
  %114 = load ptr, ptr %18, align 8, !tbaa !5
  %115 = icmp ult ptr %113, %114
  br i1 %115, label %121, label %116

116:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %159

117:                                              ; preds = %107, %6
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %20, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %21, align 4
  br label %786

121:                                              ; preds = %112
  br label %122

122:                                              ; preds = %121
  %123 = load ptr, ptr %19, align 8, !tbaa !5
  %124 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %123, i32 0, i32 0
  %125 = load i32, ptr %124, align 16, !tbaa !18
  %126 = load i32, ptr %10, align 4, !tbaa !9
  %127 = icmp ult i32 %125, %126
  br i1 %127, label %136, label %128

128:                                              ; preds = %122
  %129 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 1036)
          to label %130 unwind label %132

130:                                              ; preds = %128
  br i1 %129, label %131, label %136

131:                                              ; preds = %130
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !21
  br label %136

132:                                              ; preds = %128
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %20, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %21, align 4
  br label %158

136:                                              ; preds = %131, %130, %122
  br label %137

137:                                              ; preds = %136
  br label %138

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #9
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 16, !tbaa !18
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds %"class.JPH::Mat44", ptr %139, i64 %143
  %145 = load ptr, ptr %19, align 8, !tbaa !5
  %146 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %145, i32 0, i32 1
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %24, ptr noundef nonnull align 16 dereferenceable(64) %144, ptr noundef nonnull align 16 dereferenceable(64) %146)
          to label %147 unwind label %154

147:                                              ; preds = %138
  %148 = load ptr, ptr %22, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %148, ptr align 16 %24, i64 64, i1 false), !tbaa.struct !22
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #9
  br label %149

149:                                              ; preds = %147
  %150 = load ptr, ptr %22, align 8, !tbaa !5
  %151 = getelementptr inbounds %"class.JPH::Mat44", ptr %150, i32 1
  store ptr %151, ptr %22, align 8, !tbaa !5
  %152 = load ptr, ptr %19, align 8, !tbaa !5
  %153 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %152, i32 1
  store ptr %153, ptr %19, align 8, !tbaa !5
  br label %112, !llvm.loop !24

154:                                              ; preds = %138
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %20, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #9
  br label %158

158:                                              ; preds = %154, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %786

159:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %160 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %161 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %160)
          to label %162 unwind label %178

162:                                              ; preds = %159
  %163 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %161, i32 0, i32 1
  %164 = invoke noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %163)
          to label %165 unwind label %178

165:                                              ; preds = %162
  %166 = trunc i64 %164 to i32
  store i32 %166, ptr %25, align 4, !tbaa !9
  br label %167

167:                                              ; preds = %165
  %168 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %169 = invoke noundef i64 @_ZNK3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %168)
          to label %170 unwind label %178

170:                                              ; preds = %167
  %171 = load i32, ptr %25, align 4, !tbaa !9
  %172 = zext i32 %171 to i64
  %173 = icmp eq i64 %169, %172
  br i1 %173, label %182, label %174

174:                                              ; preds = %170
  %175 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 1043)
          to label %176 unwind label %178

176:                                              ; preds = %174
  br i1 %175, label %177, label %182

177:                                              ; preds = %176
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !26
  br label %182

178:                                              ; preds = %174, %167, %162, %159
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %20, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %21, align 4
  br label %785

182:                                              ; preds = %177, %176, %170
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %185 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %186 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %185)
          to label %187 unwind label %206

187:                                              ; preds = %184
  %188 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %186, i32 0, i32 1
  %189 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %188)
          to label %190 unwind label %206

190:                                              ; preds = %187
  store ptr %189, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %191 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %192 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %191)
          to label %193 unwind label %210

193:                                              ; preds = %190
  %194 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %192, i32 0, i32 6
  store ptr %194, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %195 = load ptr, ptr %28, align 8, !tbaa !5
  %196 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %195)
          to label %197 unwind label %214

197:                                              ; preds = %193
  store ptr %196, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %198 = load ptr, ptr %28, align 8, !tbaa !5
  %199 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %198)
          to label %200 unwind label %218

200:                                              ; preds = %197
  store ptr %199, ptr %30, align 8, !tbaa !5
  br label %201

201:                                              ; preds = %369, %200
  %202 = load ptr, ptr %29, align 8, !tbaa !5
  %203 = load ptr, ptr %30, align 8, !tbaa !5
  %204 = icmp ne ptr %202, %203
  br i1 %204, label %222, label %205

205:                                              ; preds = %201
  store i32 9, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %382

206:                                              ; preds = %187, %184
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %20, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %21, align 4
  br label %784

210:                                              ; preds = %190
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %20, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %21, align 4
  br label %381

214:                                              ; preds = %193
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %20, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %21, align 4
  br label %380

218:                                              ; preds = %197
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %20, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %21, align 4
  br label %379

222:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %223 = load ptr, ptr %29, align 8, !tbaa !5
  store ptr %223, ptr %32, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %222
  %225 = load ptr, ptr %32, align 8, !tbaa !5
  %226 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %225, i32 0, i32 0
  %227 = load i32, ptr %226, align 4, !tbaa !27
  %228 = load i32, ptr %25, align 4, !tbaa !9
  %229 = icmp ult i32 %227, %228
  br i1 %229, label %238, label %230

230:                                              ; preds = %224
  %231 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1048)
          to label %232 unwind label %234

232:                                              ; preds = %230
  br i1 %231, label %233, label %238

233:                                              ; preds = %232
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !30
  br label %238

234:                                              ; preds = %230
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %20, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %21, align 4
  br label %378

238:                                              ; preds = %233, %232, %224
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  %241 = load ptr, ptr %27, align 8, !tbaa !5
  %242 = load ptr, ptr %32, align 8, !tbaa !5
  %243 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %242, i32 0, i32 0
  %244 = load i32, ptr %243, align 4, !tbaa !27
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %241, i64 %245
  %247 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %246, i32 0, i32 0
  %248 = invoke { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12) %247)
          to label %249 unwind label %276

249:                                              ; preds = %240
  %250 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %251 = getelementptr inbounds %union.anon.0, ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds { double, double }, ptr %251, i32 0, i32 0
  %253 = extractvalue { double, double } %248, 0
  store double %253, ptr %252, align 16
  %254 = getelementptr inbounds { double, double }, ptr %251, i32 0, i32 1
  %255 = extractvalue { double, double } %248, 1
  store double %255, ptr %254, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #9
  %256 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %257 unwind label %280

257:                                              ; preds = %249
  %258 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %259 = getelementptr inbounds %union.anon.0, ptr %258, i32 0, i32 0
  %260 = getelementptr inbounds { double, double }, ptr %259, i32 0, i32 0
  %261 = extractvalue { double, double } %256, 0
  store double %261, ptr %260, align 16
  %262 = getelementptr inbounds { double, double }, ptr %259, i32 0, i32 1
  %263 = extractvalue { double, double } %256, 1
  store double %263, ptr %262, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %264 = load ptr, ptr %32, align 8, !tbaa !5
  %265 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %264, i32 0, i32 1
  store ptr %265, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %266 = load ptr, ptr %36, align 8, !tbaa !5
  %267 = getelementptr inbounds [4 x %"class.JPH::SoftBodySharedSettings::SkinWeight"], ptr %266, i64 0, i64 0
  store ptr %267, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %268 = load ptr, ptr %36, align 8, !tbaa !5
  %269 = getelementptr inbounds [4 x %"class.JPH::SoftBodySharedSettings::SkinWeight"], ptr %268, i64 0, i64 0
  %270 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %269, i64 4
  store ptr %270, ptr %38, align 8, !tbaa !5
  br label %271

271:                                              ; preds = %351, %257
  %272 = load ptr, ptr %37, align 8, !tbaa !5
  %273 = load ptr, ptr %38, align 8, !tbaa !5
  %274 = icmp ne ptr %272, %273
  br i1 %274, label %284, label %275

275:                                              ; preds = %271
  store i32 13, ptr %31, align 4
  br label %354

276:                                              ; preds = %240
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %20, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %21, align 4
  br label %377

280:                                              ; preds = %249
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %20, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %21, align 4
  br label %376

284:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %285 = load ptr, ptr %37, align 8, !tbaa !5
  store ptr %285, ptr %39, align 8, !tbaa !5
  %286 = load ptr, ptr %39, align 8, !tbaa !5
  %287 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %286, i32 0, i32 1
  %288 = load float, ptr %287, align 4, !tbaa !31
  %289 = fcmp oeq float %288, 0.000000e+00
  br i1 %289, label %290, label %291

290:                                              ; preds = %284
  store i32 13, ptr %31, align 4
  br label %348

291:                                              ; preds = %284
  br label %292

292:                                              ; preds = %291
  %293 = load ptr, ptr %39, align 8, !tbaa !5
  %294 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %293, i32 0, i32 0
  %295 = load i32, ptr %294, align 4, !tbaa !33
  %296 = load i32, ptr %13, align 4, !tbaa !9
  %297 = icmp ult i32 %295, %296
  br i1 %297, label %306, label %298

298:                                              ; preds = %292
  %299 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 1059)
          to label %300 unwind label %302

300:                                              ; preds = %298
  br i1 %299, label %301, label %306

301:                                              ; preds = %300
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !34
  br label %306

302:                                              ; preds = %335, %323, %308, %298
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %20, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %376

306:                                              ; preds = %301, %300, %292
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307
  %309 = load ptr, ptr %39, align 8, !tbaa !5
  %310 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %309, i32 0, i32 1
  %311 = load float, ptr %310, align 4, !tbaa !31
  %312 = load ptr, ptr %15, align 8, !tbaa !5
  %313 = load ptr, ptr %39, align 8, !tbaa !5
  %314 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %313, i32 0, i32 0
  %315 = load i32, ptr %314, align 4, !tbaa !33
  %316 = zext i32 %315 to i64
  %317 = getelementptr inbounds %"class.JPH::Mat44", ptr %312, i64 %316
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %43, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !35
  %318 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %319 = load double, ptr %318, align 16
  %320 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %321 = load double, ptr %320, align 8
  %322 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %317, double %319, double %321)
          to label %323 unwind label %302

323:                                              ; preds = %308
  %324 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %325 = getelementptr inbounds %union.anon.0, ptr %324, i32 0, i32 0
  %326 = getelementptr inbounds { double, double }, ptr %325, i32 0, i32 0
  %327 = extractvalue { double, double } %322, 0
  store double %327, ptr %326, align 16
  %328 = getelementptr inbounds { double, double }, ptr %325, i32 0, i32 1
  %329 = extractvalue { double, double } %322, 1
  store double %329, ptr %328, align 8
  %330 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %331 = load double, ptr %330, align 16
  %332 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %333 = load double, ptr %332, align 8
  %334 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %311, double %331, double %333)
          to label %335 unwind label %302

335:                                              ; preds = %323
  %336 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %337 = getelementptr inbounds %union.anon.0, ptr %336, i32 0, i32 0
  %338 = getelementptr inbounds { double, double }, ptr %337, i32 0, i32 0
  %339 = extractvalue { double, double } %334, 0
  store double %339, ptr %338, align 16
  %340 = getelementptr inbounds { double, double }, ptr %337, i32 0, i32 1
  %341 = extractvalue { double, double } %334, 1
  store double %341, ptr %340, align 8
  %342 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %343 = load double, ptr %342, align 16
  %344 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %345 = load double, ptr %344, align 8
  %346 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %35, double %343, double %345)
          to label %347 unwind label %302

347:                                              ; preds = %335
  store i32 0, ptr %31, align 4
  br label %348

348:                                              ; preds = %347, %290
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  %349 = load i32, ptr %31, align 4
  switch i32 %349, label %354 [
    i32 0, label %350
  ]

350:                                              ; preds = %348
  br label %351

351:                                              ; preds = %350
  %352 = load ptr, ptr %37, align 8, !tbaa !5
  %353 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %352, i32 1
  store ptr %353, ptr %37, align 8, !tbaa !5
  br label %271

354:                                              ; preds = %348, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %355

355:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %356 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %357 = load ptr, ptr %32, align 8, !tbaa !5
  %358 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %357, i32 0, i32 0
  %359 = load i32, ptr %358, align 4, !tbaa !27
  %360 = zext i32 %359 to i64
  %361 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %356, i64 noundef %360)
          to label %362 unwind label %372

362:                                              ; preds = %355
  store ptr %361, ptr %44, align 8, !tbaa !5
  %363 = load ptr, ptr %44, align 8, !tbaa !5
  %364 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %363, i32 0, i32 1
  %365 = load ptr, ptr %44, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %365, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %366, ptr align 16 %364, i64 16, i1 false), !tbaa.struct !35
  %367 = load ptr, ptr %44, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %367, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %368, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %369

369:                                              ; preds = %362
  %370 = load ptr, ptr %29, align 8, !tbaa !5
  %371 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %370, i32 1
  store ptr %371, ptr %29, align 8, !tbaa !5
  br label %201

372:                                              ; preds = %355
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %20, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %376

376:                                              ; preds = %372, %302, %280
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  br label %377

377:                                              ; preds = %376, %276
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br label %378

378:                                              ; preds = %377, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %379

379:                                              ; preds = %378, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %380

380:                                              ; preds = %379, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %381

381:                                              ; preds = %380, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %784

382:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %383 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %384 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %383)
          to label %385 unwind label %398

385:                                              ; preds = %382
  %386 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %384, i32 0, i32 6
  store ptr %386, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %387 = load ptr, ptr %45, align 8, !tbaa !5
  %388 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %387)
          to label %389 unwind label %402

389:                                              ; preds = %385
  store ptr %388, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %390 = load ptr, ptr %45, align 8, !tbaa !5
  %391 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %390)
          to label %392 unwind label %406

392:                                              ; preds = %389
  store ptr %391, ptr %47, align 8, !tbaa !5
  br label %393

393:                                              ; preds = %615, %392
  %394 = load ptr, ptr %46, align 8, !tbaa !5
  %395 = load ptr, ptr %47, align 8, !tbaa !5
  %396 = icmp ne ptr %394, %395
  br i1 %396, label %410, label %397

397:                                              ; preds = %393
  store i32 17, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %627

398:                                              ; preds = %382
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %20, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %21, align 4
  br label %626

402:                                              ; preds = %385
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %20, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %21, align 4
  br label %625

406:                                              ; preds = %389
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %20, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %21, align 4
  br label %624

410:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %411 = load ptr, ptr %46, align 8, !tbaa !5
  store ptr %411, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #9
  %412 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %413 unwind label %547

413:                                              ; preds = %410
  %414 = getelementptr inbounds %"class.JPH::Vec3", ptr %49, i32 0, i32 0
  %415 = getelementptr inbounds %union.anon.0, ptr %414, i32 0, i32 0
  %416 = getelementptr inbounds { double, double }, ptr %415, i32 0, i32 0
  %417 = extractvalue { double, double } %412, 0
  store double %417, ptr %416, align 16
  %418 = getelementptr inbounds { double, double }, ptr %415, i32 0, i32 1
  %419 = extractvalue { double, double } %412, 1
  store double %419, ptr %418, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %420 = load ptr, ptr %48, align 8, !tbaa !5
  %421 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %420, i32 0, i32 5
  %422 = load i32, ptr %421, align 4, !tbaa !36
  %423 = lshr i32 %422, 24
  store i32 %423, ptr %50, align 4, !tbaa !9
  %424 = load i32, ptr %50, align 4, !tbaa !9
  %425 = icmp ugt i32 %424, 0
  br i1 %425, label %426, label %606

426:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %427 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %428 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %427)
          to label %429 unwind label %551

429:                                              ; preds = %426
  %430 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %428, i32 0, i32 13
  %431 = load ptr, ptr %48, align 8, !tbaa !5
  %432 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %431, i32 0, i32 5
  %433 = load i32, ptr %432, align 4, !tbaa !36
  %434 = and i32 %433, 16777215
  %435 = zext i32 %434 to i64
  %436 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %430, i64 noundef %435)
          to label %437 unwind label %551

437:                                              ; preds = %429
  store ptr %436, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %438 = load ptr, ptr %51, align 8, !tbaa !5
  %439 = load i32, ptr %50, align 4, !tbaa !9
  %440 = zext i32 %439 to i64
  %441 = getelementptr inbounds i32, ptr %438, i64 %440
  store ptr %441, ptr %52, align 8, !tbaa !5
  br label %442

442:                                              ; preds = %544, %437
  %443 = load ptr, ptr %51, align 8, !tbaa !5
  %444 = load ptr, ptr %52, align 8, !tbaa !5
  %445 = icmp ult ptr %443, %444
  br i1 %445, label %446, label %579

446:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %447 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %448 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %447)
          to label %449 unwind label %555

449:                                              ; preds = %446
  %450 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %448, i32 0, i32 2
  %451 = load ptr, ptr %51, align 8, !tbaa !5
  %452 = load i32, ptr %451, align 4, !tbaa !9
  %453 = zext i32 %452 to i64
  %454 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %450, i64 noundef %453)
          to label %455 unwind label %555

455:                                              ; preds = %449
  store ptr %454, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #9
  %456 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %457 = load ptr, ptr %53, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %457, i32 0, i32 0
  %459 = getelementptr inbounds [3 x i32], ptr %458, i64 0, i64 0
  %460 = load i32, ptr %459, align 4, !tbaa !9
  %461 = zext i32 %460 to i64
  %462 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %456, i64 noundef %461)
          to label %463 unwind label %559

463:                                              ; preds = %455
  %464 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %462, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %464, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #9
  %465 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %466 = load ptr, ptr %53, align 8, !tbaa !5
  %467 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %466, i32 0, i32 0
  %468 = getelementptr inbounds [3 x i32], ptr %467, i64 0, i64 1
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = zext i32 %469 to i64
  %471 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %465, i64 noundef %470)
          to label %472 unwind label %563

472:                                              ; preds = %463
  %473 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %471, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 %473, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #9
  %474 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %475 = load ptr, ptr %53, align 8, !tbaa !5
  %476 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %475, i32 0, i32 0
  %477 = getelementptr inbounds [3 x i32], ptr %476, i64 0, i64 2
  %478 = load i32, ptr %477, align 4, !tbaa !9
  %479 = zext i32 %478 to i64
  %480 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %474, i64 noundef %479)
          to label %481 unwind label %567

481:                                              ; preds = %472
  %482 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %480, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %482, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !35
  %483 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %484 = load double, ptr %483, align 16
  %485 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %486 = load double, ptr %485, align 8
  %487 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %55, double %484, double %486)
          to label %488 unwind label %571

488:                                              ; preds = %481
  %489 = getelementptr inbounds %"class.JPH::Vec3", ptr %59, i32 0, i32 0
  %490 = getelementptr inbounds %union.anon.0, ptr %489, i32 0, i32 0
  %491 = getelementptr inbounds { double, double }, ptr %490, i32 0, i32 0
  %492 = extractvalue { double, double } %487, 0
  store double %492, ptr %491, align 16
  %493 = getelementptr inbounds { double, double }, ptr %490, i32 0, i32 1
  %494 = extractvalue { double, double } %487, 1
  store double %494, ptr %493, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !35
  %495 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %496 = load double, ptr %495, align 16
  %497 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %498 = load double, ptr %497, align 8
  %499 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %56, double %496, double %498)
          to label %500 unwind label %571

500:                                              ; preds = %488
  %501 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %502 = getelementptr inbounds %union.anon.0, ptr %501, i32 0, i32 0
  %503 = getelementptr inbounds { double, double }, ptr %502, i32 0, i32 0
  %504 = extractvalue { double, double } %499, 0
  store double %504, ptr %503, align 16
  %505 = getelementptr inbounds { double, double }, ptr %502, i32 0, i32 1
  %506 = extractvalue { double, double } %499, 1
  store double %506, ptr %505, align 8
  %507 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 0
  %508 = load double, ptr %507, align 16
  %509 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 1
  %510 = load double, ptr %509, align 8
  %511 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %59, double %508, double %510)
          to label %512 unwind label %571

512:                                              ; preds = %500
  %513 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %514 = getelementptr inbounds %union.anon.0, ptr %513, i32 0, i32 0
  %515 = getelementptr inbounds { double, double }, ptr %514, i32 0, i32 0
  %516 = extractvalue { double, double } %511, 0
  store double %516, ptr %515, align 16
  %517 = getelementptr inbounds { double, double }, ptr %514, i32 0, i32 1
  %518 = extractvalue { double, double } %511, 1
  store double %518, ptr %517, align 8
  %519 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %520 unwind label %571

520:                                              ; preds = %512
  %521 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %522 = getelementptr inbounds %union.anon.0, ptr %521, i32 0, i32 0
  %523 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 0
  %524 = extractvalue { double, double } %519, 0
  store double %524, ptr %523, align 16
  %525 = getelementptr inbounds { double, double }, ptr %522, i32 0, i32 1
  %526 = extractvalue { double, double } %519, 1
  store double %526, ptr %525, align 8
  %527 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %528 = load double, ptr %527, align 16
  %529 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %530 = load double, ptr %529, align 8
  %531 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %58, double %528, double %530)
          to label %532 unwind label %571

532:                                              ; preds = %520
  %533 = getelementptr inbounds %"class.JPH::Vec3", ptr %57, i32 0, i32 0
  %534 = getelementptr inbounds %union.anon.0, ptr %533, i32 0, i32 0
  %535 = getelementptr inbounds { double, double }, ptr %534, i32 0, i32 0
  %536 = extractvalue { double, double } %531, 0
  store double %536, ptr %535, align 16
  %537 = getelementptr inbounds { double, double }, ptr %534, i32 0, i32 1
  %538 = extractvalue { double, double } %531, 1
  store double %538, ptr %537, align 8
  %539 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %540 = load double, ptr %539, align 16
  %541 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %542 = load double, ptr %541, align 8
  %543 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %49, double %540, double %542)
          to label %544 unwind label %571

544:                                              ; preds = %532
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  %545 = load ptr, ptr %51, align 8, !tbaa !5
  %546 = getelementptr inbounds i32, ptr %545, i32 1
  store ptr %546, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %442, !llvm.loop !37

547:                                              ; preds = %410
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %20, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %21, align 4
  br label %623

551:                                              ; preds = %429, %426
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %20, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %21, align 4
  br label %605

555:                                              ; preds = %449, %446
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %20, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %21, align 4
  br label %578

559:                                              ; preds = %455
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %20, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %21, align 4
  br label %577

563:                                              ; preds = %463
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %20, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %21, align 4
  br label %576

567:                                              ; preds = %472
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %20, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %21, align 4
  br label %575

571:                                              ; preds = %532, %520, %512, %500, %488, %481
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %20, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  br label %575

575:                                              ; preds = %571, %567
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #9
  br label %576

576:                                              ; preds = %575, %563
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #9
  br label %577

577:                                              ; preds = %576, %559
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #9
  br label %578

578:                                              ; preds = %577, %555
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %604

579:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #9
  %580 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %581 unwind label %600

581:                                              ; preds = %579
  %582 = getelementptr inbounds %"class.JPH::Vec3", ptr %65, i32 0, i32 0
  %583 = getelementptr inbounds %union.anon.0, ptr %582, i32 0, i32 0
  %584 = getelementptr inbounds { double, double }, ptr %583, i32 0, i32 0
  %585 = extractvalue { double, double } %580, 0
  store double %585, ptr %584, align 16
  %586 = getelementptr inbounds { double, double }, ptr %583, i32 0, i32 1
  %587 = extractvalue { double, double } %580, 1
  store double %587, ptr %586, align 8
  %588 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %589 = load double, ptr %588, align 16
  %590 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %591 = load double, ptr %590, align 8
  %592 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %49, double %589, double %591)
          to label %593 unwind label %600

593:                                              ; preds = %581
  %594 = getelementptr inbounds %"class.JPH::Vec3", ptr %64, i32 0, i32 0
  %595 = getelementptr inbounds %union.anon.0, ptr %594, i32 0, i32 0
  %596 = getelementptr inbounds { double, double }, ptr %595, i32 0, i32 0
  %597 = extractvalue { double, double } %592, 0
  store double %597, ptr %596, align 16
  %598 = getelementptr inbounds { double, double }, ptr %595, i32 0, i32 1
  %599 = extractvalue { double, double } %592, 1
  store double %599, ptr %598, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %64, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %606

600:                                              ; preds = %581, %579
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %20, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #9
  br label %604

604:                                              ; preds = %600, %578
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %605

605:                                              ; preds = %604, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %622

606:                                              ; preds = %593, %413
  %607 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %608 = load ptr, ptr %48, align 8, !tbaa !5
  %609 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %608, i32 0, i32 0
  %610 = load i32, ptr %609, align 4, !tbaa !27
  %611 = zext i32 %610 to i64
  %612 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %607, i64 noundef %611)
          to label %613 unwind label %618

613:                                              ; preds = %606
  %614 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %612, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %614, ptr align 16 %49, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %615

615:                                              ; preds = %613
  %616 = load ptr, ptr %46, align 8, !tbaa !5
  %617 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %616, i32 1
  store ptr %617, ptr %46, align 8, !tbaa !5
  br label %393

618:                                              ; preds = %606
  %619 = landingpad { ptr, i32 }
          cleanup
  %620 = extractvalue { ptr, i32 } %619, 0
  store ptr %620, ptr %20, align 8
  %621 = extractvalue { ptr, i32 } %619, 1
  store i32 %621, ptr %21, align 4
  br label %622

622:                                              ; preds = %618, %605
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %623

623:                                              ; preds = %622, %547
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %624

624:                                              ; preds = %623, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %625

625:                                              ; preds = %624, %402
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %626

626:                                              ; preds = %625, %398
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %784

627:                                              ; preds = %397
  %628 = load i8, ptr %11, align 1, !tbaa !11, !range !38, !noundef !39
  %629 = trunc i8 %628 to i1
  br i1 %629, label %630, label %713

630:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %631 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %632 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %631)
          to label %633 unwind label %646

633:                                              ; preds = %630
  %634 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %632, i32 0, i32 6
  store ptr %634, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %635 = load ptr, ptr %66, align 8, !tbaa !5
  %636 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %635)
          to label %637 unwind label %650

637:                                              ; preds = %633
  store ptr %636, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %638 = load ptr, ptr %66, align 8, !tbaa !5
  %639 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %638)
          to label %640 unwind label %654

640:                                              ; preds = %637
  store ptr %639, ptr %68, align 8, !tbaa !5
  br label %641

641:                                              ; preds = %692, %640
  %642 = load ptr, ptr %67, align 8, !tbaa !5
  %643 = load ptr, ptr %68, align 8, !tbaa !5
  %644 = icmp ne ptr %642, %643
  br i1 %644, label %658, label %645

645:                                              ; preds = %641
  store i32 21, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  br label %712

646:                                              ; preds = %630
  %647 = landingpad { ptr, i32 }
          cleanup
  %648 = extractvalue { ptr, i32 } %647, 0
  store ptr %648, ptr %20, align 8
  %649 = extractvalue { ptr, i32 } %647, 1
  store i32 %649, ptr %21, align 4
  br label %711

650:                                              ; preds = %633
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %20, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %21, align 4
  br label %710

654:                                              ; preds = %637
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %20, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %21, align 4
  br label %709

658:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %659 = load ptr, ptr %67, align 8, !tbaa !5
  store ptr %659, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %660 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 3
  %661 = load ptr, ptr %69, align 8, !tbaa !5
  %662 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %661, i32 0, i32 0
  %663 = load i32, ptr %662, align 4, !tbaa !27
  %664 = zext i32 %663 to i64
  %665 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %660, i64 noundef %664)
          to label %666 unwind label %695

666:                                              ; preds = %658
  store ptr %665, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %667 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %668 = load ptr, ptr %69, align 8, !tbaa !5
  %669 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %668, i32 0, i32 0
  %670 = load i32, ptr %669, align 4, !tbaa !27
  %671 = zext i32 %670 to i64
  %672 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %667, i64 noundef %671)
          to label %673 unwind label %699

673:                                              ; preds = %666
  store ptr %672, ptr %71, align 8, !tbaa !5
  %674 = load ptr, ptr %71, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %674, i32 0, i32 1
  %676 = load ptr, ptr %71, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %676, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %677, ptr align 16 %675, i64 16, i1 false), !tbaa.struct !35
  %678 = load ptr, ptr %71, align 8, !tbaa !5
  %679 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %678, i32 0, i32 1
  %680 = load ptr, ptr %70, align 8, !tbaa !5
  %681 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %680, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %681, ptr align 16 %679, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #9
  %682 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %683 unwind label %703

683:                                              ; preds = %673
  %684 = getelementptr inbounds %"class.JPH::Vec3", ptr %72, i32 0, i32 0
  %685 = getelementptr inbounds %union.anon.0, ptr %684, i32 0, i32 0
  %686 = getelementptr inbounds { double, double }, ptr %685, i32 0, i32 0
  %687 = extractvalue { double, double } %682, 0
  store double %687, ptr %686, align 16
  %688 = getelementptr inbounds { double, double }, ptr %685, i32 0, i32 1
  %689 = extractvalue { double, double } %682, 1
  store double %689, ptr %688, align 8
  %690 = load ptr, ptr %70, align 8, !tbaa !5
  %691 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %690, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %691, ptr align 16 %72, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  br label %692

692:                                              ; preds = %683
  %693 = load ptr, ptr %67, align 8, !tbaa !5
  %694 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %693, i32 1
  store ptr %694, ptr %67, align 8, !tbaa !5
  br label %641

695:                                              ; preds = %658
  %696 = landingpad { ptr, i32 }
          cleanup
  %697 = extractvalue { ptr, i32 } %696, 0
  store ptr %697, ptr %20, align 8
  %698 = extractvalue { ptr, i32 } %696, 1
  store i32 %698, ptr %21, align 4
  br label %708

699:                                              ; preds = %666
  %700 = landingpad { ptr, i32 }
          cleanup
  %701 = extractvalue { ptr, i32 } %700, 0
  store ptr %701, ptr %20, align 8
  %702 = extractvalue { ptr, i32 } %700, 1
  store i32 %702, ptr %21, align 4
  br label %707

703:                                              ; preds = %673
  %704 = landingpad { ptr, i32 }
          cleanup
  %705 = extractvalue { ptr, i32 } %704, 0
  store ptr %705, ptr %20, align 8
  %706 = extractvalue { ptr, i32 } %704, 1
  store i32 %706, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  br label %707

707:                                              ; preds = %703, %699
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %708

708:                                              ; preds = %707, %695
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  br label %709

709:                                              ; preds = %708, %654
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %710

710:                                              ; preds = %709, %650
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %711

711:                                              ; preds = %710, %646
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  br label %784

712:                                              ; preds = %645
  br label %782

713:                                              ; preds = %627
  %714 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 15
  %715 = load i8, ptr %714, align 2, !tbaa !40, !range !38, !noundef !39
  %716 = trunc i8 %715 to i1
  br i1 %716, label %781, label %717

717:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %718 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 2
  %719 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %718)
          to label %720 unwind label %733

720:                                              ; preds = %717
  %721 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %719, i32 0, i32 6
  store ptr %721, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %722 = load ptr, ptr %73, align 8, !tbaa !5
  %723 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %722)
          to label %724 unwind label %737

724:                                              ; preds = %720
  store ptr %723, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %725 = load ptr, ptr %73, align 8, !tbaa !5
  %726 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %725)
          to label %727 unwind label %741

727:                                              ; preds = %724
  store ptr %726, ptr %75, align 8, !tbaa !5
  br label %728

728:                                              ; preds = %774, %727
  %729 = load ptr, ptr %74, align 8, !tbaa !5
  %730 = load ptr, ptr %75, align 8, !tbaa !5
  %731 = icmp ne ptr %729, %730
  br i1 %731, label %745, label %732

732:                                              ; preds = %728
  store i32 23, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %780

733:                                              ; preds = %717
  %734 = landingpad { ptr, i32 }
          cleanup
  %735 = extractvalue { ptr, i32 } %734, 0
  store ptr %735, ptr %20, align 8
  %736 = extractvalue { ptr, i32 } %734, 1
  store i32 %736, ptr %21, align 4
  br label %779

737:                                              ; preds = %720
  %738 = landingpad { ptr, i32 }
          cleanup
  %739 = extractvalue { ptr, i32 } %738, 0
  store ptr %739, ptr %20, align 8
  %740 = extractvalue { ptr, i32 } %738, 1
  store i32 %740, ptr %21, align 4
  br label %778

741:                                              ; preds = %724
  %742 = landingpad { ptr, i32 }
          cleanup
  %743 = extractvalue { ptr, i32 } %742, 0
  store ptr %743, ptr %20, align 8
  %744 = extractvalue { ptr, i32 } %742, 1
  store i32 %744, ptr %21, align 4
  br label %777

745:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %746 = load ptr, ptr %74, align 8, !tbaa !5
  store ptr %746, ptr %76, align 8, !tbaa !5
  %747 = load ptr, ptr %76, align 8, !tbaa !5
  %748 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %747, i32 0, i32 2
  %749 = load float, ptr %748, align 4, !tbaa !60
  %750 = fcmp oeq float %749, 0.000000e+00
  br i1 %750, label %751, label %773

751:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %752 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 3
  %753 = load ptr, ptr %76, align 8, !tbaa !5
  %754 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %753, i32 0, i32 0
  %755 = load i32, ptr %754, align 4, !tbaa !27
  %756 = zext i32 %755 to i64
  %757 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %752, i64 noundef %756)
          to label %758 unwind label %769

758:                                              ; preds = %751
  store ptr %757, ptr %77, align 8, !tbaa !5
  %759 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 6
  %760 = load ptr, ptr %76, align 8, !tbaa !5
  %761 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %760, i32 0, i32 0
  %762 = load i32, ptr %761, align 4, !tbaa !27
  %763 = zext i32 %762 to i64
  %764 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %759, i64 noundef %763)
          to label %765 unwind label %769

765:                                              ; preds = %758
  %766 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %764, i32 0, i32 1
  %767 = load ptr, ptr %77, align 8, !tbaa !5
  %768 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %767, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %768, ptr align 16 %766, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  br label %773

769:                                              ; preds = %758, %751
  %770 = landingpad { ptr, i32 }
          cleanup
  %771 = extractvalue { ptr, i32 } %770, 0
  store ptr %771, ptr %20, align 8
  %772 = extractvalue { ptr, i32 } %770, 1
  store i32 %772, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  br label %777

773:                                              ; preds = %765, %745
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  br label %774

774:                                              ; preds = %773
  %775 = load ptr, ptr %74, align 8, !tbaa !5
  %776 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %775, i32 1
  store ptr %776, ptr %74, align 8, !tbaa !5
  br label %728

777:                                              ; preds = %769, %741
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %778

778:                                              ; preds = %777, %737
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  br label %779

779:                                              ; preds = %778, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %784

780:                                              ; preds = %732
  br label %781

781:                                              ; preds = %780, %713
  br label %782

782:                                              ; preds = %781, %712
  %783 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %79, i32 0, i32 16
  store i8 1, ptr %783, align 1, !tbaa !61
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  ret void

784:                                              ; preds = %779, %711, %626, %381, %206
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %785

785:                                              ; preds = %784, %178
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %786

786:                                              ; preds = %785, %158, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %16) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  br label %787

787:                                              ; preds = %786
  %788 = load ptr, ptr %20, align 8
  %789 = load i32, ptr %21, align 4
  %790 = insertvalue { ptr, i32 } poison, ptr %788, 0
  %791 = insertvalue { ptr, i32 } %790, i32 %789, 1
  resume { ptr, i32 } %791
}

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0EC2EOS8_"(ptr noundef nonnull align 8 dereferenceable(25), ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #7 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind 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)) #5 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(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 @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(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(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #8 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #7 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { alwaysinline mustprogress nounwind 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 #6 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"vtable pointer", !8, i64 0}
!15 = !{!16, !6, i64 8}
!16 = !{!"_ZTSZN3JPH24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS2_jbRNS_13TempAllocatorEE3$_0", !6, i64 0, !6, i64 8, !10, i64 16}
!17 = !{!16, !10, i64 16}
!18 = !{!19, !10, i64 0}
!19 = !{!"_ZTSN3JPH22SoftBodySharedSettings7InvBindE", !10, i64 0, !20, i64 16}
!20 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!21 = !{i64 2159548244}
!22 = !{i64 0, i64 64, !23}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{i64 2159548689}
!27 = !{!28, !10, i64 0}
!28 = !{!"_ZTSN3JPH22SoftBodySharedSettings7SkinnedE", !10, i64 0, !7, i64 4, !29, i64 36, !29, i64 40, !29, i64 44, !10, i64 48}
!29 = !{!"float", !7, i64 0}
!30 = !{i64 2159549049}
!31 = !{!32, !29, i64 4}
!32 = !{!"_ZTSN3JPH22SoftBodySharedSettings10SkinWeightE", !10, i64 0, !29, i64 4}
!33 = !{!32, !10, i64 0}
!34 = !{i64 2159549431}
!35 = !{i64 0, i64 16, !23}
!36 = !{!28, !10, i64 48}
!37 = distinct !{!37, !25}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = !{!41, !12, i64 370}
!41 = !{!"_ZTSN3JPH24SoftBodyMotionPropertiesE", !42, i64 0, !51, i64 184, !52, i64 192, !54, i64 216, !55, i64 240, !56, i64 264, !57, i64 288, !57, i64 320, !10, i64 352, !10, i64 356, !29, i64 360, !29, i64 364, !12, i64 368, !58, i64 369, !12, i64 370, !12, i64 371}
!42 = !{!"_ZTSN3JPH16MotionPropertiesE", !43, i64 0, !43, i64 16, !43, i64 32, !44, i64 48, !46, i64 64, !46, i64 76, !29, i64 88, !29, i64 92, !29, i64 96, !29, i64 100, !29, i64 104, !29, i64 108, !10, i64 112, !10, i64 116, !47, i64 120, !12, i64 121, !48, i64 122, !7, i64 123, !7, i64 124, !7, i64 128, !29, i64 176, !49, i64 180, !50, i64 181}
!43 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!44 = !{!"_ZTSN3JPH4QuatE", !45, i64 0}
!45 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!46 = !{!"_ZTSN3JPH6Float3E", !29, i64 0, !29, i64 4, !29, i64 8}
!47 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!48 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!49 = !{!"_ZTSN3JPH9EBodyTypeE", !7, i64 0}
!50 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!51 = !{!"_ZTSN3JPH8RefConstINS_22SoftBodySharedSettingsEEE", !6, i64 0}
!52 = !{!"_ZTSN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEE", !53, i64 0, !53, i64 8, !6, i64 16}
!53 = !{!"long", !7, i64 0}
!54 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties14CollidingShapeENS_12STLAllocatorIS2_EEEE", !53, i64 0, !53, i64 8, !6, i64 16}
!55 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties15CollidingSensorENS_12STLAllocatorIS2_EEEE", !53, i64 0, !53, i64 8, !6, i64 16}
!56 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEE", !53, i64 0, !53, i64 8, !6, i64 16}
!57 = !{!"_ZTSN3JPH5AABoxE", !43, i64 0, !43, i64 16}
!58 = !{!"_ZTSSt6atomicIbE", !59, i64 0}
!59 = !{!"_ZTSSt13__atomic_baseIbE", !12, i64 0}
!60 = !{!28, !29, i64 36}
!61 = !{!41, !12, i64 371}


; 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::ScopeExit" = type { %class.anon, i8, [7 x i8] }
%class.anon = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"struct.JPH::SoftBodySharedSettings::Vertex" = type { %"class.JPH::Float3", %"class.JPH::Float3", float }
%"class.JPH::Float3" = type { float, float, float }

@.str.1 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [36 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 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) #1

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64), double, double) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #2 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS2_jbRNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(372) %0, ptr nocapture noundef nonnull readnone align 16 dereferenceable(64) %1, ptr noundef %2, i32 noundef %3, i1 noundef zeroext %4, ptr noundef nonnull align 8 dereferenceable(8) %5) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.JPH::ScopeExit", align 8
  %8 = alloca %class.anon, align 8
  %9 = alloca %"class.JPH::Mat44", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = getelementptr inbounds i8, ptr %0, i64 184
  %17 = tail call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %18 = getelementptr inbounds i8, ptr %17, i64 152
  %19 = tail call noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7InvBindENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %18)
  %20 = trunc i64 %19 to i32
  %21 = and i64 %19, 4294967295
  %22 = shl i32 %20, 6
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  %25 = load ptr, ptr %24, align 8
  %26 = tail call noundef ptr %25(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef %22)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #9
  store ptr %5, ptr %8, align 8, !tbaa !8
  %27 = getelementptr inbounds i8, ptr %8, i64 8
  store ptr %26, ptr %27, align 8, !tbaa !11
  %28 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 %22, ptr %28, align 8, !tbaa !14
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0EC2EOS8_"(ptr noundef nonnull align 8 dereferenceable(25) %7, ptr noundef nonnull align 8 dereferenceable(20) %8)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  %29 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %21
  %30 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %31 = getelementptr inbounds i8, ptr %30, i64 152
  %32 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7InvBindENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %31)
  %.not194 = icmp eq i64 %21, 0
  br i1 %.not194, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %49, %6
  %33 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %34 = getelementptr inbounds i8, ptr %33, i64 8
  %35 = call noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
  %36 = trunc i64 %35 to i32
  %37 = getelementptr inbounds i8, ptr %0, i64 264
  %38 = call noundef i64 @_ZNK3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %37)
  %39 = and i64 %35, 4294967295
  %40 = icmp eq i64 %38, %39
  br i1 %40, label %63, label %57

.lr.ph:                                           ; preds = %6, %49
  %.0168 = phi ptr [ %55, %49 ], [ %32, %6 ]
  %.0133167 = phi ptr [ %54, %49 ], [ %26, %6 ]
  %41 = load i32, ptr %.0168, align 16, !tbaa !15
  %42 = icmp ult i32 %41, %3
  br i1 %42, label %49, label %43

43:                                               ; preds = %.lr.ph
  %44 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 1036)
          to label %45 unwind label %47

45:                                               ; preds = %43
  br i1 %44, label %46, label %49

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

47:                                               ; preds = %43
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %369

49:                                               ; preds = %46, %45, %.lr.ph
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #9
  %50 = load i32, ptr %.0168, align 16, !tbaa !15
  %51 = zext i32 %50 to i64
  %52 = getelementptr inbounds %"class.JPH::Mat44", ptr %2, i64 %51
  %53 = getelementptr inbounds i8, ptr %.0168, i64 16
  call void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %9, ptr noundef nonnull align 16 dereferenceable(64) %52, ptr noundef nonnull align 16 dereferenceable(64) %53)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %.0133167, ptr noundef nonnull align 16 dereferenceable(64) %9, i64 64, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9
  %54 = getelementptr inbounds i8, ptr %.0133167, i64 64
  %55 = getelementptr inbounds i8, ptr %.0168, i64 80
  %56 = icmp ult ptr %54, %29
  br i1 %56, label %.lr.ph, label %._crit_edge, !llvm.loop !21

57:                                               ; preds = %._crit_edge
  %58 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 1043)
          to label %59 unwind label %61

59:                                               ; preds = %57
  br i1 %58, label %60, label %63

60:                                               ; preds = %59
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !23
  br label %63

61:                                               ; preds = %57
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %369

63:                                               ; preds = %60, %59, %._crit_edge
  %64 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %65 = getelementptr inbounds i8, ptr %64, i64 8
  %66 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %65)
  %67 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %68 = getelementptr inbounds i8, ptr %67, i64 128
  %69 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %70 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %.not172 = icmp eq ptr %69, %70
  br i1 %.not172, label %._crit_edge176, label %.lr.ph175

.lr.ph175:                                        ; preds = %63
  %71 = getelementptr inbounds i8, ptr %10, i64 8
  br label %79

._crit_edge176:                                   ; preds = %205, %63
  %72 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %73 = getelementptr inbounds i8, ptr %72, i64 128
  %74 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %73)
  %75 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %73)
  %.not141181 = icmp eq ptr %74, %75
  br i1 %.not141181, label %._crit_edge185, label %.lr.ph184

.lr.ph184:                                        ; preds = %._crit_edge176
  %76 = getelementptr inbounds i8, ptr %11, i64 8
  %77 = getelementptr inbounds i8, ptr %15, i64 8
  %78 = getelementptr inbounds i8, ptr %14, i64 8
  br label %211

79:                                               ; preds = %.lr.ph175, %205
  %.0134173 = phi ptr [ %69, %.lr.ph175 ], [ %207, %205 ]
  %80 = load i32, ptr %.0134173, align 4, !tbaa !24
  %81 = icmp ult i32 %80, %36
  br i1 %81, label %88, label %82

82:                                               ; preds = %79
  %83 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1048)
          to label %84 unwind label %86

84:                                               ; preds = %82
  br i1 %83, label %85, label %88

85:                                               ; preds = %84
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !27
  br label %88

86:                                               ; preds = %82
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %369

88:                                               ; preds = %85, %84, %79
  %89 = load i32, ptr %.0134173, align 4, !tbaa !24
  %90 = zext i32 %89 to i64
  %91 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %66, i64 %90
  %92 = invoke { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12) %91)
          to label %93 unwind label %103

93:                                               ; preds = %88
  %94 = extractvalue { double, double } %92, 0
  %95 = extractvalue { double, double } %92, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #9
  %96 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %97 unwind label %105

97:                                               ; preds = %93
  %98 = extractvalue { double, double } %96, 0
  store double %98, ptr %10, align 16
  %99 = extractvalue { double, double } %96, 1
  store double %99, ptr %71, align 8
  %.0136.ptr169 = getelementptr inbounds i8, ptr %.0134173, i64 4
  %100 = getelementptr inbounds i8, ptr %.0134173, i64 8
  %101 = load float, ptr %100, align 4, !tbaa !28
  %102 = fcmp une float %101, 0.000000e+00
  br i1 %102, label %107, label %.critedge

103:                                              ; preds = %88
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %369

105:                                              ; preds = %93
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %210

107:                                              ; preds = %97
  %108 = load i32, ptr %.0136.ptr169, align 4, !tbaa !30
  %109 = icmp ult i32 %108, %20
  br i1 %109, label %116, label %110

110:                                              ; preds = %107
  %111 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1059)
          to label %112 unwind label %114

112:                                              ; preds = %110
  br i1 %111, label %113, label %116

113:                                              ; preds = %112
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !31
  br label %116

114:                                              ; preds = %194, %188, %184, %170, %164, %160, %146, %140, %136, %122, %116, %110
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %210

116:                                              ; preds = %113, %112, %107
  %117 = load float, ptr %100, align 4, !tbaa !28
  %118 = load i32, ptr %.0136.ptr169, align 4, !tbaa !30
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %119
  %121 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %120, double %94, double %95)
          to label %122 unwind label %114

122:                                              ; preds = %116
  %123 = extractvalue { double, double } %121, 0
  %124 = extractvalue { double, double } %121, 1
  %125 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %117, double %123, double %124)
          to label %126 unwind label %114

126:                                              ; preds = %122
  %127 = extractvalue { double, double } %125, 0
  %128 = extractvalue { double, double } %125, 1
  %129 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %127, double %128)
  %.0136.ptr = getelementptr inbounds i8, ptr %.0134173, i64 12
  %130 = getelementptr inbounds i8, ptr %.0134173, i64 16
  %131 = load float, ptr %130, align 4, !tbaa !28
  %132 = fcmp une float %131, 0.000000e+00
  br i1 %132, label %133, label %.critedge

133:                                              ; preds = %126
  %134 = load i32, ptr %.0136.ptr, align 4, !tbaa !30
  %135 = icmp ult i32 %134, %20
  br i1 %135, label %140, label %136

136:                                              ; preds = %133
  %137 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1059)
          to label %138 unwind label %114

138:                                              ; preds = %136
  br i1 %137, label %139, label %140

139:                                              ; preds = %138
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !31
  br label %140

140:                                              ; preds = %139, %138, %133
  %141 = load float, ptr %130, align 4, !tbaa !28
  %142 = load i32, ptr %.0136.ptr, align 4, !tbaa !30
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %143
  %145 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %144, double %94, double %95)
          to label %146 unwind label %114

146:                                              ; preds = %140
  %147 = extractvalue { double, double } %145, 0
  %148 = extractvalue { double, double } %145, 1
  %149 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %141, double %147, double %148)
          to label %150 unwind label %114

150:                                              ; preds = %146
  %151 = extractvalue { double, double } %149, 0
  %152 = extractvalue { double, double } %149, 1
  %153 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %151, double %152)
  %.0136.ptr.1 = getelementptr inbounds i8, ptr %.0134173, i64 20
  %154 = getelementptr inbounds i8, ptr %.0134173, i64 24
  %155 = load float, ptr %154, align 4, !tbaa !28
  %156 = fcmp une float %155, 0.000000e+00
  br i1 %156, label %157, label %.critedge

157:                                              ; preds = %150
  %158 = load i32, ptr %.0136.ptr.1, align 4, !tbaa !30
  %159 = icmp ult i32 %158, %20
  br i1 %159, label %164, label %160

160:                                              ; preds = %157
  %161 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1059)
          to label %162 unwind label %114

162:                                              ; preds = %160
  br i1 %161, label %163, label %164

163:                                              ; preds = %162
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !31
  br label %164

164:                                              ; preds = %163, %162, %157
  %165 = load float, ptr %154, align 4, !tbaa !28
  %166 = load i32, ptr %.0136.ptr.1, align 4, !tbaa !30
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %167
  %169 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %168, double %94, double %95)
          to label %170 unwind label %114

170:                                              ; preds = %164
  %171 = extractvalue { double, double } %169, 0
  %172 = extractvalue { double, double } %169, 1
  %173 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %165, double %171, double %172)
          to label %174 unwind label %114

174:                                              ; preds = %170
  %175 = extractvalue { double, double } %173, 0
  %176 = extractvalue { double, double } %173, 1
  %177 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %175, double %176)
  %.0136.ptr.2 = getelementptr inbounds i8, ptr %.0134173, i64 28
  %178 = getelementptr inbounds i8, ptr %.0134173, i64 32
  %179 = load float, ptr %178, align 4, !tbaa !28
  %180 = fcmp une float %179, 0.000000e+00
  br i1 %180, label %181, label %.critedge

181:                                              ; preds = %174
  %182 = load i32, ptr %.0136.ptr.2, align 4, !tbaa !30
  %183 = icmp ult i32 %182, %20
  br i1 %183, label %188, label %184

184:                                              ; preds = %181
  %185 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1059)
          to label %186 unwind label %114

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

187:                                              ; preds = %186
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !31
  br label %188

188:                                              ; preds = %187, %186, %181
  %189 = load float, ptr %178, align 4, !tbaa !28
  %190 = load i32, ptr %.0136.ptr.2, align 4, !tbaa !30
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %191
  %193 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %192, double %94, double %95)
          to label %194 unwind label %114

194:                                              ; preds = %188
  %195 = extractvalue { double, double } %193, 0
  %196 = extractvalue { double, double } %193, 1
  %197 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %189, double %195, double %196)
          to label %198 unwind label %114

198:                                              ; preds = %194
  %199 = extractvalue { double, double } %197, 0
  %200 = extractvalue { double, double } %197, 1
  %201 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %199, double %200)
  br label %.critedge

.critedge:                                        ; preds = %198, %174, %150, %126, %97
  %202 = load i32, ptr %.0134173, align 4, !tbaa !24
  %203 = zext i32 %202 to i64
  %204 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %203)
          to label %205 unwind label %208

205:                                              ; preds = %.critedge
  %206 = getelementptr inbounds i8, ptr %204, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %204, ptr noundef nonnull align 16 dereferenceable(16) %206, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %206, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  %207 = getelementptr inbounds i8, ptr %.0134173, i64 52
  %.not = icmp eq ptr %207, %70
  br i1 %.not, label %._crit_edge176, label %79

208:                                              ; preds = %.critedge
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %210

210:                                              ; preds = %208, %114, %105
  %.pn158 = phi { ptr, i32 } [ %209, %208 ], [ %115, %114 ], [ %106, %105 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  br label %369

._crit_edge185:                                   ; preds = %304, %._crit_edge176
  br i1 %4, label %310, label %339

211:                                              ; preds = %.lr.ph184, %304
  %.0137182 = phi ptr [ %74, %.lr.ph184 ], [ %306, %304 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #9
  %212 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %213 unwind label %274

213:                                              ; preds = %211
  %214 = extractvalue { double, double } %212, 0
  store double %214, ptr %11, align 16
  %215 = extractvalue { double, double } %212, 1
  store double %215, ptr %76, align 8
  %216 = getelementptr inbounds i8, ptr %.0137182, i64 48
  %217 = load i32, ptr %216, align 4, !tbaa !33
  %218 = lshr i32 %217, 24
  %.not146 = icmp ult i32 %217, 16777216
  br i1 %.not146, label %300, label %219

219:                                              ; preds = %213
  %220 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %221 = getelementptr inbounds i8, ptr %220, i64 280
  %222 = load i32, ptr %216, align 4, !tbaa !33
  %223 = and i32 %222, 16777215
  %224 = zext nneg i32 %223 to i64
  %225 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %221, i64 noundef %224)
          to label %.lr.ph179.preheader unwind label %276

.lr.ph179.preheader:                              ; preds = %219
  %226 = zext nneg i32 %218 to i64
  %227 = getelementptr inbounds i32, ptr %225, i64 %226
  br label %.lr.ph179

.lr.ph179:                                        ; preds = %.lr.ph179.preheader, %268
  %.0138177 = phi ptr [ %272, %268 ], [ %225, %.lr.ph179.preheader ]
  %228 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %229 = getelementptr inbounds i8, ptr %228, i64 32
  %230 = load i32, ptr %.0138177, align 4, !tbaa !34
  %231 = zext i32 %230 to i64
  %232 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %229, i64 noundef %231)
          to label %233 unwind label %278

233:                                              ; preds = %.lr.ph179
  %234 = load i32, ptr %232, align 4, !tbaa !34
  %235 = zext i32 %234 to i64
  %236 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %235)
          to label %237 unwind label %280

237:                                              ; preds = %233
  %238 = getelementptr inbounds i8, ptr %236, i64 16
  %.sroa.036.0.copyload = load double, ptr %238, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %236, i64 24
  %.sroa.6.0.copyload = load double, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  %239 = getelementptr inbounds i8, ptr %232, i64 4
  %240 = load i32, ptr %239, align 4, !tbaa !34
  %241 = zext i32 %240 to i64
  %242 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %241)
          to label %243 unwind label %282

243:                                              ; preds = %237
  %244 = getelementptr inbounds i8, ptr %242, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %12, ptr noundef nonnull align 16 dereferenceable(16) %244, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #9
  %245 = getelementptr inbounds i8, ptr %232, i64 8
  %246 = load i32, ptr %245, align 4, !tbaa !34
  %247 = zext i32 %246 to i64
  %248 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %247)
          to label %249 unwind label %284

249:                                              ; preds = %243
  %250 = getelementptr inbounds i8, ptr %248, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %13, ptr noundef nonnull align 16 dereferenceable(16) %250, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #9
  %251 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %.sroa.036.0.copyload, double %.sroa.6.0.copyload)
          to label %252 unwind label %286

252:                                              ; preds = %249
  %253 = extractvalue { double, double } %251, 0
  store double %253, ptr %15, align 16
  %254 = extractvalue { double, double } %251, 1
  store double %254, ptr %77, align 8
  %255 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %13, double %.sroa.036.0.copyload, double %.sroa.6.0.copyload)
          to label %256 unwind label %286

256:                                              ; preds = %252
  %257 = extractvalue { double, double } %255, 0
  %258 = extractvalue { double, double } %255, 1
  %259 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %257, double %258)
          to label %260 unwind label %286

260:                                              ; preds = %256
  %261 = extractvalue { double, double } %259, 0
  store double %261, ptr %14, align 16
  %262 = extractvalue { double, double } %259, 1
  store double %262, ptr %78, align 8
  %263 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %264 unwind label %286

264:                                              ; preds = %260
  %265 = extractvalue { double, double } %263, 0
  %266 = extractvalue { double, double } %263, 1
  %267 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %265, double %266)
          to label %268 unwind label %286

268:                                              ; preds = %264
  %269 = extractvalue { double, double } %267, 0
  %270 = extractvalue { double, double } %267, 1
  %271 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %269, double %270)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #9
  %272 = getelementptr inbounds i8, ptr %.0138177, i64 4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  %273 = icmp ult ptr %272, %227
  br i1 %273, label %.lr.ph179, label %._crit_edge180, !llvm.loop !35

274:                                              ; preds = %211
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %309

276:                                              ; preds = %219
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %309

278:                                              ; preds = %.lr.ph179
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %309

280:                                              ; preds = %233
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %309

282:                                              ; preds = %237
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %289

284:                                              ; preds = %243
  %285 = landingpad { ptr, i32 }
          cleanup
  br label %288

286:                                              ; preds = %264, %260, %256, %252, %249
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #9
  br label %288

288:                                              ; preds = %286, %284
  %.pn147 = phi { ptr, i32 } [ %287, %286 ], [ %285, %284 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  br label %289

289:                                              ; preds = %288, %282
  %.pn147.pn = phi { ptr, i32 } [ %.pn147, %288 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  br label %309

._crit_edge180:                                   ; preds = %268
  %290 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %291 unwind label %298

291:                                              ; preds = %._crit_edge180
  %292 = extractvalue { double, double } %290, 0
  %293 = extractvalue { double, double } %290, 1
  %294 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %292, double %293)
          to label %295 unwind label %298

295:                                              ; preds = %291
  %296 = extractvalue { double, double } %294, 0
  %297 = extractvalue { double, double } %294, 1
  store double %296, ptr %11, align 16
  store double %297, ptr %76, align 8, !tbaa !20
  br label %300

298:                                              ; preds = %291, %._crit_edge180
  %299 = landingpad { ptr, i32 }
          cleanup
  br label %309

300:                                              ; preds = %295, %213
  %301 = load i32, ptr %.0137182, align 4, !tbaa !24
  %302 = zext i32 %301 to i64
  %303 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %302)
          to label %304 unwind label %307

304:                                              ; preds = %300
  %305 = getelementptr inbounds i8, ptr %303, i64 32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %305, ptr noundef nonnull align 16 dereferenceable(16) %11, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  %306 = getelementptr inbounds i8, ptr %.0137182, i64 52
  %.not141 = icmp eq ptr %306, %75
  br i1 %.not141, label %._crit_edge185, label %211

307:                                              ; preds = %300
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %309

309:                                              ; preds = %307, %298, %280, %289, %278, %276, %274
  %.pn147.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %275, %274 ], [ %308, %307 ], [ %277, %276 ], [ %299, %298 ], [ %279, %278 ], [ %.pn147.pn, %289 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  br label %369

310:                                              ; preds = %._crit_edge185
  %311 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %312 = getelementptr inbounds i8, ptr %311, i64 128
  %313 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %312)
  %314 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %312)
  %.not143190 = icmp eq ptr %313, %314
  br i1 %.not143190, label %.loopexit, label %.lr.ph193

.lr.ph193:                                        ; preds = %310
  %315 = getelementptr inbounds i8, ptr %0, i64 192
  br label %316

316:                                              ; preds = %.lr.ph193, %328
  %.0139191 = phi ptr [ %313, %.lr.ph193 ], [ %332, %328 ]
  %317 = load i32, ptr %.0139191, align 4, !tbaa !24
  %318 = zext i32 %317 to i64
  %319 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %315, i64 noundef %318)
          to label %320 unwind label %333

320:                                              ; preds = %316
  %321 = load i32, ptr %.0139191, align 4, !tbaa !24
  %322 = zext i32 %321 to i64
  %323 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %322)
          to label %324 unwind label %335

324:                                              ; preds = %320
  %325 = getelementptr inbounds i8, ptr %323, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %323, ptr noundef nonnull align 16 dereferenceable(16) %325, i64 16, i1 false), !tbaa.struct !32
  %326 = getelementptr inbounds i8, ptr %319, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %326, ptr noundef nonnull align 16 dereferenceable(16) %325, i64 16, i1 false), !tbaa.struct !32
  %327 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %328 unwind label %337

328:                                              ; preds = %324
  %329 = extractvalue { double, double } %327, 0
  %330 = extractvalue { double, double } %327, 1
  %331 = getelementptr inbounds i8, ptr %319, i64 32
  store double %329, ptr %331, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %319, i64 40
  store double %330, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !20
  %332 = getelementptr inbounds i8, ptr %.0139191, i64 52
  %.not143 = icmp eq ptr %332, %314
  br i1 %.not143, label %.loopexit, label %316

333:                                              ; preds = %316
  %334 = landingpad { ptr, i32 }
          cleanup
  br label %369

335:                                              ; preds = %320
  %336 = landingpad { ptr, i32 }
          cleanup
  br label %369

337:                                              ; preds = %324
  %338 = landingpad { ptr, i32 }
          cleanup
  br label %369

339:                                              ; preds = %._crit_edge185
  %340 = getelementptr inbounds i8, ptr %0, i64 370
  %341 = load i8, ptr %340, align 2, !tbaa !36, !range !57, !noundef !58
  %342 = trunc nuw i8 %341 to i1
  br i1 %342, label %.loopexit, label %343

343:                                              ; preds = %339
  %344 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %345 = getelementptr inbounds i8, ptr %344, i64 128
  %346 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %345)
  %347 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %345)
  %.not142186 = icmp eq ptr %346, %347
  br i1 %.not142186, label %.loopexit, label %.lr.ph189

.lr.ph189:                                        ; preds = %343
  %348 = getelementptr inbounds i8, ptr %0, i64 192
  br label %349

349:                                              ; preds = %.lr.ph189, %366
  %.0132187 = phi ptr [ %346, %.lr.ph189 ], [ %367, %366 ]
  %350 = getelementptr inbounds i8, ptr %.0132187, i64 36
  %351 = load float, ptr %350, align 4, !tbaa !59
  %352 = fcmp oeq float %351, 0.000000e+00
  br i1 %352, label %353, label %366

353:                                              ; preds = %349
  %354 = load i32, ptr %.0132187, align 4, !tbaa !24
  %355 = zext i32 %354 to i64
  %356 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %348, i64 noundef %355)
          to label %357 unwind label %364

357:                                              ; preds = %353
  %358 = load i32, ptr %.0132187, align 4, !tbaa !24
  %359 = zext i32 %358 to i64
  %360 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %359)
          to label %361 unwind label %364

361:                                              ; preds = %357
  %362 = getelementptr inbounds i8, ptr %360, i64 16
  %363 = getelementptr inbounds i8, ptr %356, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %363, ptr noundef nonnull align 16 dereferenceable(16) %362, i64 16, i1 false), !tbaa.struct !32
  br label %366

364:                                              ; preds = %357, %353
  %365 = landingpad { ptr, i32 }
          cleanup
  br label %369

366:                                              ; preds = %361, %349
  %367 = getelementptr inbounds i8, ptr %.0132187, i64 52
  %.not142 = icmp eq ptr %367, %347
  br i1 %.not142, label %.loopexit, label %349

.loopexit:                                        ; preds = %366, %328, %343, %310, %339
  %368 = getelementptr inbounds i8, ptr %0, i64 371
  store i8 1, ptr %368, align 1, !tbaa !60
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  ret void

369:                                              ; preds = %61, %333, %337, %335, %86, %210, %103, %364, %309, %47
  %.pn164 = phi { ptr, i32 } [ %48, %47 ], [ %62, %61 ], [ %.pn147.pn.pn.pn.pn.pn.pn.pn, %309 ], [ %365, %364 ], [ %87, %86 ], [ %.pn158, %210 ], [ %104, %103 ], [ %334, %333 ], [ %338, %337 ], [ %336, %335 ]
  call void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25) %7) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #9
  resume { ptr, i32 } %.pn164
}

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0EC2EOS8_"(ptr noundef nonnull align 8 dereferenceable(25), ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #7 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind 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 #5 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_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 nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(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(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #8 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @"_ZN3JPH9ScopeExitIZNS_24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS3_jbRNS_13TempAllocatorEE3$_0ED2Ev"(ptr noundef nonnull align 8 dereferenceable(25)) unnamed_addr #7 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { alwaysinline mustprogress nounwind 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 #6 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = !{!12, !9, i64 8}
!12 = !{!"_ZTSZN3JPH24SoftBodyMotionProperties12SkinVerticesERKNS_5Mat44EPS2_jbRNS_13TempAllocatorEE3$_0", !9, i64 0, !9, i64 8, !13, i64 16}
!13 = !{!"int", !10, i64 0}
!14 = !{!12, !13, i64 16}
!15 = !{!16, !13, i64 0}
!16 = !{!"_ZTSN3JPH22SoftBodySharedSettings7InvBindE", !13, i64 0, !17, i64 16}
!17 = !{!"_ZTSN3JPH5Mat44E", !10, i64 0}
!18 = !{i64 2159548244}
!19 = !{i64 0, i64 64, !20}
!20 = !{!10, !10, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{i64 2159548689}
!24 = !{!25, !13, i64 0}
!25 = !{!"_ZTSN3JPH22SoftBodySharedSettings7SkinnedE", !13, i64 0, !10, i64 4, !26, i64 36, !26, i64 40, !26, i64 44, !13, i64 48}
!26 = !{!"float", !10, i64 0}
!27 = !{i64 2159549049}
!28 = !{!29, !26, i64 4}
!29 = !{!"_ZTSN3JPH22SoftBodySharedSettings10SkinWeightE", !13, i64 0, !26, i64 4}
!30 = !{!29, !13, i64 0}
!31 = !{i64 2159549431}
!32 = !{i64 0, i64 16, !20}
!33 = !{!25, !13, i64 48}
!34 = !{!13, !13, i64 0}
!35 = distinct !{!35, !22}
!36 = !{!37, !44, i64 370}
!37 = !{!"_ZTSN3JPH24SoftBodyMotionPropertiesE", !38, i64 0, !48, i64 184, !49, i64 192, !51, i64 216, !52, i64 240, !53, i64 264, !54, i64 288, !54, i64 320, !13, i64 352, !13, i64 356, !26, i64 360, !26, i64 364, !44, i64 368, !55, i64 369, !44, i64 370, !44, i64 371}
!38 = !{!"_ZTSN3JPH16MotionPropertiesE", !39, i64 0, !39, i64 16, !39, i64 32, !40, i64 48, !42, i64 64, !42, i64 76, !26, i64 88, !26, i64 92, !26, i64 96, !26, i64 100, !26, i64 104, !26, i64 108, !13, i64 112, !13, i64 116, !43, i64 120, !44, i64 121, !45, i64 122, !10, i64 123, !10, i64 124, !10, i64 128, !26, i64 176, !46, i64 180, !47, i64 181}
!39 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!40 = !{!"_ZTSN3JPH4QuatE", !41, i64 0}
!41 = !{!"_ZTSN3JPH4Vec4E", !10, i64 0}
!42 = !{!"_ZTSN3JPH6Float3E", !26, i64 0, !26, i64 4, !26, i64 8}
!43 = !{!"_ZTSN3JPH14EMotionQualityE", !10, i64 0}
!44 = !{!"bool", !10, i64 0}
!45 = !{!"_ZTSN3JPH12EAllowedDOFsE", !10, i64 0}
!46 = !{!"_ZTSN3JPH9EBodyTypeE", !10, i64 0}
!47 = !{!"_ZTSN3JPH11EMotionTypeE", !10, i64 0}
!48 = !{!"_ZTSN3JPH8RefConstINS_22SoftBodySharedSettingsEEE", !9, i64 0}
!49 = !{!"_ZTSN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEE", !50, i64 0, !50, i64 8, !9, i64 16}
!50 = !{!"long", !10, i64 0}
!51 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties14CollidingShapeENS_12STLAllocatorIS2_EEEE", !50, i64 0, !50, i64 8, !9, i64 16}
!52 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties15CollidingSensorENS_12STLAllocatorIS2_EEEE", !50, i64 0, !50, i64 8, !9, i64 16}
!53 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEE", !50, i64 0, !50, i64 8, !9, i64 16}
!54 = !{!"_ZTSN3JPH5AABoxE", !39, i64 0, !39, i64 16}
!55 = !{!"_ZTSSt6atomicIbE", !56, i64 0}
!56 = !{!"_ZTSSt13__atomic_baseIbE", !44, i64 0}
!57 = !{i8 0, i8 2}
!58 = !{}
!59 = !{!25, !26, i64 36}
!60 = !{!37, !44, i64 371}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass