; LLVM IR from zig-gamedev/zphysics :: libs/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] }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Vec3" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::SoftBodyMotionProperties" = type { %"class.JPH::MotionProperties.base", %"class.JPH::RefConst", %"class.JPH::Array", %"class.JPH::Array.1", %"class.JPH::Array.4", %"class.JPH::AABox", %"class.JPH::AABox", i32, float, float, i8, i8, i8, 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::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::SoftBodySharedSettings" = type { %"class.JPH::RefTarget", %"class.JPH::Array.8", %"class.JPH::Array.11", %"class.JPH::Array.14", %"class.JPH::Array.17", %"class.JPH::Array.20", %"class.JPH::Array.23", %"class.JPH::Array.26", %"class.JPH::Array.29", %"class.JPH::Array.32", float, %"class.JPH::Array.35", %"class.JPH::Array.38", %"class.JPH::Array.41" }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Array.8" = type { i64, i64, ptr }
%"class.JPH::Array.11" = type { i64, i64, ptr }
%"class.JPH::Array.14" = type { i64, i64, ptr }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Array.20" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"class.JPH::Array.26" = type { i64, i64, ptr }
%"class.JPH::Array.29" = type { i64, i64, ptr }
%"class.JPH::Array.32" = type { i64, i64, ptr }
%"class.JPH::Array.35" = type { i64, i64, ptr }
%"class.JPH::Array.38" = type { i64, i64, ptr }
%"class.JPH::Array.41" = 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 [110 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.9 = 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(352) %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 %"class.JPH::Mat44", align 16
  %24 = alloca i32, align 4
  %25 = alloca %"struct.JPH::AssertLastParam", align 1
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca %"struct.JPH::AssertLastParam", align 1
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"struct.JPH::AssertLastParam", align 1
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca %"class.JPH::Vec3", align 16
  %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 ptr, align 8
  %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 %"class.JPH::Vec3", align 16
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca ptr, align 8
  %76 = 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
  %77 = zext i1 %4 to i8
  store i8 %77, ptr %11, align 1, !tbaa !11
  store ptr %5, ptr %12, align 8, !tbaa !5
  %78 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %79 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %80 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79)
  %81 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %80, i32 0, i32 7
  %82 = call noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7InvBindENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
  %83 = trunc i64 %82 to i32
  store i32 %83, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %84 = load i32, ptr %13, align 4, !tbaa !9
  %85 = zext i32 %84 to i64
  %86 = mul i64 %85, 64
  %87 = trunc i64 %86 to i32
  store i32 %87, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = load i32, ptr %14, align 4, !tbaa !9
  %90 = load ptr, ptr %88, align 8, !tbaa !13
  %91 = getelementptr inbounds ptr, ptr %90, i64 2
  %92 = load ptr, ptr %91, align 8
  %93 = call noundef ptr %92(ptr noundef nonnull align 8 dereferenceable(8) %88, i32 noundef %89)
  store ptr %93, 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
  %94 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 0
  %95 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %95, ptr %94, align 8, !tbaa !5
  %96 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 1
  %97 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %97, ptr %96, align 8, !tbaa !15
  %98 = getelementptr inbounds %class.anon, ptr %17, i32 0, i32 2
  %99 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %99, ptr %98, 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
  %100 = load ptr, ptr %15, align 8, !tbaa !5
  %101 = load i32, ptr %13, align 4, !tbaa !9
  %102 = zext i32 %101 to i64
  %103 = getelementptr inbounds %"class.JPH::Mat44", ptr %100, i64 %102
  store ptr %103, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %104 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %105 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %106 unwind label %116

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

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

111:                                              ; preds = %131, %109
  %112 = load ptr, ptr %22, align 8, !tbaa !5
  %113 = load ptr, ptr %18, align 8, !tbaa !5
  %114 = icmp ult ptr %112, %113
  br i1 %114, label %120, label %115

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

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

120:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 64, ptr %23) #9
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  %122 = load ptr, ptr %19, align 8, !tbaa !5
  %123 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %122, i32 0, i32 0
  %124 = load i32, ptr %123, align 16, !tbaa !18
  %125 = zext i32 %124 to i64
  %126 = getelementptr inbounds %"class.JPH::Mat44", ptr %121, i64 %125
  %127 = load ptr, ptr %19, align 8, !tbaa !5
  %128 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %127, i32 0, i32 1
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %23, ptr noundef nonnull align 16 dereferenceable(64) %126, ptr noundef nonnull align 16 dereferenceable(64) %128)
          to label %129 unwind label %136

129:                                              ; preds = %120
  %130 = load ptr, ptr %22, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %130, ptr align 16 %23, i64 64, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 64, ptr %23) #9
  br label %131

131:                                              ; preds = %129
  %132 = load ptr, ptr %22, align 8, !tbaa !5
  %133 = getelementptr inbounds %"class.JPH::Mat44", ptr %132, i32 1
  store ptr %133, ptr %22, align 8, !tbaa !5
  %134 = load ptr, ptr %19, align 8, !tbaa !5
  %135 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::InvBind", ptr %134, i32 1
  store ptr %135, ptr %19, align 8, !tbaa !5
  br label %111, !llvm.loop !23

136:                                              ; preds = %120
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %20, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %767

140:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %141 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %142 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %141)
          to label %143 unwind label %159

143:                                              ; preds = %140
  %144 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %142, i32 0, i32 1
  %145 = invoke noundef i64 @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %144)
          to label %146 unwind label %159

146:                                              ; preds = %143
  %147 = trunc i64 %145 to i32
  store i32 %147, ptr %24, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %146
  %149 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %150 = invoke noundef i64 @_ZNK3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %149)
          to label %151 unwind label %159

151:                                              ; preds = %148
  %152 = load i32, ptr %24, align 4, !tbaa !9
  %153 = zext i32 %152 to i64
  %154 = icmp eq i64 %150, %153
  br i1 %154, label %163, label %155

155:                                              ; preds = %151
  %156 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 925)
          to label %157 unwind label %159

157:                                              ; preds = %155
  br i1 %156, label %158, label %163

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

159:                                              ; preds = %155, %148, %143, %140
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %20, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %21, align 4
  br label %766

163:                                              ; preds = %158, %157, %151
  br label %164

164:                                              ; preds = %163
  br label %165

165:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %166 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %167 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %166)
          to label %168 unwind label %187

168:                                              ; preds = %165
  %169 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %167, i32 0, i32 1
  %170 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %169)
          to label %171 unwind label %187

171:                                              ; preds = %168
  store ptr %170, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %172 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %173 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %172)
          to label %174 unwind label %191

174:                                              ; preds = %171
  %175 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %173, i32 0, i32 6
  store ptr %175, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %176 = load ptr, ptr %27, align 8, !tbaa !5
  %177 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %176)
          to label %178 unwind label %195

178:                                              ; preds = %174
  store ptr %177, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %179 = load ptr, ptr %27, align 8, !tbaa !5
  %180 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %179)
          to label %181 unwind label %199

181:                                              ; preds = %178
  store ptr %180, ptr %29, align 8, !tbaa !5
  br label %182

182:                                              ; preds = %350, %181
  %183 = load ptr, ptr %28, align 8, !tbaa !5
  %184 = load ptr, ptr %29, align 8, !tbaa !5
  %185 = icmp ne ptr %183, %184
  br i1 %185, label %203, label %186

186:                                              ; preds = %182
  store i32 7, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %363

187:                                              ; preds = %168, %165
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %20, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %21, align 4
  br label %765

191:                                              ; preds = %171
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %20, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %21, align 4
  br label %362

195:                                              ; preds = %174
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %20, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %21, align 4
  br label %361

199:                                              ; preds = %178
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %20, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %21, align 4
  br label %360

203:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %204 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %204, ptr %31, align 8, !tbaa !5
  br label %205

205:                                              ; preds = %203
  %206 = load ptr, ptr %31, align 8, !tbaa !5
  %207 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %206, i32 0, i32 0
  %208 = load i32, ptr %207, align 4, !tbaa !26
  %209 = load i32, ptr %24, align 4, !tbaa !9
  %210 = icmp ult i32 %208, %209
  br i1 %210, label %219, label %211

211:                                              ; preds = %205
  %212 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 930)
          to label %213 unwind label %215

213:                                              ; preds = %211
  br i1 %212, label %214, label %219

214:                                              ; preds = %213
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !29
  br label %219

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

219:                                              ; preds = %214, %213, %205
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #9
  %222 = load ptr, ptr %26, align 8, !tbaa !5
  %223 = load ptr, ptr %31, align 8, !tbaa !5
  %224 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %223, i32 0, i32 0
  %225 = load i32, ptr %224, align 4, !tbaa !26
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %222, i64 %226
  %228 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %227, i32 0, i32 0
  %229 = invoke { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12) %228)
          to label %230 unwind label %257

230:                                              ; preds = %221
  %231 = getelementptr inbounds %"class.JPH::Vec3", ptr %33, i32 0, i32 0
  %232 = getelementptr inbounds %union.anon.0, ptr %231, i32 0, i32 0
  %233 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 0
  %234 = extractvalue { double, double } %229, 0
  store double %234, ptr %233, align 16
  %235 = getelementptr inbounds { double, double }, ptr %232, i32 0, i32 1
  %236 = extractvalue { double, double } %229, 1
  store double %236, ptr %235, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  %237 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %238 unwind label %261

238:                                              ; preds = %230
  %239 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %240 = getelementptr inbounds %union.anon.0, ptr %239, i32 0, i32 0
  %241 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 0
  %242 = extractvalue { double, double } %237, 0
  store double %242, ptr %241, align 16
  %243 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 1
  %244 = extractvalue { double, double } %237, 1
  store double %244, ptr %243, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %245 = load ptr, ptr %31, align 8, !tbaa !5
  %246 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %245, i32 0, i32 1
  store ptr %246, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %247 = load ptr, ptr %35, align 8, !tbaa !5
  %248 = getelementptr inbounds [4 x %"class.JPH::SoftBodySharedSettings::SkinWeight"], ptr %247, i64 0, i64 0
  store ptr %248, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %249 = load ptr, ptr %35, align 8, !tbaa !5
  %250 = getelementptr inbounds [4 x %"class.JPH::SoftBodySharedSettings::SkinWeight"], ptr %249, i64 0, i64 0
  %251 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %250, i64 4
  store ptr %251, ptr %37, align 8, !tbaa !5
  br label %252

252:                                              ; preds = %332, %238
  %253 = load ptr, ptr %36, align 8, !tbaa !5
  %254 = load ptr, ptr %37, align 8, !tbaa !5
  %255 = icmp ne ptr %253, %254
  br i1 %255, label %265, label %256

256:                                              ; preds = %252
  store i32 11, ptr %30, align 4
  br label %335

257:                                              ; preds = %221
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %20, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %21, align 4
  br label %358

261:                                              ; preds = %230
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %20, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %21, align 4
  br label %357

265:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %266 = load ptr, ptr %36, align 8, !tbaa !5
  store ptr %266, ptr %38, align 8, !tbaa !5
  %267 = load ptr, ptr %38, align 8, !tbaa !5
  %268 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %267, i32 0, i32 1
  %269 = load float, ptr %268, align 4, !tbaa !30
  %270 = fcmp oeq float %269, 0.000000e+00
  br i1 %270, label %271, label %272

271:                                              ; preds = %265
  store i32 11, ptr %30, align 4
  br label %329

272:                                              ; preds = %265
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %38, align 8, !tbaa !5
  %275 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %274, i32 0, i32 0
  %276 = load i32, ptr %275, align 4, !tbaa !32
  %277 = load i32, ptr %13, align 4, !tbaa !9
  %278 = icmp ult i32 %276, %277
  br i1 %278, label %287, label %279

279:                                              ; preds = %273
  %280 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 941)
          to label %281 unwind label %283

281:                                              ; preds = %279
  br i1 %280, label %282, label %287

282:                                              ; preds = %281
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !33
  br label %287

283:                                              ; preds = %316, %304, %289, %279
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %20, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %21, align 4
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %357

287:                                              ; preds = %282, %281, %273
  br label %288

288:                                              ; preds = %287
  br label %289

289:                                              ; preds = %288
  %290 = load ptr, ptr %38, align 8, !tbaa !5
  %291 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %290, i32 0, i32 1
  %292 = load float, ptr %291, align 4, !tbaa !30
  %293 = load ptr, ptr %15, align 8, !tbaa !5
  %294 = load ptr, ptr %38, align 8, !tbaa !5
  %295 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %294, i32 0, i32 0
  %296 = load i32, ptr %295, align 4, !tbaa !32
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds %"class.JPH::Mat44", ptr %293, i64 %297
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %33, i64 16, i1 false), !tbaa.struct !34
  %299 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %300 = load double, ptr %299, align 16
  %301 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %302 = load double, ptr %301, align 8
  %303 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %298, double %300, double %302)
          to label %304 unwind label %283

304:                                              ; preds = %289
  %305 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %306 = getelementptr inbounds %union.anon.0, ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 0
  %308 = extractvalue { double, double } %303, 0
  store double %308, ptr %307, align 16
  %309 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 1
  %310 = extractvalue { double, double } %303, 1
  store double %310, ptr %309, align 8
  %311 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %312 = load double, ptr %311, align 16
  %313 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %314 = load double, ptr %313, align 8
  %315 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %292, double %312, double %314)
          to label %316 unwind label %283

316:                                              ; preds = %304
  %317 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %318 = getelementptr inbounds %union.anon.0, ptr %317, i32 0, i32 0
  %319 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 0
  %320 = extractvalue { double, double } %315, 0
  store double %320, ptr %319, align 16
  %321 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 1
  %322 = extractvalue { double, double } %315, 1
  store double %322, ptr %321, align 8
  %323 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %324 = load double, ptr %323, align 16
  %325 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %326 = load double, ptr %325, align 8
  %327 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %324, double %326)
          to label %328 unwind label %283

328:                                              ; preds = %316
  store i32 0, ptr %30, align 4
  br label %329

329:                                              ; preds = %328, %271
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  %330 = load i32, ptr %30, align 4
  switch i32 %330, label %335 [
    i32 0, label %331
  ]

331:                                              ; preds = %329
  br label %332

332:                                              ; preds = %331
  %333 = load ptr, ptr %36, align 8, !tbaa !5
  %334 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::SkinWeight", ptr %333, i32 1
  store ptr %334, ptr %36, align 8, !tbaa !5
  br label %252

335:                                              ; preds = %329, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %336

336:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %337 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %338 = load ptr, ptr %31, align 8, !tbaa !5
  %339 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %338, i32 0, i32 0
  %340 = load i32, ptr %339, align 4, !tbaa !26
  %341 = zext i32 %340 to i64
  %342 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %337, i64 noundef %341)
          to label %343 unwind label %353

343:                                              ; preds = %336
  store ptr %342, ptr %43, align 8, !tbaa !5
  %344 = load ptr, ptr %43, align 8, !tbaa !5
  %345 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %344, i32 0, i32 1
  %346 = load ptr, ptr %43, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %346, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %347, ptr align 16 %345, i64 16, i1 false), !tbaa.struct !34
  %348 = load ptr, ptr %43, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %348, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %349, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %350

350:                                              ; preds = %343
  %351 = load ptr, ptr %28, align 8, !tbaa !5
  %352 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %351, i32 1
  store ptr %352, ptr %28, align 8, !tbaa !5
  br label %182

353:                                              ; preds = %336
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %20, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  br label %357

357:                                              ; preds = %353, %283, %261
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  br label %358

358:                                              ; preds = %357, %257
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  br label %359

359:                                              ; preds = %358, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %360

360:                                              ; preds = %359, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %361

361:                                              ; preds = %360, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %362

362:                                              ; preds = %361, %191
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %765

363:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %364 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %365 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %364)
          to label %366 unwind label %379

366:                                              ; preds = %363
  %367 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %365, i32 0, i32 6
  store ptr %367, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %368 = load ptr, ptr %44, align 8, !tbaa !5
  %369 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %368)
          to label %370 unwind label %383

370:                                              ; preds = %366
  store ptr %369, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %371 = load ptr, ptr %44, align 8, !tbaa !5
  %372 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %371)
          to label %373 unwind label %387

373:                                              ; preds = %370
  store ptr %372, ptr %46, align 8, !tbaa !5
  br label %374

374:                                              ; preds = %596, %373
  %375 = load ptr, ptr %45, align 8, !tbaa !5
  %376 = load ptr, ptr %46, align 8, !tbaa !5
  %377 = icmp ne ptr %375, %376
  br i1 %377, label %391, label %378

378:                                              ; preds = %374
  store i32 15, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %608

379:                                              ; preds = %363
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %20, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %21, align 4
  br label %607

383:                                              ; preds = %366
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %20, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %21, align 4
  br label %606

387:                                              ; preds = %370
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %20, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %21, align 4
  br label %605

391:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %392 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %392, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #9
  %393 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %394 unwind label %528

394:                                              ; preds = %391
  %395 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %396 = getelementptr inbounds %union.anon.0, ptr %395, i32 0, i32 0
  %397 = getelementptr inbounds { double, double }, ptr %396, i32 0, i32 0
  %398 = extractvalue { double, double } %393, 0
  store double %398, ptr %397, align 16
  %399 = getelementptr inbounds { double, double }, ptr %396, i32 0, i32 1
  %400 = extractvalue { double, double } %393, 1
  store double %400, ptr %399, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  %401 = load ptr, ptr %47, align 8, !tbaa !5
  %402 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %401, i32 0, i32 5
  %403 = load i32, ptr %402, align 4, !tbaa !35
  %404 = lshr i32 %403, 24
  store i32 %404, ptr %49, align 4, !tbaa !9
  %405 = load i32, ptr %49, align 4, !tbaa !9
  %406 = icmp ugt i32 %405, 0
  br i1 %406, label %407, label %587

407:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %408 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %409 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %408)
          to label %410 unwind label %532

410:                                              ; preds = %407
  %411 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %409, i32 0, i32 13
  %412 = load ptr, ptr %47, align 8, !tbaa !5
  %413 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %412, i32 0, i32 5
  %414 = load i32, ptr %413, align 4, !tbaa !35
  %415 = and i32 %414, 16777215
  %416 = zext i32 %415 to i64
  %417 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %411, i64 noundef %416)
          to label %418 unwind label %532

418:                                              ; preds = %410
  store ptr %417, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %419 = load ptr, ptr %50, align 8, !tbaa !5
  %420 = load i32, ptr %49, align 4, !tbaa !9
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  store ptr %422, ptr %51, align 8, !tbaa !5
  br label %423

423:                                              ; preds = %525, %418
  %424 = load ptr, ptr %50, align 8, !tbaa !5
  %425 = load ptr, ptr %51, align 8, !tbaa !5
  %426 = icmp ult ptr %424, %425
  br i1 %426, label %427, label %560

427:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %428 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %429 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %428)
          to label %430 unwind label %536

430:                                              ; preds = %427
  %431 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %429, i32 0, i32 2
  %432 = load ptr, ptr %50, align 8, !tbaa !5
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = zext i32 %433 to i64
  %435 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %431, i64 noundef %434)
          to label %436 unwind label %536

436:                                              ; preds = %430
  store ptr %435, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #9
  %437 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %438 = load ptr, ptr %52, align 8, !tbaa !5
  %439 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %438, i32 0, i32 0
  %440 = getelementptr inbounds [3 x i32], ptr %439, i64 0, i64 0
  %441 = load i32, ptr %440, align 4, !tbaa !9
  %442 = zext i32 %441 to i64
  %443 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %437, i64 noundef %442)
          to label %444 unwind label %540

444:                                              ; preds = %436
  %445 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %443, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 %445, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #9
  %446 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %447 = load ptr, ptr %52, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %447, i32 0, i32 0
  %449 = getelementptr inbounds [3 x i32], ptr %448, i64 0, i64 1
  %450 = load i32, ptr %449, align 4, !tbaa !9
  %451 = zext i32 %450 to i64
  %452 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %446, i64 noundef %451)
          to label %453 unwind label %544

453:                                              ; preds = %444
  %454 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %452, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %454, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #9
  %455 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %456 = load ptr, ptr %52, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Face", ptr %456, i32 0, i32 0
  %458 = getelementptr inbounds [3 x i32], ptr %457, i64 0, i64 2
  %459 = load i32, ptr %458, align 4, !tbaa !9
  %460 = zext i32 %459 to i64
  %461 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %455, i64 noundef %460)
          to label %462 unwind label %548

462:                                              ; preds = %453
  %463 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %461, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 %463, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 %53, i64 16, i1 false), !tbaa.struct !34
  %464 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %465 = load double, ptr %464, align 16
  %466 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %467 = load double, ptr %466, align 8
  %468 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %54, double %465, double %467)
          to label %469 unwind label %552

469:                                              ; preds = %462
  %470 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %471 = getelementptr inbounds %union.anon.0, ptr %470, i32 0, i32 0
  %472 = getelementptr inbounds { double, double }, ptr %471, i32 0, i32 0
  %473 = extractvalue { double, double } %468, 0
  store double %473, ptr %472, align 16
  %474 = getelementptr inbounds { double, double }, ptr %471, i32 0, i32 1
  %475 = extractvalue { double, double } %468, 1
  store double %475, ptr %474, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %61, ptr align 16 %53, i64 16, i1 false), !tbaa.struct !34
  %476 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 0
  %477 = load double, ptr %476, align 16
  %478 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 1
  %479 = load double, ptr %478, align 8
  %480 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %55, double %477, double %479)
          to label %481 unwind label %552

481:                                              ; preds = %469
  %482 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %483 = getelementptr inbounds %union.anon.0, ptr %482, i32 0, i32 0
  %484 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 0
  %485 = extractvalue { double, double } %480, 0
  store double %485, ptr %484, align 16
  %486 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 1
  %487 = extractvalue { double, double } %480, 1
  store double %487, ptr %486, align 8
  %488 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %489 = load double, ptr %488, align 16
  %490 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %491 = load double, ptr %490, align 8
  %492 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %58, double %489, double %491)
          to label %493 unwind label %552

493:                                              ; preds = %481
  %494 = getelementptr inbounds %"class.JPH::Vec3", ptr %57, i32 0, i32 0
  %495 = getelementptr inbounds %union.anon.0, ptr %494, i32 0, i32 0
  %496 = getelementptr inbounds { double, double }, ptr %495, i32 0, i32 0
  %497 = extractvalue { double, double } %492, 0
  store double %497, ptr %496, align 16
  %498 = getelementptr inbounds { double, double }, ptr %495, i32 0, i32 1
  %499 = extractvalue { double, double } %492, 1
  store double %499, ptr %498, align 8
  %500 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %501 unwind label %552

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

513:                                              ; preds = %501
  %514 = getelementptr inbounds %"class.JPH::Vec3", ptr %56, i32 0, i32 0
  %515 = getelementptr inbounds %union.anon.0, ptr %514, i32 0, i32 0
  %516 = getelementptr inbounds { double, double }, ptr %515, i32 0, i32 0
  %517 = extractvalue { double, double } %512, 0
  store double %517, ptr %516, align 16
  %518 = getelementptr inbounds { double, double }, ptr %515, i32 0, i32 1
  %519 = extractvalue { double, double } %512, 1
  store double %519, ptr %518, align 8
  %520 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %521 = load double, ptr %520, align 16
  %522 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %523 = load double, ptr %522, align 8
  %524 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %521, double %523)
          to label %525 unwind label %552

525:                                              ; preds = %513
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #9
  %526 = load ptr, ptr %50, align 8, !tbaa !5
  %527 = getelementptr inbounds i32, ptr %526, i32 1
  store ptr %527, ptr %50, align 8, !tbaa !5
  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 16, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %423, !llvm.loop !36

528:                                              ; preds = %391
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %20, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %21, align 4
  br label %604

532:                                              ; preds = %410, %407
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %20, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %21, align 4
  br label %586

536:                                              ; preds = %430, %427
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %20, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %21, align 4
  br label %559

540:                                              ; preds = %436
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %20, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %21, align 4
  br label %558

544:                                              ; preds = %444
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %20, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %21, align 4
  br label %557

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

552:                                              ; preds = %513, %501, %493, %481, %469, %462
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %20, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #9
  br label %556

556:                                              ; preds = %552, %548
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #9
  br label %557

557:                                              ; preds = %556, %544
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #9
  br label %558

558:                                              ; preds = %557, %540
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #9
  br label %559

559:                                              ; preds = %558, %536
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %585

560:                                              ; preds = %423
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #9
  %561 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %562 unwind label %581

562:                                              ; preds = %560
  %563 = getelementptr inbounds %"class.JPH::Vec3", ptr %64, i32 0, i32 0
  %564 = getelementptr inbounds %union.anon.0, ptr %563, i32 0, i32 0
  %565 = getelementptr inbounds { double, double }, ptr %564, i32 0, i32 0
  %566 = extractvalue { double, double } %561, 0
  store double %566, ptr %565, align 16
  %567 = getelementptr inbounds { double, double }, ptr %564, i32 0, i32 1
  %568 = extractvalue { double, double } %561, 1
  store double %568, ptr %567, align 8
  %569 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %570 = load double, ptr %569, align 16
  %571 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %572 = load double, ptr %571, align 8
  %573 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %48, double %570, double %572)
          to label %574 unwind label %581

574:                                              ; preds = %562
  %575 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %576 = getelementptr inbounds %union.anon.0, ptr %575, i32 0, i32 0
  %577 = getelementptr inbounds { double, double }, ptr %576, i32 0, i32 0
  %578 = extractvalue { double, double } %573, 0
  store double %578, ptr %577, align 16
  %579 = getelementptr inbounds { double, double }, ptr %576, i32 0, i32 1
  %580 = extractvalue { double, double } %573, 1
  store double %580, ptr %579, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %48, ptr align 16 %63, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %587

581:                                              ; preds = %562, %560
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %20, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  br label %585

585:                                              ; preds = %581, %559
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %586

586:                                              ; preds = %585, %532
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %603

587:                                              ; preds = %574, %394
  %588 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %589 = load ptr, ptr %47, align 8, !tbaa !5
  %590 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 4, !tbaa !26
  %592 = zext i32 %591 to i64
  %593 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %588, i64 noundef %592)
          to label %594 unwind label %599

594:                                              ; preds = %587
  %595 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %593, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %595, ptr align 16 %48, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %596

596:                                              ; preds = %594
  %597 = load ptr, ptr %45, align 8, !tbaa !5
  %598 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %597, i32 1
  store ptr %598, ptr %45, align 8, !tbaa !5
  br label %374

599:                                              ; preds = %587
  %600 = landingpad { ptr, i32 }
          cleanup
  %601 = extractvalue { ptr, i32 } %600, 0
  store ptr %601, ptr %20, align 8
  %602 = extractvalue { ptr, i32 } %600, 1
  store i32 %602, ptr %21, align 4
  br label %603

603:                                              ; preds = %599, %586
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %604

604:                                              ; preds = %603, %528
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %605

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

606:                                              ; preds = %605, %383
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %607

607:                                              ; preds = %606, %379
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %765

608:                                              ; preds = %378
  %609 = load i8, ptr %11, align 1, !tbaa !11, !range !37, !noundef !38
  %610 = trunc i8 %609 to i1
  br i1 %610, label %611, label %694

611:                                              ; preds = %608
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %612 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %613 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %612)
          to label %614 unwind label %627

614:                                              ; preds = %611
  %615 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %613, i32 0, i32 6
  store ptr %615, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %616 = load ptr, ptr %65, align 8, !tbaa !5
  %617 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %616)
          to label %618 unwind label %631

618:                                              ; preds = %614
  store ptr %617, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %619 = load ptr, ptr %65, align 8, !tbaa !5
  %620 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %619)
          to label %621 unwind label %635

621:                                              ; preds = %618
  store ptr %620, ptr %67, align 8, !tbaa !5
  br label %622

622:                                              ; preds = %673, %621
  %623 = load ptr, ptr %66, align 8, !tbaa !5
  %624 = load ptr, ptr %67, align 8, !tbaa !5
  %625 = icmp ne ptr %623, %624
  br i1 %625, label %639, label %626

626:                                              ; preds = %622
  store i32 19, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  br label %693

627:                                              ; preds = %611
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %20, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %21, align 4
  br label %692

631:                                              ; preds = %614
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %20, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %21, align 4
  br label %691

635:                                              ; preds = %618
  %636 = landingpad { ptr, i32 }
          cleanup
  %637 = extractvalue { ptr, i32 } %636, 0
  store ptr %637, ptr %20, align 8
  %638 = extractvalue { ptr, i32 } %636, 1
  store i32 %638, ptr %21, align 4
  br label %690

639:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %640 = load ptr, ptr %66, align 8, !tbaa !5
  store ptr %640, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %641 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 2
  %642 = load ptr, ptr %68, align 8, !tbaa !5
  %643 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %642, i32 0, i32 0
  %644 = load i32, ptr %643, align 4, !tbaa !26
  %645 = zext i32 %644 to i64
  %646 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %641, i64 noundef %645)
          to label %647 unwind label %676

647:                                              ; preds = %639
  store ptr %646, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %648 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %649 = load ptr, ptr %68, align 8, !tbaa !5
  %650 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %649, i32 0, i32 0
  %651 = load i32, ptr %650, align 4, !tbaa !26
  %652 = zext i32 %651 to i64
  %653 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %648, i64 noundef %652)
          to label %654 unwind label %680

654:                                              ; preds = %647
  store ptr %653, ptr %70, align 8, !tbaa !5
  %655 = load ptr, ptr %70, align 8, !tbaa !5
  %656 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %655, i32 0, i32 1
  %657 = load ptr, ptr %70, align 8, !tbaa !5
  %658 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %657, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %658, ptr align 16 %656, i64 16, i1 false), !tbaa.struct !34
  %659 = load ptr, ptr %70, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %659, i32 0, i32 1
  %661 = load ptr, ptr %69, align 8, !tbaa !5
  %662 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %661, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %662, ptr align 16 %660, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.start.p0(i64 16, ptr %71) #9
  %663 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %664 unwind label %684

664:                                              ; preds = %654
  %665 = getelementptr inbounds %"class.JPH::Vec3", ptr %71, i32 0, i32 0
  %666 = getelementptr inbounds %union.anon.0, ptr %665, i32 0, i32 0
  %667 = getelementptr inbounds { double, double }, ptr %666, i32 0, i32 0
  %668 = extractvalue { double, double } %663, 0
  store double %668, ptr %667, align 16
  %669 = getelementptr inbounds { double, double }, ptr %666, i32 0, i32 1
  %670 = extractvalue { double, double } %663, 1
  store double %670, ptr %669, align 8
  %671 = load ptr, ptr %69, align 8, !tbaa !5
  %672 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %671, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %672, ptr align 16 %71, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %673

673:                                              ; preds = %664
  %674 = load ptr, ptr %66, align 8, !tbaa !5
  %675 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %674, i32 1
  store ptr %675, ptr %66, align 8, !tbaa !5
  br label %622

676:                                              ; preds = %639
  %677 = landingpad { ptr, i32 }
          cleanup
  %678 = extractvalue { ptr, i32 } %677, 0
  store ptr %678, ptr %20, align 8
  %679 = extractvalue { ptr, i32 } %677, 1
  store i32 %679, ptr %21, align 4
  br label %689

680:                                              ; preds = %647
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %20, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %21, align 4
  br label %688

684:                                              ; preds = %654
  %685 = landingpad { ptr, i32 }
          cleanup
  %686 = extractvalue { ptr, i32 } %685, 0
  store ptr %686, ptr %20, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #9
  br label %688

688:                                              ; preds = %684, %680
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  br label %689

689:                                              ; preds = %688, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %690

690:                                              ; preds = %689, %635
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  br label %691

691:                                              ; preds = %690, %631
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  br label %692

692:                                              ; preds = %691, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  br label %765

693:                                              ; preds = %626
  br label %763

694:                                              ; preds = %608
  %695 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 12
  %696 = load i8, ptr %695, align 2, !tbaa !39, !range !37, !noundef !38
  %697 = trunc i8 %696 to i1
  br i1 %697, label %762, label %698

698:                                              ; preds = %694
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %699 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 1
  %700 = invoke noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %699)
          to label %701 unwind label %714

701:                                              ; preds = %698
  %702 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings", ptr %700, i32 0, i32 6
  store ptr %702, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %703 = load ptr, ptr %72, align 8, !tbaa !5
  %704 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %703)
          to label %705 unwind label %718

705:                                              ; preds = %701
  store ptr %704, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %706 = load ptr, ptr %72, align 8, !tbaa !5
  %707 = invoke noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %706)
          to label %708 unwind label %722

708:                                              ; preds = %705
  store ptr %707, ptr %74, align 8, !tbaa !5
  br label %709

709:                                              ; preds = %755, %708
  %710 = load ptr, ptr %73, align 8, !tbaa !5
  %711 = load ptr, ptr %74, align 8, !tbaa !5
  %712 = icmp ne ptr %710, %711
  br i1 %712, label %726, label %713

713:                                              ; preds = %709
  store i32 21, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %761

714:                                              ; preds = %698
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %20, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %21, align 4
  br label %760

718:                                              ; preds = %701
  %719 = landingpad { ptr, i32 }
          cleanup
  %720 = extractvalue { ptr, i32 } %719, 0
  store ptr %720, ptr %20, align 8
  %721 = extractvalue { ptr, i32 } %719, 1
  store i32 %721, ptr %21, align 4
  br label %759

722:                                              ; preds = %705
  %723 = landingpad { ptr, i32 }
          cleanup
  %724 = extractvalue { ptr, i32 } %723, 0
  store ptr %724, ptr %20, align 8
  %725 = extractvalue { ptr, i32 } %723, 1
  store i32 %725, ptr %21, align 4
  br label %758

726:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %727 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %727, ptr %75, align 8, !tbaa !5
  %728 = load ptr, ptr %75, align 8, !tbaa !5
  %729 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %728, i32 0, i32 2
  %730 = load float, ptr %729, align 4, !tbaa !56
  %731 = fcmp oeq float %730, 0.000000e+00
  br i1 %731, label %732, label %754

732:                                              ; preds = %726
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %733 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 2
  %734 = load ptr, ptr %75, align 8, !tbaa !5
  %735 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %734, i32 0, i32 0
  %736 = load i32, ptr %735, align 4, !tbaa !26
  %737 = zext i32 %736 to i64
  %738 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %733, i64 noundef %737)
          to label %739 unwind label %750

739:                                              ; preds = %732
  store ptr %738, ptr %76, align 8, !tbaa !5
  %740 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 4
  %741 = load ptr, ptr %75, align 8, !tbaa !5
  %742 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %741, i32 0, i32 0
  %743 = load i32, ptr %742, align 4, !tbaa !26
  %744 = zext i32 %743 to i64
  %745 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %740, i64 noundef %744)
          to label %746 unwind label %750

746:                                              ; preds = %739
  %747 = getelementptr inbounds %"struct.JPH::SoftBodyMotionProperties::SkinState", ptr %745, i32 0, i32 1
  %748 = load ptr, ptr %76, align 8, !tbaa !5
  %749 = getelementptr inbounds %"class.JPH::SoftBodyVertex", ptr %748, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %749, ptr align 16 %747, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  br label %754

750:                                              ; preds = %739, %732
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %20, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %758

754:                                              ; preds = %746, %726
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %755

755:                                              ; preds = %754
  %756 = load ptr, ptr %73, align 8, !tbaa !5
  %757 = getelementptr inbounds %"class.JPH::SoftBodySharedSettings::Skinned", ptr %756, i32 1
  store ptr %757, ptr %73, align 8, !tbaa !5
  br label %709

758:                                              ; preds = %750, %722
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  br label %759

759:                                              ; preds = %758, %718
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %760

760:                                              ; preds = %759, %714
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %765

761:                                              ; preds = %713
  br label %762

762:                                              ; preds = %761, %694
  br label %763

763:                                              ; preds = %762, %693
  %764 = getelementptr inbounds %"class.JPH::SoftBodyMotionProperties", ptr %78, i32 0, i32 13
  store i8 1, ptr %764, align 1, !tbaa !57
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #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

765:                                              ; preds = %760, %692, %607, %362, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %766

766:                                              ; preds = %765, %159
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %767

767:                                              ; preds = %766, %136, %116
  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 %768

768:                                              ; preds = %767
  %769 = load ptr, ptr %20, align 8
  %770 = load i32, ptr %21, align 4
  %771 = insertvalue { ptr, i32 } poison, ptr %769, 0
  %772 = insertvalue { ptr, i32 } %771, i32 %770, 1
  resume { ptr, i32 } %772
}

; 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 0, i64 64, !22}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{i64 2159232897}
!26 = !{!27, !10, i64 0}
!27 = !{!"_ZTSN3JPH22SoftBodySharedSettings7SkinnedE", !10, i64 0, !7, i64 4, !28, i64 36, !28, i64 40, !28, i64 44, !10, i64 48}
!28 = !{!"float", !7, i64 0}
!29 = !{i64 2159233263}
!30 = !{!31, !28, i64 4}
!31 = !{!"_ZTSN3JPH22SoftBodySharedSettings10SkinWeightE", !10, i64 0, !28, i64 4}
!32 = !{!31, !10, i64 0}
!33 = !{i64 2159233651}
!34 = !{i64 0, i64 16, !22}
!35 = !{!27, !10, i64 48}
!36 = distinct !{!36, !24}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!40, !12, i64 350}
!40 = !{!"_ZTSN3JPH24SoftBodyMotionPropertiesE", !41, i64 0, !50, i64 184, !51, i64 192, !53, i64 216, !54, i64 240, !55, i64 272, !55, i64 304, !10, i64 336, !28, i64 340, !28, i64 344, !12, i64 348, !12, i64 349, !12, i64 350, !12, i64 351}
!41 = !{!"_ZTSN3JPH16MotionPropertiesE", !42, i64 0, !42, i64 16, !42, i64 32, !43, i64 48, !45, i64 64, !45, i64 76, !28, i64 88, !28, i64 92, !28, i64 96, !28, i64 100, !28, i64 104, !28, i64 108, !10, i64 112, !10, i64 116, !46, i64 120, !12, i64 121, !47, i64 122, !7, i64 123, !7, i64 124, !7, i64 128, !28, i64 176, !48, i64 180, !49, i64 181}
!42 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!43 = !{!"_ZTSN3JPH4QuatE", !44, i64 0}
!44 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!45 = !{!"_ZTSN3JPH6Float3E", !28, i64 0, !28, i64 4, !28, i64 8}
!46 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!47 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!48 = !{!"_ZTSN3JPH9EBodyTypeE", !7, i64 0}
!49 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!50 = !{!"_ZTSN3JPH8RefConstINS_22SoftBodySharedSettingsEEE", !6, i64 0}
!51 = !{!"_ZTSN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEE", !52, i64 0, !52, i64 8, !6, i64 16}
!52 = !{!"long", !7, i64 0}
!53 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties14CollidingShapeENS_12STLAllocatorIS2_EEEE", !52, i64 0, !52, i64 8, !6, i64 16}
!54 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEE", !52, i64 0, !52, i64 8, !6, i64 16}
!55 = !{!"_ZTSN3JPH5AABoxE", !42, i64 0, !42, i64 16}
!56 = !{!27, !28, i64 36}
!57 = !{!40, !12, i64 351}


; 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 [110 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.9 = 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(352) %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)
  %.not189 = icmp eq i64 %21, 0
  br i1 %.not189, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %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 240
  %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 %54, label %48

.lr.ph:                                           ; preds = %6, %.lr.ph
  %.0163 = phi ptr [ %46, %.lr.ph ], [ %32, %6 ]
  %.0130162 = phi ptr [ %45, %.lr.ph ], [ %26, %6 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #9
  %41 = load i32, ptr %.0163, align 16, !tbaa !15
  %42 = zext i32 %41 to i64
  %43 = getelementptr inbounds %"class.JPH::Mat44", ptr %2, i64 %42
  %44 = getelementptr inbounds i8, ptr %.0163, 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) %43, ptr noundef nonnull align 16 dereferenceable(64) %44)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %.0130162, ptr noundef nonnull align 16 dereferenceable(64) %9, i64 64, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #9
  %45 = getelementptr inbounds i8, ptr %.0130162, i64 64
  %46 = getelementptr inbounds i8, ptr %.0163, i64 80
  %47 = icmp ult ptr %45, %29
  br i1 %47, label %.lr.ph, label %._crit_edge, !llvm.loop !20

48:                                               ; preds = %._crit_edge
  %49 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 925)
          to label %50 unwind label %52

50:                                               ; preds = %48
  br i1 %49, label %51, label %54

51:                                               ; preds = %50
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !22
  br label %54

52:                                               ; preds = %48
  %53 = landingpad { ptr, i32 }
          cleanup
  br label %360

54:                                               ; preds = %51, %50, %._crit_edge
  %55 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %56 = getelementptr inbounds i8, ptr %55, i64 8
  %57 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings6VertexENS_12STLAllocatorIS2_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %56)
  %58 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %59 = getelementptr inbounds i8, ptr %58, i64 128
  %60 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %59)
  %61 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %59)
  %.not167 = icmp eq ptr %60, %61
  br i1 %.not167, label %._crit_edge171, label %.lr.ph170

.lr.ph170:                                        ; preds = %54
  %62 = getelementptr inbounds i8, ptr %10, i64 8
  br label %70

._crit_edge171:                                   ; preds = %196, %54
  %63 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %64 = getelementptr inbounds i8, ptr %63, i64 128
  %65 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %64)
  %66 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %64)
  %.not138176 = icmp eq ptr %65, %66
  br i1 %.not138176, label %._crit_edge180, label %.lr.ph179

.lr.ph179:                                        ; preds = %._crit_edge171
  %67 = getelementptr inbounds i8, ptr %11, i64 8
  %68 = getelementptr inbounds i8, ptr %15, i64 8
  %69 = getelementptr inbounds i8, ptr %14, i64 8
  br label %202

70:                                               ; preds = %.lr.ph170, %196
  %.0131168 = phi ptr [ %60, %.lr.ph170 ], [ %198, %196 ]
  %71 = load i32, ptr %.0131168, align 4, !tbaa !23
  %72 = icmp ult i32 %71, %36
  br i1 %72, label %79, label %73

73:                                               ; preds = %70
  %74 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 930)
          to label %75 unwind label %77

75:                                               ; preds = %73
  br i1 %74, label %76, label %79

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

77:                                               ; preds = %73
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %360

79:                                               ; preds = %76, %75, %70
  %80 = load i32, ptr %.0131168, align 4, !tbaa !23
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds %"struct.JPH::SoftBodySharedSettings::Vertex", ptr %57, i64 %81
  %83 = invoke { double, double } @_ZN3JPH4Vec317sLoadFloat3UnsafeERKNS_6Float3E(ptr noundef nonnull align 4 dereferenceable(12) %82)
          to label %84 unwind label %94

84:                                               ; preds = %79
  %85 = extractvalue { double, double } %83, 0
  %86 = extractvalue { double, double } %83, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #9
  %87 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %88 unwind label %96

88:                                               ; preds = %84
  %89 = extractvalue { double, double } %87, 0
  store double %89, ptr %10, align 16
  %90 = extractvalue { double, double } %87, 1
  store double %90, ptr %62, align 8
  %.0133.ptr164 = getelementptr inbounds i8, ptr %.0131168, i64 4
  %91 = getelementptr inbounds i8, ptr %.0131168, i64 8
  %92 = load float, ptr %91, align 4, !tbaa !27
  %93 = fcmp une float %92, 0.000000e+00
  br i1 %93, label %98, label %.critedge

94:                                               ; preds = %79
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %360

96:                                               ; preds = %84
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %201

98:                                               ; preds = %88
  %99 = load i32, ptr %.0133.ptr164, align 4, !tbaa !29
  %100 = icmp ult i32 %99, %20
  br i1 %100, label %107, label %101

101:                                              ; preds = %98
  %102 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 941)
          to label %103 unwind label %105

103:                                              ; preds = %101
  br i1 %102, label %104, label %107

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

105:                                              ; preds = %185, %179, %175, %161, %155, %151, %137, %131, %127, %113, %107, %101
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %201

107:                                              ; preds = %104, %103, %98
  %108 = load float, ptr %91, align 4, !tbaa !27
  %109 = load i32, ptr %.0133.ptr164, align 4, !tbaa !29
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %110
  %112 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %111, double %85, double %86)
          to label %113 unwind label %105

113:                                              ; preds = %107
  %114 = extractvalue { double, double } %112, 0
  %115 = extractvalue { double, double } %112, 1
  %116 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %108, double %114, double %115)
          to label %117 unwind label %105

117:                                              ; preds = %113
  %118 = extractvalue { double, double } %116, 0
  %119 = extractvalue { double, double } %116, 1
  %120 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %118, double %119)
  %.0133.ptr = getelementptr inbounds i8, ptr %.0131168, i64 12
  %121 = getelementptr inbounds i8, ptr %.0131168, i64 16
  %122 = load float, ptr %121, align 4, !tbaa !27
  %123 = fcmp une float %122, 0.000000e+00
  br i1 %123, label %124, label %.critedge

124:                                              ; preds = %117
  %125 = load i32, ptr %.0133.ptr, align 4, !tbaa !29
  %126 = icmp ult i32 %125, %20
  br i1 %126, label %131, label %127

127:                                              ; preds = %124
  %128 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 941)
          to label %129 unwind label %105

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

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

131:                                              ; preds = %130, %129, %124
  %132 = load float, ptr %121, align 4, !tbaa !27
  %133 = load i32, ptr %.0133.ptr, align 4, !tbaa !29
  %134 = zext i32 %133 to i64
  %135 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %134
  %136 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %135, double %85, double %86)
          to label %137 unwind label %105

137:                                              ; preds = %131
  %138 = extractvalue { double, double } %136, 0
  %139 = extractvalue { double, double } %136, 1
  %140 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %132, double %138, double %139)
          to label %141 unwind label %105

141:                                              ; preds = %137
  %142 = extractvalue { double, double } %140, 0
  %143 = extractvalue { double, double } %140, 1
  %144 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %142, double %143)
  %.0133.ptr.1 = getelementptr inbounds i8, ptr %.0131168, i64 20
  %145 = getelementptr inbounds i8, ptr %.0131168, i64 24
  %146 = load float, ptr %145, align 4, !tbaa !27
  %147 = fcmp une float %146, 0.000000e+00
  br i1 %147, label %148, label %.critedge

148:                                              ; preds = %141
  %149 = load i32, ptr %.0133.ptr.1, align 4, !tbaa !29
  %150 = icmp ult i32 %149, %20
  br i1 %150, label %155, label %151

151:                                              ; preds = %148
  %152 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 941)
          to label %153 unwind label %105

153:                                              ; preds = %151
  br i1 %152, label %154, label %155

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

155:                                              ; preds = %154, %153, %148
  %156 = load float, ptr %145, align 4, !tbaa !27
  %157 = load i32, ptr %.0133.ptr.1, align 4, !tbaa !29
  %158 = zext i32 %157 to i64
  %159 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %158
  %160 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %159, double %85, double %86)
          to label %161 unwind label %105

161:                                              ; preds = %155
  %162 = extractvalue { double, double } %160, 0
  %163 = extractvalue { double, double } %160, 1
  %164 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %156, double %162, double %163)
          to label %165 unwind label %105

165:                                              ; preds = %161
  %166 = extractvalue { double, double } %164, 0
  %167 = extractvalue { double, double } %164, 1
  %168 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %166, double %167)
  %.0133.ptr.2 = getelementptr inbounds i8, ptr %.0131168, i64 28
  %169 = getelementptr inbounds i8, ptr %.0131168, i64 32
  %170 = load float, ptr %169, align 4, !tbaa !27
  %171 = fcmp une float %170, 0.000000e+00
  br i1 %171, label %172, label %.critedge

172:                                              ; preds = %165
  %173 = load i32, ptr %.0133.ptr.2, align 4, !tbaa !29
  %174 = icmp ult i32 %173, %20
  br i1 %174, label %179, label %175

175:                                              ; preds = %172
  %176 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 941)
          to label %177 unwind label %105

177:                                              ; preds = %175
  br i1 %176, label %178, label %179

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

179:                                              ; preds = %178, %177, %172
  %180 = load float, ptr %169, align 4, !tbaa !27
  %181 = load i32, ptr %.0133.ptr.2, align 4, !tbaa !29
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds %"class.JPH::Mat44", ptr %26, i64 %182
  %184 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %183, double %85, double %86)
          to label %185 unwind label %105

185:                                              ; preds = %179
  %186 = extractvalue { double, double } %184, 0
  %187 = extractvalue { double, double } %184, 1
  %188 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %180, double %186, double %187)
          to label %189 unwind label %105

189:                                              ; preds = %185
  %190 = extractvalue { double, double } %188, 0
  %191 = extractvalue { double, double } %188, 1
  %192 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %190, double %191)
  br label %.critedge

.critedge:                                        ; preds = %189, %165, %141, %117, %88
  %193 = load i32, ptr %.0131168, align 4, !tbaa !23
  %194 = zext i32 %193 to i64
  %195 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %194)
          to label %196 unwind label %199

196:                                              ; preds = %.critedge
  %197 = getelementptr inbounds i8, ptr %195, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %195, ptr noundef nonnull align 16 dereferenceable(16) %197, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %197, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  %198 = getelementptr inbounds i8, ptr %.0131168, i64 52
  %.not = icmp eq ptr %198, %61
  br i1 %.not, label %._crit_edge171, label %70

199:                                              ; preds = %.critedge
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %201

201:                                              ; preds = %199, %105, %96
  %.pn155 = phi { ptr, i32 } [ %200, %199 ], [ %106, %105 ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  br label %360

._crit_edge180:                                   ; preds = %295, %._crit_edge171
  br i1 %4, label %301, label %330

202:                                              ; preds = %.lr.ph179, %295
  %.0134177 = phi ptr [ %65, %.lr.ph179 ], [ %297, %295 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #9
  %203 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %204 unwind label %265

204:                                              ; preds = %202
  %205 = extractvalue { double, double } %203, 0
  store double %205, ptr %11, align 16
  %206 = extractvalue { double, double } %203, 1
  store double %206, ptr %67, align 8
  %207 = getelementptr inbounds i8, ptr %.0134177, i64 48
  %208 = load i32, ptr %207, align 4, !tbaa !32
  %209 = lshr i32 %208, 24
  %.not143 = icmp ult i32 %208, 16777216
  br i1 %.not143, label %291, label %210

210:                                              ; preds = %204
  %211 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %212 = getelementptr inbounds i8, ptr %211, i64 280
  %213 = load i32, ptr %207, align 4, !tbaa !32
  %214 = and i32 %213, 16777215
  %215 = zext nneg i32 %214 to i64
  %216 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH5ArrayIjNS_12STLAllocatorIjEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %212, i64 noundef %215)
          to label %.lr.ph174.preheader unwind label %267

.lr.ph174.preheader:                              ; preds = %210
  %217 = zext nneg i32 %209 to i64
  %218 = getelementptr inbounds i32, ptr %216, i64 %217
  br label %.lr.ph174

.lr.ph174:                                        ; preds = %.lr.ph174.preheader, %259
  %.0135172 = phi ptr [ %263, %259 ], [ %216, %.lr.ph174.preheader ]
  %219 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %220 = getelementptr inbounds i8, ptr %219, i64 32
  %221 = load i32, ptr %.0135172, align 4, !tbaa !33
  %222 = zext i32 %221 to i64
  %223 = invoke noundef nonnull align 4 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef %222)
          to label %224 unwind label %269

224:                                              ; preds = %.lr.ph174
  %225 = load i32, ptr %223, align 4, !tbaa !33
  %226 = zext i32 %225 to i64
  %227 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %226)
          to label %228 unwind label %271

228:                                              ; preds = %224
  %229 = getelementptr inbounds i8, ptr %227, i64 16
  %.sroa.036.0.copyload = load double, ptr %229, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %227, i64 24
  %.sroa.6.0.copyload = load double, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #9
  %230 = getelementptr inbounds i8, ptr %223, i64 4
  %231 = load i32, ptr %230, align 4, !tbaa !33
  %232 = zext i32 %231 to i64
  %233 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %232)
          to label %234 unwind label %273

234:                                              ; preds = %228
  %235 = getelementptr inbounds i8, ptr %233, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %12, ptr noundef nonnull align 16 dereferenceable(16) %235, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #9
  %236 = getelementptr inbounds i8, ptr %223, i64 8
  %237 = load i32, ptr %236, align 4, !tbaa !33
  %238 = zext i32 %237 to i64
  %239 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %238)
          to label %240 unwind label %275

240:                                              ; preds = %234
  %241 = getelementptr inbounds i8, ptr %239, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %13, ptr noundef nonnull align 16 dereferenceable(16) %241, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #9
  %242 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %.sroa.036.0.copyload, double %.sroa.6.0.copyload)
          to label %243 unwind label %277

243:                                              ; preds = %240
  %244 = extractvalue { double, double } %242, 0
  store double %244, ptr %15, align 16
  %245 = extractvalue { double, double } %242, 1
  store double %245, ptr %68, align 8
  %246 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %13, double %.sroa.036.0.copyload, double %.sroa.6.0.copyload)
          to label %247 unwind label %277

247:                                              ; preds = %243
  %248 = extractvalue { double, double } %246, 0
  %249 = extractvalue { double, double } %246, 1
  %250 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %248, double %249)
          to label %251 unwind label %277

251:                                              ; preds = %247
  %252 = extractvalue { double, double } %250, 0
  store double %252, ptr %14, align 16
  %253 = extractvalue { double, double } %250, 1
  store double %253, ptr %69, align 8
  %254 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %255 unwind label %277

255:                                              ; preds = %251
  %256 = extractvalue { double, double } %254, 0
  %257 = extractvalue { double, double } %254, 1
  %258 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %256, double %257)
          to label %259 unwind label %277

259:                                              ; preds = %255
  %260 = extractvalue { double, double } %258, 0
  %261 = extractvalue { double, double } %258, 1
  %262 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %260, double %261)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #9
  %263 = getelementptr inbounds i8, ptr %.0135172, 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
  %264 = icmp ult ptr %263, %218
  br i1 %264, label %.lr.ph174, label %._crit_edge175, !llvm.loop !34

265:                                              ; preds = %202
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %300

267:                                              ; preds = %210
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %300

269:                                              ; preds = %.lr.ph174
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %300

271:                                              ; preds = %224
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %300

273:                                              ; preds = %228
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %280

275:                                              ; preds = %234
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %279

277:                                              ; preds = %255, %251, %247, %243, %240
  %278 = 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 %279

279:                                              ; preds = %277, %275
  %.pn144 = phi { ptr, i32 } [ %278, %277 ], [ %276, %275 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  br label %280

280:                                              ; preds = %279, %273
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %279 ], [ %274, %273 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #9
  br label %300

._crit_edge175:                                   ; preds = %259
  %281 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %282 unwind label %289

282:                                              ; preds = %._crit_edge175
  %283 = extractvalue { double, double } %281, 0
  %284 = extractvalue { double, double } %281, 1
  %285 = invoke { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %283, double %284)
          to label %286 unwind label %289

286:                                              ; preds = %282
  %287 = extractvalue { double, double } %285, 0
  %288 = extractvalue { double, double } %285, 1
  store double %287, ptr %11, align 16
  store double %288, ptr %67, align 8, !tbaa !19
  br label %291

289:                                              ; preds = %282, %._crit_edge175
  %290 = landingpad { ptr, i32 }
          cleanup
  br label %300

291:                                              ; preds = %286, %204
  %292 = load i32, ptr %.0134177, align 4, !tbaa !23
  %293 = zext i32 %292 to i64
  %294 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %293)
          to label %295 unwind label %298

295:                                              ; preds = %291
  %296 = getelementptr inbounds i8, ptr %294, i64 32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %296, ptr noundef nonnull align 16 dereferenceable(16) %11, i64 16, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  %297 = getelementptr inbounds i8, ptr %.0134177, i64 52
  %.not138 = icmp eq ptr %297, %66
  br i1 %.not138, label %._crit_edge180, label %202

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

300:                                              ; preds = %298, %289, %271, %280, %269, %267, %265
  %.pn144.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %266, %265 ], [ %299, %298 ], [ %268, %267 ], [ %290, %289 ], [ %270, %269 ], [ %.pn144.pn, %280 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  br label %360

301:                                              ; preds = %._crit_edge180
  %302 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %303 = getelementptr inbounds i8, ptr %302, i64 128
  %304 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %303)
  %305 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %303)
  %.not140185 = icmp eq ptr %304, %305
  br i1 %.not140185, label %.loopexit, label %.lr.ph188

.lr.ph188:                                        ; preds = %301
  %306 = getelementptr inbounds i8, ptr %0, i64 192
  br label %307

307:                                              ; preds = %.lr.ph188, %319
  %.0136186 = phi ptr [ %304, %.lr.ph188 ], [ %323, %319 ]
  %308 = load i32, ptr %.0136186, align 4, !tbaa !23
  %309 = zext i32 %308 to i64
  %310 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %306, i64 noundef %309)
          to label %311 unwind label %324

311:                                              ; preds = %307
  %312 = load i32, ptr %.0136186, align 4, !tbaa !23
  %313 = zext i32 %312 to i64
  %314 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %313)
          to label %315 unwind label %326

315:                                              ; preds = %311
  %316 = getelementptr inbounds i8, ptr %314, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %314, ptr noundef nonnull align 16 dereferenceable(16) %316, i64 16, i1 false), !tbaa.struct !31
  %317 = getelementptr inbounds i8, ptr %310, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %317, ptr noundef nonnull align 16 dereferenceable(16) %316, i64 16, i1 false), !tbaa.struct !31
  %318 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %319 unwind label %328

319:                                              ; preds = %315
  %320 = extractvalue { double, double } %318, 0
  %321 = extractvalue { double, double } %318, 1
  %322 = getelementptr inbounds i8, ptr %310, i64 32
  store double %320, ptr %322, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %310, i64 40
  store double %321, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !19
  %323 = getelementptr inbounds i8, ptr %.0136186, i64 52
  %.not140 = icmp eq ptr %323, %305
  br i1 %.not140, label %.loopexit, label %307

324:                                              ; preds = %307
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %360

326:                                              ; preds = %311
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %360

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

330:                                              ; preds = %._crit_edge180
  %331 = getelementptr inbounds i8, ptr %0, i64 350
  %332 = load i8, ptr %331, align 2, !tbaa !35, !range !53, !noundef !54
  %333 = trunc nuw i8 %332 to i1
  br i1 %333, label %.loopexit, label %334

334:                                              ; preds = %330
  %335 = call noundef ptr @_ZNK3JPH8RefConstINS_22SoftBodySharedSettingsEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %336 = getelementptr inbounds i8, ptr %335, i64 128
  %337 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %336)
  %338 = call noundef ptr @_ZNK3JPH5ArrayINS_22SoftBodySharedSettings7SkinnedENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %336)
  %.not139181 = icmp eq ptr %337, %338
  br i1 %.not139181, label %.loopexit, label %.lr.ph184

.lr.ph184:                                        ; preds = %334
  %339 = getelementptr inbounds i8, ptr %0, i64 192
  br label %340

340:                                              ; preds = %.lr.ph184, %357
  %.0129182 = phi ptr [ %337, %.lr.ph184 ], [ %358, %357 ]
  %341 = getelementptr inbounds i8, ptr %.0129182, i64 36
  %342 = load float, ptr %341, align 4, !tbaa !55
  %343 = fcmp oeq float %342, 0.000000e+00
  br i1 %343, label %344, label %357

344:                                              ; preds = %340
  %345 = load i32, ptr %.0129182, align 4, !tbaa !23
  %346 = zext i32 %345 to i64
  %347 = invoke noundef nonnull align 16 dereferenceable(80) ptr @_ZN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %339, i64 noundef %346)
          to label %348 unwind label %355

348:                                              ; preds = %344
  %349 = load i32, ptr %.0129182, align 4, !tbaa !23
  %350 = zext i32 %349 to i64
  %351 = invoke noundef nonnull align 16 dereferenceable(48) ptr @_ZN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %37, i64 noundef %350)
          to label %352 unwind label %355

352:                                              ; preds = %348
  %353 = getelementptr inbounds i8, ptr %351, i64 16
  %354 = getelementptr inbounds i8, ptr %347, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %354, ptr noundef nonnull align 16 dereferenceable(16) %353, i64 16, i1 false), !tbaa.struct !31
  br label %357

355:                                              ; preds = %348, %344
  %356 = landingpad { ptr, i32 }
          cleanup
  br label %360

357:                                              ; preds = %352, %340
  %358 = getelementptr inbounds i8, ptr %.0129182, i64 52
  %.not139 = icmp eq ptr %358, %338
  br i1 %.not139, label %.loopexit, label %340

.loopexit:                                        ; preds = %357, %319, %334, %301, %330
  %359 = getelementptr inbounds i8, ptr %0, i64 351
  store i8 1, ptr %359, align 1, !tbaa !56
  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

360:                                              ; preds = %300, %355, %94, %201, %77, %326, %328, %324, %52
  %.pn155.pn.pn.pn.pn = phi { ptr, i32 } [ %53, %52 ], [ %.pn144.pn.pn.pn.pn.pn.pn.pn, %300 ], [ %356, %355 ], [ %78, %77 ], [ %.pn155, %201 ], [ %95, %94 ], [ %325, %324 ], [ %329, %328 ], [ %327, %326 ]
  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 } %.pn155.pn.pn.pn.pn
}

; 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 0, i64 64, !19}
!19 = !{!10, !10, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{i64 2159232897}
!23 = !{!24, !13, i64 0}
!24 = !{!"_ZTSN3JPH22SoftBodySharedSettings7SkinnedE", !13, i64 0, !10, i64 4, !25, i64 36, !25, i64 40, !25, i64 44, !13, i64 48}
!25 = !{!"float", !10, i64 0}
!26 = !{i64 2159233263}
!27 = !{!28, !25, i64 4}
!28 = !{!"_ZTSN3JPH22SoftBodySharedSettings10SkinWeightE", !13, i64 0, !25, i64 4}
!29 = !{!28, !13, i64 0}
!30 = !{i64 2159233651}
!31 = !{i64 0, i64 16, !19}
!32 = !{!24, !13, i64 48}
!33 = !{!13, !13, i64 0}
!34 = distinct !{!34, !21}
!35 = !{!36, !43, i64 350}
!36 = !{!"_ZTSN3JPH24SoftBodyMotionPropertiesE", !37, i64 0, !47, i64 184, !48, i64 192, !50, i64 216, !51, i64 240, !52, i64 272, !52, i64 304, !13, i64 336, !25, i64 340, !25, i64 344, !43, i64 348, !43, i64 349, !43, i64 350, !43, i64 351}
!37 = !{!"_ZTSN3JPH16MotionPropertiesE", !38, i64 0, !38, i64 16, !38, i64 32, !39, i64 48, !41, i64 64, !41, i64 76, !25, i64 88, !25, i64 92, !25, i64 96, !25, i64 100, !25, i64 104, !25, i64 108, !13, i64 112, !13, i64 116, !42, i64 120, !43, i64 121, !44, i64 122, !10, i64 123, !10, i64 124, !10, i64 128, !25, i64 176, !45, i64 180, !46, i64 181}
!38 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!39 = !{!"_ZTSN3JPH4QuatE", !40, i64 0}
!40 = !{!"_ZTSN3JPH4Vec4E", !10, i64 0}
!41 = !{!"_ZTSN3JPH6Float3E", !25, i64 0, !25, i64 4, !25, i64 8}
!42 = !{!"_ZTSN3JPH14EMotionQualityE", !10, i64 0}
!43 = !{!"bool", !10, i64 0}
!44 = !{!"_ZTSN3JPH12EAllowedDOFsE", !10, i64 0}
!45 = !{!"_ZTSN3JPH9EBodyTypeE", !10, i64 0}
!46 = !{!"_ZTSN3JPH11EMotionTypeE", !10, i64 0}
!47 = !{!"_ZTSN3JPH8RefConstINS_22SoftBodySharedSettingsEEE", !9, i64 0}
!48 = !{!"_ZTSN3JPH5ArrayINS_14SoftBodyVertexENS_12STLAllocatorIS1_EEEE", !49, i64 0, !49, i64 8, !9, i64 16}
!49 = !{!"long", !10, i64 0}
!50 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties14CollidingShapeENS_12STLAllocatorIS2_EEEE", !49, i64 0, !49, i64 8, !9, i64 16}
!51 = !{!"_ZTSN3JPH5ArrayINS_24SoftBodyMotionProperties9SkinStateENS_12STLAllocatorIS2_EEEE", !49, i64 0, !49, i64 8, !9, i64 16}
!52 = !{!"_ZTSN3JPH5AABoxE", !38, i64 0, !38, i64 16}
!53 = !{i8 0, i8 2}
!54 = !{}
!55 = !{!24, !25, i64 36}
!56 = !{!36, !43, i64 351}


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