; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Vehicle/VehicleTest.ll (ZN11VehicleTest10InitializeEv)

; 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::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.5", %"class.JPH::RefConst.6" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Triangle" = type { [3 x %"class.JPH::Float3"], i32, i32 }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.18", %"class.JPH::Array.21", %"class.JPH::Array.24", i32, float, i8, i32 }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.13", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.13" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.14, i8, [7 x i8] }>
%union.anon.14 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.JPH::Array.18" = type { i64, i64, ptr }
%"class.JPH::Array.21" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN11VehicleTest10sSceneNameE = external dso_local global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %"class.JPH::BodyCreationSettings", align 16
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::Quat", align 16
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca ptr, align 8
  %14 = alloca %"class.JPH::BodyCreationSettings", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Quat", align 16
  %18 = alloca ptr, align 8
  %19 = alloca %"class.JPH::BodyCreationSettings", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Quat", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca ptr, align 8
  %25 = alloca %"class.JPH::BodyCreationSettings", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Quat", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca ptr, align 8
  %31 = alloca %"class.JPH::BodyCreationSettings", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Quat", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca ptr, align 8
  %37 = alloca %"class.JPH::BodyCreationSettings", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Quat", align 16
  %41 = alloca float, align 4
  %42 = alloca ptr, align 8
  %43 = alloca %"class.JPH::BodyCreationSettings", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Quat", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca ptr, align 8
  %49 = alloca %"class.JPH::BodyCreationSettings", align 16
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Quat", align 16
  %53 = alloca float, align 4
  %54 = alloca ptr, align 8
  %55 = alloca %"class.JPH::BodyCreationSettings", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Quat", align 16
  %59 = alloca ptr, align 8
  %60 = alloca %"class.JPH::Array.10", align 8
  %61 = alloca i32, align 4
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca i32, align 4
  %68 = alloca float, align 4
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca %"class.JPH::Vec3", align 16
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca %"class.JPH::Vec3", align 16
  %74 = alloca %"class.JPH::Vec3", align 16
  %75 = alloca %"class.JPH::Vec3", align 16
  %76 = alloca %"class.JPH::Vec3", align 16
  %77 = alloca %"class.JPH::Vec3", align 16
  %78 = alloca %"class.JPH::Triangle", align 4
  %79 = alloca %"class.JPH::Vec3", align 16
  %80 = alloca %"class.JPH::Vec3", align 16
  %81 = alloca %"class.JPH::Vec3", align 16
  %82 = alloca %"class.JPH::Vec3", align 16
  %83 = alloca %"class.JPH::Vec3", align 16
  %84 = alloca %"class.JPH::Vec3", align 16
  %85 = alloca %"class.JPH::Triangle", align 4
  %86 = alloca %"class.JPH::Vec3", align 16
  %87 = alloca %"class.JPH::Vec3", align 16
  %88 = alloca %"class.JPH::Vec3", align 16
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::Vec3", align 16
  %91 = alloca %"class.JPH::Vec3", align 16
  %92 = alloca %"class.JPH::Triangle", align 4
  %93 = alloca %"class.JPH::Vec3", align 16
  %94 = alloca %"class.JPH::Vec3", align 16
  %95 = alloca %"class.JPH::Vec3", align 16
  %96 = alloca %"class.JPH::Vec3", align 16
  %97 = alloca %"class.JPH::Vec3", align 16
  %98 = alloca %"class.JPH::Vec3", align 16
  %99 = alloca %"class.JPH::Triangle", align 4
  %100 = alloca %"class.JPH::Vec3", align 16
  %101 = alloca %"class.JPH::Vec3", align 16
  %102 = alloca %"class.JPH::Vec3", align 16
  %103 = alloca %"class.JPH::Vec3", align 16
  %104 = alloca %"class.JPH::Vec3", align 16
  %105 = alloca %"class.JPH::Vec3", align 16
  %106 = alloca %"class.JPH::Triangle", align 4
  %107 = alloca %"class.JPH::Vec3", align 16
  %108 = alloca %"class.JPH::Vec3", align 16
  %109 = alloca %"class.JPH::Vec3", align 16
  %110 = alloca %"class.JPH::Vec3", align 16
  %111 = alloca %"class.JPH::Vec3", align 16
  %112 = alloca %"class.JPH::Vec3", align 16
  %113 = alloca %"class.JPH::Triangle", align 4
  %114 = alloca %"class.JPH::Vec3", align 16
  %115 = alloca %"class.JPH::Vec3", align 16
  %116 = alloca %"class.JPH::Vec3", align 16
  %117 = alloca %"class.JPH::Vec3", align 16
  %118 = alloca %"class.JPH::Vec3", align 16
  %119 = alloca %"class.JPH::Vec3", align 16
  %120 = alloca %"class.JPH::Triangle", align 4
  %121 = alloca %"class.JPH::Vec3", align 16
  %122 = alloca %"class.JPH::Vec3", align 16
  %123 = alloca %"class.JPH::Vec3", align 16
  %124 = alloca %"class.JPH::Vec3", align 16
  %125 = alloca %"class.JPH::Vec3", align 16
  %126 = alloca %"class.JPH::Vec3", align 16
  %127 = alloca %"class.JPH::Triangle", align 4
  %128 = alloca %"class.JPH::Vec3", align 16
  %129 = alloca %"class.JPH::Vec3", align 16
  %130 = alloca %"class.JPH::Vec3", align 16
  %131 = alloca %"class.JPH::Vec3", align 16
  %132 = alloca %"class.JPH::Vec3", align 16
  %133 = alloca %"class.JPH::Vec3", align 16
  %134 = alloca %"class.JPH::MeshShapeSettings", align 8
  %135 = alloca %"class.JPH::Array.24", align 8
  %136 = alloca ptr, align 8
  %137 = alloca %"class.JPH::BodyCreationSettings", align 16
  %138 = alloca %"class.JPH::Vec3", align 16
  %139 = alloca %"class.JPH::Quat", align 16
  store ptr %0, ptr %2, align 8, !tbaa !5
  %140 = load ptr, ptr %2, align 8
  %141 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %142 = call i32 @strcmp(ptr noundef %141, ptr noundef @.str.1) #13
  %143 = icmp eq i32 %142, 0
  br i1 %143, label %144, label %186

144:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #14
  %145 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %146 = load ptr, ptr %145, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %4) #14
  %147 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %148 unwind label %177

148:                                              ; preds = %144
  %149 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  %150 = load double, ptr %149, align 16
  %151 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  %152 = load double, ptr %151, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %147, double %150, double %152, float noundef 0.000000e+00, ptr noundef null)
          to label %153 unwind label %177

153:                                              ; preds = %148
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %154 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %155 = getelementptr inbounds %"class.JPH::Quat", ptr %9, i32 0, i32 0
  %156 = getelementptr inbounds %"class.JPH::Vec4", ptr %155, i32 0, i32 0
  %157 = getelementptr inbounds %union.anon.4, ptr %156, i32 0, i32 0
  %158 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 0
  %159 = extractvalue { double, double } %154, 0
  store double %159, ptr %158, align 16
  %160 = getelementptr inbounds { double, double }, ptr %157, i32 0, i32 1
  %161 = extractvalue { double, double } %154, 1
  store double %161, ptr %160, align 8
  %162 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 0
  %163 = load double, ptr %162, align 16
  %164 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 1
  %165 = load double, ptr %164, align 8
  %166 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 0
  %167 = load double, ptr %166, align 16
  %168 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 1
  %169 = load double, ptr %168, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %4, ptr noundef %147, double %163, double %165, double %167, double %169, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %170 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %146, ptr noundef nonnull align 16 dereferenceable(256) %4)
          to label %171 unwind label %181

171:                                              ; preds = %153
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %4) #14
  store ptr %170, ptr %3, align 8, !tbaa !5
  %172 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %172, float noundef 1.000000e+00)
  %173 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %174 = load ptr, ptr %173, align 8, !tbaa !9
  %175 = load ptr, ptr %3, align 8, !tbaa !5
  %176 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %175)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %174, ptr noundef nonnull align 4 dereferenceable(4) %176, i32 noundef 1)
  call void @_ZN11VehicleTest13LoadRaceTrackEPKc(ptr noundef nonnull align 8 dereferenceable(136) %140, ptr noundef @.str.8)
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #14
  br label %1235

177:                                              ; preds = %148, %144
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %6, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %147) #14
  br label %185

181:                                              ; preds = %153
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %6, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #14
  br label %185

185:                                              ; preds = %181, %177
  call void @llvm.lifetime.end.p0(i64 256, ptr %4) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #14
  br label %1236

186:                                              ; preds = %1
  %187 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %188 = call i32 @strcmp(ptr noundef %187, ptr noundef @.str.2) #13
  %189 = icmp eq i32 %188, 0
  br i1 %189, label %190, label %347

190:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #14
  store float 1.000000e+02, ptr %10, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #14
  store float 1.000000e+02, ptr %11, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #14
  %191 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  store float %191, ptr %12, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #14
  %192 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %193 = load ptr, ptr %192, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %14) #14
  %194 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %195 unwind label %318

195:                                              ; preds = %190
  %196 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %197 = load double, ptr %196, align 16
  %198 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %199 = load double, ptr %198, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %194, double %197, double %199, float noundef 0.000000e+00, ptr noundef null)
          to label %200 unwind label %318

200:                                              ; preds = %195
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %201 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %202 = getelementptr inbounds %"class.JPH::Quat", ptr %17, i32 0, i32 0
  %203 = getelementptr inbounds %"class.JPH::Vec4", ptr %202, i32 0, i32 0
  %204 = getelementptr inbounds %union.anon.4, ptr %203, i32 0, i32 0
  %205 = getelementptr inbounds { double, double }, ptr %204, i32 0, i32 0
  %206 = extractvalue { double, double } %201, 0
  store double %206, ptr %205, align 16
  %207 = getelementptr inbounds { double, double }, ptr %204, i32 0, i32 1
  %208 = extractvalue { double, double } %201, 1
  store double %208, ptr %207, align 8
  %209 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %210 = load double, ptr %209, align 16
  %211 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %212 = load double, ptr %211, align 8
  %213 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %214 = load double, ptr %213, align 16
  %215 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %216 = load double, ptr %215, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %14, ptr noundef %194, double %210, double %212, double %214, double %216, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %217 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %193, ptr noundef nonnull align 16 dereferenceable(256) %14)
          to label %218 unwind label %322

218:                                              ; preds = %200
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %14) #14
  store ptr %217, ptr %13, align 8, !tbaa !5
  %219 = load ptr, ptr %13, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %219, float noundef 1.000000e+00)
  %220 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %221 = load ptr, ptr %220, align 8, !tbaa !9
  %222 = load ptr, ptr %13, align 8, !tbaa !5
  %223 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %222)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %221, ptr noundef nonnull align 4 dereferenceable(4) %223, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #14
  %224 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %225 = load ptr, ptr %224, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %19) #14
  %226 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 2.500000e+01, float noundef 1.000000e+00, float noundef 1.000000e+02)
          to label %227 unwind label %327

227:                                              ; preds = %218
  %228 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %229 = load double, ptr %228, align 16
  %230 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %231 = load double, ptr %230, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %226, double %229, double %231, float noundef 0.000000e+00, ptr noundef null)
          to label %232 unwind label %327

232:                                              ; preds = %227
  %233 = call noundef float @_ZN3JPH3SinEf(float noundef 0x3FE0C15240000000)
  %234 = call float @llvm.fmuladd.f32(float 1.000000e+02, float %233, float -1.000000e+00)
  %235 = call noundef float @_ZN3JPH3CosEf(float noundef 0x3FE0C15240000000)
  %236 = call float @llvm.fmuladd.f32(float 1.000000e+02, float %235, float 1.000000e+02)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0.000000e+00, float noundef %234, float noundef %236)
  %237 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %238 = getelementptr inbounds %"class.JPH::Vec3", ptr %23, i32 0, i32 0
  %239 = getelementptr inbounds %union.anon, ptr %238, i32 0, i32 0
  %240 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 0
  %241 = extractvalue { double, double } %237, 0
  store double %241, ptr %240, align 16
  %242 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 1
  %243 = extractvalue { double, double } %237, 1
  store double %243, ptr %242, align 8
  %244 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %245 = load double, ptr %244, align 16
  %246 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %247 = load double, ptr %246, align 8
  %248 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %245, double %247, float noundef 0xBFE0C15240000000)
  %249 = getelementptr inbounds %"class.JPH::Quat", ptr %22, i32 0, i32 0
  %250 = getelementptr inbounds %"class.JPH::Vec4", ptr %249, i32 0, i32 0
  %251 = getelementptr inbounds %union.anon.4, ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds { double, double }, ptr %251, i32 0, i32 0
  %253 = extractvalue { double, double } %248, 0
  store double %253, ptr %252, align 16
  %254 = getelementptr inbounds { double, double }, ptr %251, i32 0, i32 1
  %255 = extractvalue { double, double } %248, 1
  store double %255, ptr %254, align 8
  %256 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %257 = load double, ptr %256, align 16
  %258 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %259 = load double, ptr %258, align 8
  %260 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %261 = load double, ptr %260, align 16
  %262 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %263 = load double, ptr %262, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %19, ptr noundef %226, double %257, double %259, double %261, double %263, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %264 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %225, ptr noundef nonnull align 16 dereferenceable(256) %19)
          to label %265 unwind label %331

265:                                              ; preds = %232
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %19) #14
  store ptr %264, ptr %18, align 8, !tbaa !5
  %266 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %266, float noundef 1.000000e+00)
  %267 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %268 = load ptr, ptr %267, align 8, !tbaa !9
  %269 = load ptr, ptr %18, align 8, !tbaa !5
  %270 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %269)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %268, ptr noundef nonnull align 4 dereferenceable(4) %270, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #14
  %271 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %272 = load ptr, ptr %271, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %25) #14
  %273 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef 2.500000e+01, float noundef 1.000000e+00, float noundef 1.000000e+02)
          to label %274 unwind label %336

274:                                              ; preds = %265
  %275 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %276 = load double, ptr %275, align 16
  %277 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %278 = load double, ptr %277, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %273, double %276, double %278, float noundef 0.000000e+00, ptr noundef null)
          to label %279 unwind label %336

279:                                              ; preds = %274
  %280 = call noundef float @_ZN3JPH3SinEf(float noundef 0x3FE0C15240000000)
  %281 = call float @llvm.fmuladd.f32(float 1.000000e+02, float %280, float -1.000000e+00)
  %282 = call noundef float @_ZN3JPH3CosEf(float noundef 0x3FE0C15240000000)
  %283 = call float @llvm.fmuladd.f32(float 3.000000e+02, float %282, float 1.000000e+02)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 0.000000e+00, float noundef %281, float noundef %283)
  %284 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %285 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %286 = getelementptr inbounds %union.anon, ptr %285, i32 0, i32 0
  %287 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 0
  %288 = extractvalue { double, double } %284, 0
  store double %288, ptr %287, align 16
  %289 = getelementptr inbounds { double, double }, ptr %286, i32 0, i32 1
  %290 = extractvalue { double, double } %284, 1
  store double %290, ptr %289, align 8
  %291 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %292 = load double, ptr %291, align 16
  %293 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %294 = load double, ptr %293, align 8
  %295 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %292, double %294, float noundef 0x3FE0C15240000000)
  %296 = getelementptr inbounds %"class.JPH::Quat", ptr %28, i32 0, i32 0
  %297 = getelementptr inbounds %"class.JPH::Vec4", ptr %296, i32 0, i32 0
  %298 = getelementptr inbounds %union.anon.4, ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds { double, double }, ptr %298, i32 0, i32 0
  %300 = extractvalue { double, double } %295, 0
  store double %300, ptr %299, align 16
  %301 = getelementptr inbounds { double, double }, ptr %298, i32 0, i32 1
  %302 = extractvalue { double, double } %295, 1
  store double %302, ptr %301, align 8
  %303 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %304 = load double, ptr %303, align 16
  %305 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %306 = load double, ptr %305, align 8
  %307 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %308 = load double, ptr %307, align 16
  %309 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %310 = load double, ptr %309, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %25, ptr noundef %273, double %304, double %306, double %308, double %310, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %311 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %272, ptr noundef nonnull align 16 dereferenceable(256) %25)
          to label %312 unwind label %340

312:                                              ; preds = %279
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %25) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %25) #14
  store ptr %311, ptr %24, align 8, !tbaa !5
  %313 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %313, float noundef 1.000000e+00)
  %314 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %315 = load ptr, ptr %314, align 8, !tbaa !9
  %316 = load ptr, ptr %24, align 8, !tbaa !5
  %317 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %316)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %315, ptr noundef nonnull align 4 dereferenceable(4) %317, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #14
  br label %1234

318:                                              ; preds = %195, %190
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %6, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %194) #14
  br label %326

322:                                              ; preds = %200
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %6, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #14
  br label %326

326:                                              ; preds = %322, %318
  call void @llvm.lifetime.end.p0(i64 256, ptr %14) #14
  br label %346

327:                                              ; preds = %227, %218
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %6, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %226) #14
  br label %335

331:                                              ; preds = %232
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %6, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %19) #14
  br label %335

335:                                              ; preds = %331, %327
  call void @llvm.lifetime.end.p0(i64 256, ptr %19) #14
  br label %345

336:                                              ; preds = %274, %265
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %6, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %273) #14
  br label %344

340:                                              ; preds = %279
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %6, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %25) #14
  br label %344

344:                                              ; preds = %340, %336
  call void @llvm.lifetime.end.p0(i64 256, ptr %25) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #14
  br label %345

345:                                              ; preds = %344, %335
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #14
  br label %346

346:                                              ; preds = %345, %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #14
  br label %1236

347:                                              ; preds = %186
  %348 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %349 = call i32 @strcmp(ptr noundef %348, ptr noundef @.str.3) #13
  %350 = icmp eq i32 %349, 0
  br i1 %350, label %351, label %405

351:                                              ; preds = %347
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #14
  %352 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %353 = load ptr, ptr %352, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %31) #14
  %354 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %355 unwind label %396

355:                                              ; preds = %351
  %356 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %357 = load double, ptr %356, align 16
  %358 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %359 = load double, ptr %358, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %354, double %357, double %359, float noundef 0.000000e+00, ptr noundef null)
          to label %360 unwind label %396

360:                                              ; preds = %355
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %33, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %361 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %362 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %363 = getelementptr inbounds %union.anon, ptr %362, i32 0, i32 0
  %364 = getelementptr inbounds { double, double }, ptr %363, i32 0, i32 0
  %365 = extractvalue { double, double } %361, 0
  store double %365, ptr %364, align 16
  %366 = getelementptr inbounds { double, double }, ptr %363, i32 0, i32 1
  %367 = extractvalue { double, double } %361, 1
  store double %367, ptr %366, align 8
  %368 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -2.000000e+01)
  %369 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %370 = load double, ptr %369, align 16
  %371 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %372 = load double, ptr %371, align 8
  %373 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %370, double %372, float noundef %368)
  %374 = getelementptr inbounds %"class.JPH::Quat", ptr %34, i32 0, i32 0
  %375 = getelementptr inbounds %"class.JPH::Vec4", ptr %374, i32 0, i32 0
  %376 = getelementptr inbounds %union.anon.4, ptr %375, i32 0, i32 0
  %377 = getelementptr inbounds { double, double }, ptr %376, i32 0, i32 0
  %378 = extractvalue { double, double } %373, 0
  store double %378, ptr %377, align 16
  %379 = getelementptr inbounds { double, double }, ptr %376, i32 0, i32 1
  %380 = extractvalue { double, double } %373, 1
  store double %380, ptr %379, align 8
  %381 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %382 = load double, ptr %381, align 16
  %383 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %384 = load double, ptr %383, align 8
  %385 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %386 = load double, ptr %385, align 16
  %387 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %388 = load double, ptr %387, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %31, ptr noundef %354, double %382, double %384, double %386, double %388, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %389 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %353, ptr noundef nonnull align 16 dereferenceable(256) %31)
          to label %390 unwind label %400

390:                                              ; preds = %360
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %31) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %31) #14
  store ptr %389, ptr %30, align 8, !tbaa !5
  %391 = load ptr, ptr %30, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %391, float noundef 1.000000e+00)
  %392 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %393 = load ptr, ptr %392, align 8, !tbaa !9
  %394 = load ptr, ptr %30, align 8, !tbaa !5
  %395 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %394)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %393, ptr noundef nonnull align 4 dereferenceable(4) %395, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #14
  br label %1233

396:                                              ; preds = %355, %351
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %6, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %354) #14
  br label %404

400:                                              ; preds = %360
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %6, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %31) #14
  br label %404

404:                                              ; preds = %400, %396
  call void @llvm.lifetime.end.p0(i64 256, ptr %31) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #14
  br label %1236

405:                                              ; preds = %347
  %406 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %407 = call i32 @strcmp(ptr noundef %406, ptr noundef @.str.4) #13
  %408 = icmp eq i32 %407, 0
  br i1 %408, label %409, label %504

409:                                              ; preds = %405
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #14
  %410 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %411 = load ptr, ptr %410, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %37) #14
  %412 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %413 unwind label %485

413:                                              ; preds = %409
  %414 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %415 = load double, ptr %414, align 16
  %416 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %417 = load double, ptr %416, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %412, double %415, double %417, float noundef 0.000000e+00, ptr noundef null)
          to label %418 unwind label %485

418:                                              ; preds = %413
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %39, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %419 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %420 = getelementptr inbounds %"class.JPH::Quat", ptr %40, i32 0, i32 0
  %421 = getelementptr inbounds %"class.JPH::Vec4", ptr %420, i32 0, i32 0
  %422 = getelementptr inbounds %union.anon.4, ptr %421, i32 0, i32 0
  %423 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 0
  %424 = extractvalue { double, double } %419, 0
  store double %424, ptr %423, align 16
  %425 = getelementptr inbounds { double, double }, ptr %422, i32 0, i32 1
  %426 = extractvalue { double, double } %419, 1
  store double %426, ptr %425, align 8
  %427 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %428 = load double, ptr %427, align 16
  %429 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %430 = load double, ptr %429, align 8
  %431 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %432 = load double, ptr %431, align 16
  %433 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %434 = load double, ptr %433, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %37, ptr noundef %412, double %428, double %430, double %432, double %434, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %435 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %411, ptr noundef nonnull align 16 dereferenceable(256) %37)
          to label %436 unwind label %489

436:                                              ; preds = %418
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %37) #14
  store ptr %435, ptr %36, align 8, !tbaa !5
  %437 = load ptr, ptr %36, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %437, float noundef 1.000000e+00)
  %438 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %439 = load ptr, ptr %438, align 8, !tbaa !9
  %440 = load ptr, ptr %36, align 8, !tbaa !5
  %441 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %440)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %439, ptr noundef nonnull align 4 dereferenceable(4) %441, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #14
  store float 0x3FA99999A0000000, ptr %41, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #14
  %442 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %443 = load ptr, ptr %442, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %43) #14
  %444 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %44, float noundef 5.000000e+00, float noundef 0x3F999999A0000000, float noundef 5.000000e+00)
          to label %445 unwind label %494

445:                                              ; preds = %436
  %446 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %447 = load double, ptr %446, align 16
  %448 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %449 = load double, ptr %448, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %444, double %447, double %449, float noundef 0.000000e+00, ptr noundef null)
          to label %450 unwind label %494

450:                                              ; preds = %445
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %45, float noundef -2.000000e+00, float noundef 0x3F999999A0000000, float noundef 6.000000e+01)
  %451 = call { double, double } @_ZN3JPH4Vec36sAxisYEv()
  %452 = getelementptr inbounds %"class.JPH::Vec3", ptr %47, i32 0, i32 0
  %453 = getelementptr inbounds %union.anon, ptr %452, i32 0, i32 0
  %454 = getelementptr inbounds { double, double }, ptr %453, i32 0, i32 0
  %455 = extractvalue { double, double } %451, 0
  store double %455, ptr %454, align 16
  %456 = getelementptr inbounds { double, double }, ptr %453, i32 0, i32 1
  %457 = extractvalue { double, double } %451, 1
  store double %457, ptr %456, align 8
  %458 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %459 = load double, ptr %458, align 16
  %460 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %461 = load double, ptr %460, align 8
  %462 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %459, double %461, float noundef 0xBFEE28C760000000)
  %463 = getelementptr inbounds %"class.JPH::Quat", ptr %46, i32 0, i32 0
  %464 = getelementptr inbounds %"class.JPH::Vec4", ptr %463, i32 0, i32 0
  %465 = getelementptr inbounds %union.anon.4, ptr %464, i32 0, i32 0
  %466 = getelementptr inbounds { double, double }, ptr %465, i32 0, i32 0
  %467 = extractvalue { double, double } %462, 0
  store double %467, ptr %466, align 16
  %468 = getelementptr inbounds { double, double }, ptr %465, i32 0, i32 1
  %469 = extractvalue { double, double } %462, 1
  store double %469, ptr %468, align 8
  %470 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %471 = load double, ptr %470, align 16
  %472 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %473 = load double, ptr %472, align 8
  %474 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %475 = load double, ptr %474, align 16
  %476 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %477 = load double, ptr %476, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %43, ptr noundef %444, double %471, double %473, double %475, double %477, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %478 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %443, ptr noundef nonnull align 16 dereferenceable(256) %43)
          to label %479 unwind label %498

479:                                              ; preds = %450
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %43) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %43) #14
  store ptr %478, ptr %42, align 8, !tbaa !5
  %480 = load ptr, ptr %42, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %480, float noundef 1.000000e+00)
  %481 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %482 = load ptr, ptr %481, align 8, !tbaa !9
  %483 = load ptr, ptr %42, align 8, !tbaa !5
  %484 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %483)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %482, ptr noundef nonnull align 4 dereferenceable(4) %484, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #14
  br label %1232

485:                                              ; preds = %413, %409
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %6, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %412) #14
  br label %493

489:                                              ; preds = %418
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %6, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %37) #14
  br label %493

493:                                              ; preds = %489, %485
  call void @llvm.lifetime.end.p0(i64 256, ptr %37) #14
  br label %503

494:                                              ; preds = %445, %436
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %6, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %444) #14
  br label %502

498:                                              ; preds = %450
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %6, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %43) #14
  br label %502

502:                                              ; preds = %498, %494
  call void @llvm.lifetime.end.p0(i64 256, ptr %43) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  br label %503

503:                                              ; preds = %502, %493
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #14
  br label %1236

504:                                              ; preds = %405
  %505 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %506 = call i32 @strcmp(ptr noundef %505, ptr noundef @.str.5) #13
  %507 = icmp eq i32 %506, 0
  br i1 %507, label %508, label %592

508:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #14
  %509 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %510 = load ptr, ptr %509, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %49) #14
  %511 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %50, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %512 unwind label %573

512:                                              ; preds = %508
  %513 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %514 = load double, ptr %513, align 16
  %515 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %516 = load double, ptr %515, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %511, double %514, double %516, float noundef 0.000000e+00, ptr noundef null)
          to label %517 unwind label %573

517:                                              ; preds = %512
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %51, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %518 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %519 = getelementptr inbounds %"class.JPH::Quat", ptr %52, i32 0, i32 0
  %520 = getelementptr inbounds %"class.JPH::Vec4", ptr %519, i32 0, i32 0
  %521 = getelementptr inbounds %union.anon.4, ptr %520, i32 0, i32 0
  %522 = getelementptr inbounds { double, double }, ptr %521, i32 0, i32 0
  %523 = extractvalue { double, double } %518, 0
  store double %523, ptr %522, align 16
  %524 = getelementptr inbounds { double, double }, ptr %521, i32 0, i32 1
  %525 = extractvalue { double, double } %518, 1
  store double %525, ptr %524, align 8
  %526 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %527 = load double, ptr %526, align 16
  %528 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %529 = load double, ptr %528, align 8
  %530 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %531 = load double, ptr %530, align 16
  %532 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  %533 = load double, ptr %532, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %49, ptr noundef %511, double %527, double %529, double %531, double %533, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %534 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %510, ptr noundef nonnull align 16 dereferenceable(256) %49)
          to label %535 unwind label %577

535:                                              ; preds = %517
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %49) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %49) #14
  store ptr %534, ptr %48, align 8, !tbaa !5
  %536 = load ptr, ptr %48, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %536, float noundef 1.000000e+00)
  %537 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %538 = load ptr, ptr %537, align 8, !tbaa !9
  %539 = load ptr, ptr %48, align 8, !tbaa !5
  %540 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %539)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %538, ptr noundef nonnull align 4 dereferenceable(4) %540, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #14
  store float 0x3FA99999A0000000, ptr %53, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #14
  %541 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %542 = load ptr, ptr %541, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %55) #14
  %543 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %56, float noundef 1.500000e+01, float noundef 0x3F999999A0000000, float noundef 1.500000e+01)
          to label %544 unwind label %582

544:                                              ; preds = %535
  %545 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %546 = load double, ptr %545, align 16
  %547 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %548 = load double, ptr %547, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %543, double %546, double %548, float noundef 0.000000e+00, ptr noundef null)
          to label %549 unwind label %582

549:                                              ; preds = %544
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %57, float noundef -2.000000e+00, float noundef 0x3F999999A0000000, float noundef 3.000000e+01)
  %550 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %551 = getelementptr inbounds %"class.JPH::Quat", ptr %58, i32 0, i32 0
  %552 = getelementptr inbounds %"class.JPH::Vec4", ptr %551, i32 0, i32 0
  %553 = getelementptr inbounds %union.anon.4, ptr %552, i32 0, i32 0
  %554 = getelementptr inbounds { double, double }, ptr %553, i32 0, i32 0
  %555 = extractvalue { double, double } %550, 0
  store double %555, ptr %554, align 16
  %556 = getelementptr inbounds { double, double }, ptr %553, i32 0, i32 1
  %557 = extractvalue { double, double } %550, 1
  store double %557, ptr %556, align 8
  %558 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %559 = load double, ptr %558, align 16
  %560 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %561 = load double, ptr %560, align 8
  %562 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %563 = load double, ptr %562, align 16
  %564 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %565 = load double, ptr %564, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %55, ptr noundef %543, double %559, double %561, double %563, double %565, i8 noundef zeroext 2, i16 noundef zeroext 1)
  %566 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %542, ptr noundef nonnull align 16 dereferenceable(256) %55)
          to label %567 unwind label %586

567:                                              ; preds = %549
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %55) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %55) #14
  store ptr %566, ptr %54, align 8, !tbaa !5
  %568 = load ptr, ptr %54, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %568, float noundef 1.000000e+00)
  %569 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %570 = load ptr, ptr %569, align 8, !tbaa !9
  %571 = load ptr, ptr %54, align 8, !tbaa !5
  %572 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %571)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %570, ptr noundef nonnull align 4 dereferenceable(4) %572, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  br label %1231

573:                                              ; preds = %512, %508
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %6, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %511) #14
  br label %581

577:                                              ; preds = %517
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %6, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %49) #14
  br label %581

581:                                              ; preds = %577, %573
  call void @llvm.lifetime.end.p0(i64 256, ptr %49) #14
  br label %591

582:                                              ; preds = %544, %535
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %6, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %543) #14
  br label %590

586:                                              ; preds = %549
  %587 = landingpad { ptr, i32 }
          cleanup
  %588 = extractvalue { ptr, i32 } %587, 0
  store ptr %588, ptr %6, align 8
  %589 = extractvalue { ptr, i32 } %587, 1
  store i32 %589, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %55) #14
  br label %590

590:                                              ; preds = %586, %582
  call void @llvm.lifetime.end.p0(i64 256, ptr %55) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #14
  br label %591

591:                                              ; preds = %590, %581
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  br label %1236

592:                                              ; preds = %504
  %593 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %594 = call i32 @strcmp(ptr noundef %593, ptr noundef @.str.6) #13
  %595 = icmp eq i32 %594, 0
  br i1 %595, label %596, label %599

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #14
  %597 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %140)
  store ptr %597, ptr %59, align 8, !tbaa !5
  %598 = load ptr, ptr %59, align 8, !tbaa !5
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %598, float noundef 1.000000e+00)
  call void @_ZN11VehicleTest12CreateBridgeEv(ptr noundef nonnull align 8 dereferenceable(136) %140)
  call void @_ZN11VehicleTest10CreateWallEv(ptr noundef nonnull align 8 dereferenceable(136) %140)
  call void @_ZN11VehicleTest12CreateRubbleEv(ptr noundef nonnull align 8 dereferenceable(136) %140)
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #14
  br label %1230

599:                                              ; preds = %592
  %600 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %601 = call i32 @strcmp(ptr noundef %600, ptr noundef @.str.7) #13
  %602 = icmp eq i32 %601, 0
  br i1 %602, label %603, label %1229

603:                                              ; preds = %599
  %604 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %140, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 24, ptr %60) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #14
  store i32 100, ptr %61, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #14
  store float 2.000000e+01, ptr %62, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #14
  store float 2.000000e+01, ptr %63, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #14
  store float 5.000000e-01, ptr %64, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #14
  %605 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %606 unwind label %625

606:                                              ; preds = %603
  %607 = getelementptr inbounds %"class.JPH::Vec3", ptr %65, i32 0, i32 0
  %608 = getelementptr inbounds %union.anon, ptr %607, i32 0, i32 0
  %609 = getelementptr inbounds { double, double }, ptr %608, i32 0, i32 0
  %610 = extractvalue { double, double } %605, 0
  store double %610, ptr %609, align 16
  %611 = getelementptr inbounds { double, double }, ptr %608, i32 0, i32 1
  %612 = extractvalue { double, double } %605, 1
  store double %612, ptr %611, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #14
  %613 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %614 unwind label %629

614:                                              ; preds = %606
  %615 = getelementptr inbounds %"class.JPH::Vec3", ptr %66, i32 0, i32 0
  %616 = getelementptr inbounds %union.anon, ptr %615, i32 0, i32 0
  %617 = getelementptr inbounds { double, double }, ptr %616, i32 0, i32 0
  %618 = extractvalue { double, double } %613, 0
  store double %618, ptr %617, align 16
  %619 = getelementptr inbounds { double, double }, ptr %616, i32 0, i32 1
  %620 = extractvalue { double, double } %613, 1
  store double %620, ptr %619, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #14
  store i32 0, ptr %67, align 4, !tbaa !19
  br label %621

621:                                              ; preds = %1154, %614
  %622 = load i32, ptr %67, align 4, !tbaa !19
  %623 = icmp slt i32 %622, 100
  br i1 %623, label %633, label %624

624:                                              ; preds = %621
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #14
  br label %1161

625:                                              ; preds = %603
  %626 = landingpad { ptr, i32 }
          cleanup
  %627 = extractvalue { ptr, i32 } %626, 0
  store ptr %627, ptr %6, align 8
  %628 = extractvalue { ptr, i32 } %626, 1
  store i32 %628, ptr %7, align 4
  br label %1228

629:                                              ; preds = %606
  %630 = landingpad { ptr, i32 }
          cleanup
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %6, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %7, align 4
  br label %1227

633:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #14
  %634 = load i32, ptr %67, align 4, !tbaa !19
  %635 = sitofp i32 %634 to float
  %636 = fmul float %635, 2.000000e+00
  %637 = fmul float %636, 0x400921FB60000000
  %638 = fdiv float %637, 9.900000e+01
  store float %638, ptr %68, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #14
  %639 = load float, ptr %68, align 4, !tbaa !18
  %640 = invoke noundef float @_ZN3JPH3CosEf(float noundef %639)
          to label %641 unwind label %1105

641:                                              ; preds = %633
  %642 = fneg float %640
  %643 = load float, ptr %68, align 4, !tbaa !18
  %644 = invoke noundef float @_ZN3JPH3SinEf(float noundef %643)
          to label %645 unwind label %1105

645:                                              ; preds = %641
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %69, float noundef 0.000000e+00, float noundef %642, float noundef %644)
          to label %646 unwind label %1105

646:                                              ; preds = %645
  call void @llvm.lifetime.start.p0(i64 16, ptr %70) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr %71) #14
  %647 = load i32, ptr %67, align 4, !tbaa !19
  %648 = sub nsw i32 0, %647
  %649 = sitofp i32 %648 to float
  %650 = fmul float %649, 2.000000e+01
  %651 = fdiv float %650, 9.900000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %71, float noundef %651, float noundef 2.000000e+01, float noundef 2.000000e+01)
          to label %652 unwind label %1109

652:                                              ; preds = %646
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %73, ptr align 16 %69, i64 16, i1 false), !tbaa.struct !21
  %653 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %654 = load double, ptr %653, align 16
  %655 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %656 = load double, ptr %655, align 8
  %657 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+01, double %654, double %656)
          to label %658 unwind label %1109

658:                                              ; preds = %652
  %659 = getelementptr inbounds %"class.JPH::Vec3", ptr %72, i32 0, i32 0
  %660 = getelementptr inbounds %union.anon, ptr %659, i32 0, i32 0
  %661 = getelementptr inbounds { double, double }, ptr %660, i32 0, i32 0
  %662 = extractvalue { double, double } %657, 0
  store double %662, ptr %661, align 16
  %663 = getelementptr inbounds { double, double }, ptr %660, i32 0, i32 1
  %664 = extractvalue { double, double } %657, 1
  store double %664, ptr %663, align 8
  %665 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 0
  %666 = load double, ptr %665, align 16
  %667 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 1
  %668 = load double, ptr %667, align 8
  %669 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %71, double %666, double %668)
          to label %670 unwind label %1109

670:                                              ; preds = %658
  %671 = getelementptr inbounds %"class.JPH::Vec3", ptr %70, i32 0, i32 0
  %672 = getelementptr inbounds %union.anon, ptr %671, i32 0, i32 0
  %673 = getelementptr inbounds { double, double }, ptr %672, i32 0, i32 0
  %674 = extractvalue { double, double } %669, 0
  store double %674, ptr %673, align 16
  %675 = getelementptr inbounds { double, double }, ptr %672, i32 0, i32 1
  %676 = extractvalue { double, double } %669, 1
  store double %676, ptr %675, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #14
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %74, float noundef 1.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %677 unwind label %1113

677:                                              ; preds = %670
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %77, ptr align 16 %69, i64 16, i1 false), !tbaa.struct !21
  %678 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %679 = load double, ptr %678, align 16
  %680 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %681 = load double, ptr %680, align 8
  %682 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %679, double %681)
          to label %683 unwind label %1117

683:                                              ; preds = %677
  %684 = getelementptr inbounds %"class.JPH::Vec3", ptr %76, i32 0, i32 0
  %685 = getelementptr inbounds %union.anon, ptr %684, i32 0, i32 0
  %686 = getelementptr inbounds { double, double }, ptr %685, i32 0, i32 0
  %687 = extractvalue { double, double } %682, 0
  store double %687, ptr %686, align 16
  %688 = getelementptr inbounds { double, double }, ptr %685, i32 0, i32 1
  %689 = extractvalue { double, double } %682, 1
  store double %689, ptr %688, align 8
  %690 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 0
  %691 = load double, ptr %690, align 16
  %692 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 1
  %693 = load double, ptr %692, align 8
  %694 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %691, double %693)
          to label %695 unwind label %1117

695:                                              ; preds = %683
  %696 = getelementptr inbounds %"class.JPH::Vec3", ptr %75, i32 0, i32 0
  %697 = getelementptr inbounds %union.anon, ptr %696, i32 0, i32 0
  %698 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 0
  %699 = extractvalue { double, double } %694, 0
  store double %699, ptr %698, align 16
  %700 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 1
  %701 = extractvalue { double, double } %694, 1
  store double %701, ptr %700, align 8
  %702 = load i32, ptr %67, align 4, !tbaa !19
  %703 = icmp sgt i32 %702, 0
  br i1 %703, label %704, label %1153

704:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 44, ptr %78) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %80, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %705 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 0
  %706 = load double, ptr %705, align 16
  %707 = getelementptr inbounds { double, double }, ptr %80, i32 0, i32 1
  %708 = load double, ptr %707, align 8
  %709 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %65, double %706, double %708)
          to label %710 unwind label %1121

710:                                              ; preds = %704
  %711 = getelementptr inbounds %"class.JPH::Vec3", ptr %79, i32 0, i32 0
  %712 = getelementptr inbounds %union.anon, ptr %711, i32 0, i32 0
  %713 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 0
  %714 = extractvalue { double, double } %709, 0
  store double %714, ptr %713, align 16
  %715 = getelementptr inbounds { double, double }, ptr %712, i32 0, i32 1
  %716 = extractvalue { double, double } %709, 1
  store double %716, ptr %715, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %82, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %717 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %718 = load double, ptr %717, align 16
  %719 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %720 = load double, ptr %719, align 8
  %721 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %65, double %718, double %720)
          to label %722 unwind label %1121

722:                                              ; preds = %710
  %723 = getelementptr inbounds %"class.JPH::Vec3", ptr %81, i32 0, i32 0
  %724 = getelementptr inbounds %union.anon, ptr %723, i32 0, i32 0
  %725 = getelementptr inbounds { double, double }, ptr %724, i32 0, i32 0
  %726 = extractvalue { double, double } %721, 0
  store double %726, ptr %725, align 16
  %727 = getelementptr inbounds { double, double }, ptr %724, i32 0, i32 1
  %728 = extractvalue { double, double } %721, 1
  store double %728, ptr %727, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %84, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %729 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 0
  %730 = load double, ptr %729, align 16
  %731 = getelementptr inbounds { double, double }, ptr %84, i32 0, i32 1
  %732 = load double, ptr %731, align 8
  %733 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %730, double %732)
          to label %734 unwind label %1121

734:                                              ; preds = %722
  %735 = getelementptr inbounds %"class.JPH::Vec3", ptr %83, i32 0, i32 0
  %736 = getelementptr inbounds %union.anon, ptr %735, i32 0, i32 0
  %737 = getelementptr inbounds { double, double }, ptr %736, i32 0, i32 0
  %738 = extractvalue { double, double } %733, 0
  store double %738, ptr %737, align 16
  %739 = getelementptr inbounds { double, double }, ptr %736, i32 0, i32 1
  %740 = extractvalue { double, double } %733, 1
  store double %740, ptr %739, align 8
  %741 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %742 = load double, ptr %741, align 16
  %743 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %744 = load double, ptr %743, align 8
  %745 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %746 = load double, ptr %745, align 16
  %747 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %748 = load double, ptr %747, align 8
  %749 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %750 = load double, ptr %749, align 16
  %751 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  %752 = load double, ptr %751, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %78, double %742, double %744, double %746, double %748, double %750, double %752, i32 noundef 0, i32 noundef 0)
          to label %753 unwind label %1121

753:                                              ; preds = %734
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %78)
          to label %754 unwind label %1121

754:                                              ; preds = %753
  call void @llvm.lifetime.end.p0(i64 44, ptr %78) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %85) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %87, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %755 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %756 = load double, ptr %755, align 16
  %757 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %758 = load double, ptr %757, align 8
  %759 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %65, double %756, double %758)
          to label %760 unwind label %1125

760:                                              ; preds = %754
  %761 = getelementptr inbounds %"class.JPH::Vec3", ptr %86, i32 0, i32 0
  %762 = getelementptr inbounds %union.anon, ptr %761, i32 0, i32 0
  %763 = getelementptr inbounds { double, double }, ptr %762, i32 0, i32 0
  %764 = extractvalue { double, double } %759, 0
  store double %764, ptr %763, align 16
  %765 = getelementptr inbounds { double, double }, ptr %762, i32 0, i32 1
  %766 = extractvalue { double, double } %759, 1
  store double %766, ptr %765, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %89, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %767 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %768 = load double, ptr %767, align 16
  %769 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %770 = load double, ptr %769, align 8
  %771 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %768, double %770)
          to label %772 unwind label %1125

772:                                              ; preds = %760
  %773 = getelementptr inbounds %"class.JPH::Vec3", ptr %88, i32 0, i32 0
  %774 = getelementptr inbounds %union.anon, ptr %773, i32 0, i32 0
  %775 = getelementptr inbounds { double, double }, ptr %774, i32 0, i32 0
  %776 = extractvalue { double, double } %771, 0
  store double %776, ptr %775, align 16
  %777 = getelementptr inbounds { double, double }, ptr %774, i32 0, i32 1
  %778 = extractvalue { double, double } %771, 1
  store double %778, ptr %777, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %91, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %779 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 0
  %780 = load double, ptr %779, align 16
  %781 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 1
  %782 = load double, ptr %781, align 8
  %783 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %780, double %782)
          to label %784 unwind label %1125

784:                                              ; preds = %772
  %785 = getelementptr inbounds %"class.JPH::Vec3", ptr %90, i32 0, i32 0
  %786 = getelementptr inbounds %union.anon, ptr %785, i32 0, i32 0
  %787 = getelementptr inbounds { double, double }, ptr %786, i32 0, i32 0
  %788 = extractvalue { double, double } %783, 0
  store double %788, ptr %787, align 16
  %789 = getelementptr inbounds { double, double }, ptr %786, i32 0, i32 1
  %790 = extractvalue { double, double } %783, 1
  store double %790, ptr %789, align 8
  %791 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %792 = load double, ptr %791, align 16
  %793 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %794 = load double, ptr %793, align 8
  %795 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 0
  %796 = load double, ptr %795, align 16
  %797 = getelementptr inbounds { double, double }, ptr %88, i32 0, i32 1
  %798 = load double, ptr %797, align 8
  %799 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 0
  %800 = load double, ptr %799, align 16
  %801 = getelementptr inbounds { double, double }, ptr %90, i32 0, i32 1
  %802 = load double, ptr %801, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %85, double %792, double %794, double %796, double %798, double %800, double %802, i32 noundef 0, i32 noundef 0)
          to label %803 unwind label %1125

803:                                              ; preds = %784
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %85)
          to label %804 unwind label %1125

804:                                              ; preds = %803
  call void @llvm.lifetime.end.p0(i64 44, ptr %85) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %92) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %94, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %805 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 0
  %806 = load double, ptr %805, align 16
  %807 = getelementptr inbounds { double, double }, ptr %94, i32 0, i32 1
  %808 = load double, ptr %807, align 8
  %809 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %806, double %808)
          to label %810 unwind label %1129

810:                                              ; preds = %804
  %811 = getelementptr inbounds %"class.JPH::Vec3", ptr %93, i32 0, i32 0
  %812 = getelementptr inbounds %union.anon, ptr %811, i32 0, i32 0
  %813 = getelementptr inbounds { double, double }, ptr %812, i32 0, i32 0
  %814 = extractvalue { double, double } %809, 0
  store double %814, ptr %813, align 16
  %815 = getelementptr inbounds { double, double }, ptr %812, i32 0, i32 1
  %816 = extractvalue { double, double } %809, 1
  store double %816, ptr %815, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %96, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %817 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %818 = load double, ptr %817, align 16
  %819 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %820 = load double, ptr %819, align 8
  %821 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %75, double %818, double %820)
          to label %822 unwind label %1129

822:                                              ; preds = %810
  %823 = getelementptr inbounds %"class.JPH::Vec3", ptr %95, i32 0, i32 0
  %824 = getelementptr inbounds %union.anon, ptr %823, i32 0, i32 0
  %825 = getelementptr inbounds { double, double }, ptr %824, i32 0, i32 0
  %826 = extractvalue { double, double } %821, 0
  store double %826, ptr %825, align 16
  %827 = getelementptr inbounds { double, double }, ptr %824, i32 0, i32 1
  %828 = extractvalue { double, double } %821, 1
  store double %828, ptr %827, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %98, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %829 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 0
  %830 = load double, ptr %829, align 16
  %831 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 1
  %832 = load double, ptr %831, align 8
  %833 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %830, double %832)
          to label %834 unwind label %1129

834:                                              ; preds = %822
  %835 = getelementptr inbounds %"class.JPH::Vec3", ptr %97, i32 0, i32 0
  %836 = getelementptr inbounds %union.anon, ptr %835, i32 0, i32 0
  %837 = getelementptr inbounds { double, double }, ptr %836, i32 0, i32 0
  %838 = extractvalue { double, double } %833, 0
  store double %838, ptr %837, align 16
  %839 = getelementptr inbounds { double, double }, ptr %836, i32 0, i32 1
  %840 = extractvalue { double, double } %833, 1
  store double %840, ptr %839, align 8
  %841 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %842 = load double, ptr %841, align 16
  %843 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %844 = load double, ptr %843, align 8
  %845 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 0
  %846 = load double, ptr %845, align 16
  %847 = getelementptr inbounds { double, double }, ptr %95, i32 0, i32 1
  %848 = load double, ptr %847, align 8
  %849 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 0
  %850 = load double, ptr %849, align 16
  %851 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 1
  %852 = load double, ptr %851, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %92, double %842, double %844, double %846, double %848, double %850, double %852, i32 noundef 0, i32 noundef 0)
          to label %853 unwind label %1129

853:                                              ; preds = %834
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %92)
          to label %854 unwind label %1129

854:                                              ; preds = %853
  call void @llvm.lifetime.end.p0(i64 44, ptr %92) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %99) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %101, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %855 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 0
  %856 = load double, ptr %855, align 16
  %857 = getelementptr inbounds { double, double }, ptr %101, i32 0, i32 1
  %858 = load double, ptr %857, align 8
  %859 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %856, double %858)
          to label %860 unwind label %1133

860:                                              ; preds = %854
  %861 = getelementptr inbounds %"class.JPH::Vec3", ptr %100, i32 0, i32 0
  %862 = getelementptr inbounds %union.anon, ptr %861, i32 0, i32 0
  %863 = getelementptr inbounds { double, double }, ptr %862, i32 0, i32 0
  %864 = extractvalue { double, double } %859, 0
  store double %864, ptr %863, align 16
  %865 = getelementptr inbounds { double, double }, ptr %862, i32 0, i32 1
  %866 = extractvalue { double, double } %859, 1
  store double %866, ptr %865, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %103, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %867 = getelementptr inbounds { double, double }, ptr %103, i32 0, i32 0
  %868 = load double, ptr %867, align 16
  %869 = getelementptr inbounds { double, double }, ptr %103, i32 0, i32 1
  %870 = load double, ptr %869, align 8
  %871 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %75, double %868, double %870)
          to label %872 unwind label %1133

872:                                              ; preds = %860
  %873 = getelementptr inbounds %"class.JPH::Vec3", ptr %102, i32 0, i32 0
  %874 = getelementptr inbounds %union.anon, ptr %873, i32 0, i32 0
  %875 = getelementptr inbounds { double, double }, ptr %874, i32 0, i32 0
  %876 = extractvalue { double, double } %871, 0
  store double %876, ptr %875, align 16
  %877 = getelementptr inbounds { double, double }, ptr %874, i32 0, i32 1
  %878 = extractvalue { double, double } %871, 1
  store double %878, ptr %877, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %105, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %879 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 0
  %880 = load double, ptr %879, align 16
  %881 = getelementptr inbounds { double, double }, ptr %105, i32 0, i32 1
  %882 = load double, ptr %881, align 8
  %883 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %75, double %880, double %882)
          to label %884 unwind label %1133

884:                                              ; preds = %872
  %885 = getelementptr inbounds %"class.JPH::Vec3", ptr %104, i32 0, i32 0
  %886 = getelementptr inbounds %union.anon, ptr %885, i32 0, i32 0
  %887 = getelementptr inbounds { double, double }, ptr %886, i32 0, i32 0
  %888 = extractvalue { double, double } %883, 0
  store double %888, ptr %887, align 16
  %889 = getelementptr inbounds { double, double }, ptr %886, i32 0, i32 1
  %890 = extractvalue { double, double } %883, 1
  store double %890, ptr %889, align 8
  %891 = getelementptr inbounds { double, double }, ptr %100, i32 0, i32 0
  %892 = load double, ptr %891, align 16
  %893 = getelementptr inbounds { double, double }, ptr %100, i32 0, i32 1
  %894 = load double, ptr %893, align 8
  %895 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 0
  %896 = load double, ptr %895, align 16
  %897 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 1
  %898 = load double, ptr %897, align 8
  %899 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 0
  %900 = load double, ptr %899, align 16
  %901 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 1
  %902 = load double, ptr %901, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %99, double %892, double %894, double %896, double %898, double %900, double %902, i32 noundef 0, i32 noundef 0)
          to label %903 unwind label %1133

903:                                              ; preds = %884
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %99)
          to label %904 unwind label %1133

904:                                              ; preds = %903
  call void @llvm.lifetime.end.p0(i64 44, ptr %99) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %106) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %108, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %905 = getelementptr inbounds { double, double }, ptr %108, i32 0, i32 0
  %906 = load double, ptr %905, align 16
  %907 = getelementptr inbounds { double, double }, ptr %108, i32 0, i32 1
  %908 = load double, ptr %907, align 8
  %909 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %65, double %906, double %908)
          to label %910 unwind label %1137

910:                                              ; preds = %904
  %911 = getelementptr inbounds %"class.JPH::Vec3", ptr %107, i32 0, i32 0
  %912 = getelementptr inbounds %union.anon, ptr %911, i32 0, i32 0
  %913 = getelementptr inbounds { double, double }, ptr %912, i32 0, i32 0
  %914 = extractvalue { double, double } %909, 0
  store double %914, ptr %913, align 16
  %915 = getelementptr inbounds { double, double }, ptr %912, i32 0, i32 1
  %916 = extractvalue { double, double } %909, 1
  store double %916, ptr %915, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %110, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %917 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 0
  %918 = load double, ptr %917, align 16
  %919 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 1
  %920 = load double, ptr %919, align 8
  %921 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %918, double %920)
          to label %922 unwind label %1137

922:                                              ; preds = %910
  %923 = getelementptr inbounds %"class.JPH::Vec3", ptr %109, i32 0, i32 0
  %924 = getelementptr inbounds %union.anon, ptr %923, i32 0, i32 0
  %925 = getelementptr inbounds { double, double }, ptr %924, i32 0, i32 0
  %926 = extractvalue { double, double } %921, 0
  store double %926, ptr %925, align 16
  %927 = getelementptr inbounds { double, double }, ptr %924, i32 0, i32 1
  %928 = extractvalue { double, double } %921, 1
  store double %928, ptr %927, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %112, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %929 = getelementptr inbounds { double, double }, ptr %112, i32 0, i32 0
  %930 = load double, ptr %929, align 16
  %931 = getelementptr inbounds { double, double }, ptr %112, i32 0, i32 1
  %932 = load double, ptr %931, align 8
  %933 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %930, double %932)
          to label %934 unwind label %1137

934:                                              ; preds = %922
  %935 = getelementptr inbounds %"class.JPH::Vec3", ptr %111, i32 0, i32 0
  %936 = getelementptr inbounds %union.anon, ptr %935, i32 0, i32 0
  %937 = getelementptr inbounds { double, double }, ptr %936, i32 0, i32 0
  %938 = extractvalue { double, double } %933, 0
  store double %938, ptr %937, align 16
  %939 = getelementptr inbounds { double, double }, ptr %936, i32 0, i32 1
  %940 = extractvalue { double, double } %933, 1
  store double %940, ptr %939, align 8
  %941 = getelementptr inbounds { double, double }, ptr %107, i32 0, i32 0
  %942 = load double, ptr %941, align 16
  %943 = getelementptr inbounds { double, double }, ptr %107, i32 0, i32 1
  %944 = load double, ptr %943, align 8
  %945 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 0
  %946 = load double, ptr %945, align 16
  %947 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 1
  %948 = load double, ptr %947, align 8
  %949 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 0
  %950 = load double, ptr %949, align 16
  %951 = getelementptr inbounds { double, double }, ptr %111, i32 0, i32 1
  %952 = load double, ptr %951, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %106, double %942, double %944, double %946, double %948, double %950, double %952, i32 noundef 0, i32 noundef 0)
          to label %953 unwind label %1137

953:                                              ; preds = %934
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %106)
          to label %954 unwind label %1137

954:                                              ; preds = %953
  call void @llvm.lifetime.end.p0(i64 44, ptr %106) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %113) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %115, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %955 = getelementptr inbounds { double, double }, ptr %115, i32 0, i32 0
  %956 = load double, ptr %955, align 16
  %957 = getelementptr inbounds { double, double }, ptr %115, i32 0, i32 1
  %958 = load double, ptr %957, align 8
  %959 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %956, double %958)
          to label %960 unwind label %1141

960:                                              ; preds = %954
  %961 = getelementptr inbounds %"class.JPH::Vec3", ptr %114, i32 0, i32 0
  %962 = getelementptr inbounds %union.anon, ptr %961, i32 0, i32 0
  %963 = getelementptr inbounds { double, double }, ptr %962, i32 0, i32 0
  %964 = extractvalue { double, double } %959, 0
  store double %964, ptr %963, align 16
  %965 = getelementptr inbounds { double, double }, ptr %962, i32 0, i32 1
  %966 = extractvalue { double, double } %959, 1
  store double %966, ptr %965, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %117, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %967 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 0
  %968 = load double, ptr %967, align 16
  %969 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 1
  %970 = load double, ptr %969, align 8
  %971 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %968, double %970)
          to label %972 unwind label %1141

972:                                              ; preds = %960
  %973 = getelementptr inbounds %"class.JPH::Vec3", ptr %116, i32 0, i32 0
  %974 = getelementptr inbounds %union.anon, ptr %973, i32 0, i32 0
  %975 = getelementptr inbounds { double, double }, ptr %974, i32 0, i32 0
  %976 = extractvalue { double, double } %971, 0
  store double %976, ptr %975, align 16
  %977 = getelementptr inbounds { double, double }, ptr %974, i32 0, i32 1
  %978 = extractvalue { double, double } %971, 1
  store double %978, ptr %977, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %119, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %979 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 0
  %980 = load double, ptr %979, align 16
  %981 = getelementptr inbounds { double, double }, ptr %119, i32 0, i32 1
  %982 = load double, ptr %981, align 8
  %983 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %75, double %980, double %982)
          to label %984 unwind label %1141

984:                                              ; preds = %972
  %985 = getelementptr inbounds %"class.JPH::Vec3", ptr %118, i32 0, i32 0
  %986 = getelementptr inbounds %union.anon, ptr %985, i32 0, i32 0
  %987 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 0
  %988 = extractvalue { double, double } %983, 0
  store double %988, ptr %987, align 16
  %989 = getelementptr inbounds { double, double }, ptr %986, i32 0, i32 1
  %990 = extractvalue { double, double } %983, 1
  store double %990, ptr %989, align 8
  %991 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 0
  %992 = load double, ptr %991, align 16
  %993 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 1
  %994 = load double, ptr %993, align 8
  %995 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 0
  %996 = load double, ptr %995, align 16
  %997 = getelementptr inbounds { double, double }, ptr %116, i32 0, i32 1
  %998 = load double, ptr %997, align 8
  %999 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 0
  %1000 = load double, ptr %999, align 16
  %1001 = getelementptr inbounds { double, double }, ptr %118, i32 0, i32 1
  %1002 = load double, ptr %1001, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %113, double %992, double %994, double %996, double %998, double %1000, double %1002, i32 noundef 0, i32 noundef 0)
          to label %1003 unwind label %1141

1003:                                             ; preds = %984
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %113)
          to label %1004 unwind label %1141

1004:                                             ; preds = %1003
  call void @llvm.lifetime.end.p0(i64 44, ptr %113) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %120) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %122, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1005 = getelementptr inbounds { double, double }, ptr %122, i32 0, i32 0
  %1006 = load double, ptr %1005, align 16
  %1007 = getelementptr inbounds { double, double }, ptr %122, i32 0, i32 1
  %1008 = load double, ptr %1007, align 8
  %1009 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %65, double %1006, double %1008)
          to label %1010 unwind label %1145

1010:                                             ; preds = %1004
  %1011 = getelementptr inbounds %"class.JPH::Vec3", ptr %121, i32 0, i32 0
  %1012 = getelementptr inbounds %union.anon, ptr %1011, i32 0, i32 0
  %1013 = getelementptr inbounds { double, double }, ptr %1012, i32 0, i32 0
  %1014 = extractvalue { double, double } %1009, 0
  store double %1014, ptr %1013, align 16
  %1015 = getelementptr inbounds { double, double }, ptr %1012, i32 0, i32 1
  %1016 = extractvalue { double, double } %1009, 1
  store double %1016, ptr %1015, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %124, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1017 = getelementptr inbounds { double, double }, ptr %124, i32 0, i32 0
  %1018 = load double, ptr %1017, align 16
  %1019 = getelementptr inbounds { double, double }, ptr %124, i32 0, i32 1
  %1020 = load double, ptr %1019, align 8
  %1021 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %1018, double %1020)
          to label %1022 unwind label %1145

1022:                                             ; preds = %1010
  %1023 = getelementptr inbounds %"class.JPH::Vec3", ptr %123, i32 0, i32 0
  %1024 = getelementptr inbounds %union.anon, ptr %1023, i32 0, i32 0
  %1025 = getelementptr inbounds { double, double }, ptr %1024, i32 0, i32 0
  %1026 = extractvalue { double, double } %1021, 0
  store double %1026, ptr %1025, align 16
  %1027 = getelementptr inbounds { double, double }, ptr %1024, i32 0, i32 1
  %1028 = extractvalue { double, double } %1021, 1
  store double %1028, ptr %1027, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %126, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1029 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 0
  %1030 = load double, ptr %1029, align 16
  %1031 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 1
  %1032 = load double, ptr %1031, align 8
  %1033 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %1030, double %1032)
          to label %1034 unwind label %1145

1034:                                             ; preds = %1022
  %1035 = getelementptr inbounds %"class.JPH::Vec3", ptr %125, i32 0, i32 0
  %1036 = getelementptr inbounds %union.anon, ptr %1035, i32 0, i32 0
  %1037 = getelementptr inbounds { double, double }, ptr %1036, i32 0, i32 0
  %1038 = extractvalue { double, double } %1033, 0
  store double %1038, ptr %1037, align 16
  %1039 = getelementptr inbounds { double, double }, ptr %1036, i32 0, i32 1
  %1040 = extractvalue { double, double } %1033, 1
  store double %1040, ptr %1039, align 8
  %1041 = getelementptr inbounds { double, double }, ptr %121, i32 0, i32 0
  %1042 = load double, ptr %1041, align 16
  %1043 = getelementptr inbounds { double, double }, ptr %121, i32 0, i32 1
  %1044 = load double, ptr %1043, align 8
  %1045 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 0
  %1046 = load double, ptr %1045, align 16
  %1047 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 1
  %1048 = load double, ptr %1047, align 8
  %1049 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 0
  %1050 = load double, ptr %1049, align 16
  %1051 = getelementptr inbounds { double, double }, ptr %125, i32 0, i32 1
  %1052 = load double, ptr %1051, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %120, double %1042, double %1044, double %1046, double %1048, double %1050, double %1052, i32 noundef 0, i32 noundef 0)
          to label %1053 unwind label %1145

1053:                                             ; preds = %1034
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %120)
          to label %1054 unwind label %1145

1054:                                             ; preds = %1053
  call void @llvm.lifetime.end.p0(i64 44, ptr %120) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr %127) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %129, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1055 = getelementptr inbounds { double, double }, ptr %129, i32 0, i32 0
  %1056 = load double, ptr %1055, align 16
  %1057 = getelementptr inbounds { double, double }, ptr %129, i32 0, i32 1
  %1058 = load double, ptr %1057, align 8
  %1059 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %66, double %1056, double %1058)
          to label %1060 unwind label %1149

1060:                                             ; preds = %1054
  %1061 = getelementptr inbounds %"class.JPH::Vec3", ptr %128, i32 0, i32 0
  %1062 = getelementptr inbounds %union.anon, ptr %1061, i32 0, i32 0
  %1063 = getelementptr inbounds { double, double }, ptr %1062, i32 0, i32 0
  %1064 = extractvalue { double, double } %1059, 0
  store double %1064, ptr %1063, align 16
  %1065 = getelementptr inbounds { double, double }, ptr %1062, i32 0, i32 1
  %1066 = extractvalue { double, double } %1059, 1
  store double %1066, ptr %1065, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %131, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1067 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 0
  %1068 = load double, ptr %1067, align 16
  %1069 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 1
  %1070 = load double, ptr %1069, align 8
  %1071 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %75, double %1068, double %1070)
          to label %1072 unwind label %1149

1072:                                             ; preds = %1060
  %1073 = getelementptr inbounds %"class.JPH::Vec3", ptr %130, i32 0, i32 0
  %1074 = getelementptr inbounds %union.anon, ptr %1073, i32 0, i32 0
  %1075 = getelementptr inbounds { double, double }, ptr %1074, i32 0, i32 0
  %1076 = extractvalue { double, double } %1071, 0
  store double %1076, ptr %1075, align 16
  %1077 = getelementptr inbounds { double, double }, ptr %1074, i32 0, i32 1
  %1078 = extractvalue { double, double } %1071, 1
  store double %1078, ptr %1077, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %133, ptr align 16 %74, i64 16, i1 false), !tbaa.struct !21
  %1079 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 0
  %1080 = load double, ptr %1079, align 16
  %1081 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 1
  %1082 = load double, ptr %1081, align 8
  %1083 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %70, double %1080, double %1082)
          to label %1084 unwind label %1149

1084:                                             ; preds = %1072
  %1085 = getelementptr inbounds %"class.JPH::Vec3", ptr %132, i32 0, i32 0
  %1086 = getelementptr inbounds %union.anon, ptr %1085, i32 0, i32 0
  %1087 = getelementptr inbounds { double, double }, ptr %1086, i32 0, i32 0
  %1088 = extractvalue { double, double } %1083, 0
  store double %1088, ptr %1087, align 16
  %1089 = getelementptr inbounds { double, double }, ptr %1086, i32 0, i32 1
  %1090 = extractvalue { double, double } %1083, 1
  store double %1090, ptr %1089, align 8
  %1091 = getelementptr inbounds { double, double }, ptr %128, i32 0, i32 0
  %1092 = load double, ptr %1091, align 16
  %1093 = getelementptr inbounds { double, double }, ptr %128, i32 0, i32 1
  %1094 = load double, ptr %1093, align 8
  %1095 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 0
  %1096 = load double, ptr %1095, align 16
  %1097 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 1
  %1098 = load double, ptr %1097, align 8
  %1099 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 0
  %1100 = load double, ptr %1099, align 16
  %1101 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 1
  %1102 = load double, ptr %1101, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %127, double %1092, double %1094, double %1096, double %1098, double %1100, double %1102, i32 noundef 0, i32 noundef 0)
          to label %1103 unwind label %1149

1103:                                             ; preds = %1084
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 4 dereferenceable(44) %127)
          to label %1104 unwind label %1149

1104:                                             ; preds = %1103
  call void @llvm.lifetime.end.p0(i64 44, ptr %127) #14
  br label %1153

1105:                                             ; preds = %645, %641, %633
  %1106 = landingpad { ptr, i32 }
          cleanup
  %1107 = extractvalue { ptr, i32 } %1106, 0
  store ptr %1107, ptr %6, align 8
  %1108 = extractvalue { ptr, i32 } %1106, 1
  store i32 %1108, ptr %7, align 4
  br label %1160

1109:                                             ; preds = %658, %652, %646
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %6, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #14
  br label %1159

1113:                                             ; preds = %670
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %6, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %7, align 4
  br label %1158

1117:                                             ; preds = %683, %677
  %1118 = landingpad { ptr, i32 }
          cleanup
  %1119 = extractvalue { ptr, i32 } %1118, 0
  store ptr %1119, ptr %6, align 8
  %1120 = extractvalue { ptr, i32 } %1118, 1
  store i32 %1120, ptr %7, align 4
  br label %1157

1121:                                             ; preds = %753, %734, %722, %710, %704
  %1122 = landingpad { ptr, i32 }
          cleanup
  %1123 = extractvalue { ptr, i32 } %1122, 0
  store ptr %1123, ptr %6, align 8
  %1124 = extractvalue { ptr, i32 } %1122, 1
  store i32 %1124, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %78) #14
  br label %1157

1125:                                             ; preds = %803, %784, %772, %760, %754
  %1126 = landingpad { ptr, i32 }
          cleanup
  %1127 = extractvalue { ptr, i32 } %1126, 0
  store ptr %1127, ptr %6, align 8
  %1128 = extractvalue { ptr, i32 } %1126, 1
  store i32 %1128, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %85) #14
  br label %1157

1129:                                             ; preds = %853, %834, %822, %810, %804
  %1130 = landingpad { ptr, i32 }
          cleanup
  %1131 = extractvalue { ptr, i32 } %1130, 0
  store ptr %1131, ptr %6, align 8
  %1132 = extractvalue { ptr, i32 } %1130, 1
  store i32 %1132, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %92) #14
  br label %1157

1133:                                             ; preds = %903, %884, %872, %860, %854
  %1134 = landingpad { ptr, i32 }
          cleanup
  %1135 = extractvalue { ptr, i32 } %1134, 0
  store ptr %1135, ptr %6, align 8
  %1136 = extractvalue { ptr, i32 } %1134, 1
  store i32 %1136, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %99) #14
  br label %1157

1137:                                             ; preds = %953, %934, %922, %910, %904
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %6, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %106) #14
  br label %1157

1141:                                             ; preds = %1003, %984, %972, %960, %954
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %6, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %113) #14
  br label %1157

1145:                                             ; preds = %1053, %1034, %1022, %1010, %1004
  %1146 = landingpad { ptr, i32 }
          cleanup
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %6, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %120) #14
  br label %1157

1149:                                             ; preds = %1103, %1084, %1072, %1060, %1054
  %1150 = landingpad { ptr, i32 }
          cleanup
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %6, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %127) #14
  br label %1157

1153:                                             ; preds = %1104, %695
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 16 %70, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %66, ptr align 16 %75, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #14
  br label %1154

1154:                                             ; preds = %1153
  %1155 = load i32, ptr %67, align 4, !tbaa !19
  %1156 = add nsw i32 %1155, 1
  store i32 %1156, ptr %67, align 4, !tbaa !19
  br label %621, !llvm.loop !23

1157:                                             ; preds = %1149, %1145, %1141, %1137, %1133, %1129, %1125, %1121, %1117
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #14
  br label %1158

1158:                                             ; preds = %1157, %1113
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #14
  br label %1159

1159:                                             ; preds = %1158, %1109
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #14
  br label %1160

1160:                                             ; preds = %1159, %1105
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #14
  br label %1227

1161:                                             ; preds = %624
  call void @llvm.lifetime.start.p0(i64 152, ptr %134) #14
  call void @llvm.memset.p0.i64(ptr align 8 %135, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %135) #14
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %134, ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef %135)
          to label %1162 unwind label %1203

1162:                                             ; preds = %1161
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %135) #14
  %1163 = getelementptr inbounds i8, ptr %134, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %1163)
          to label %1164 unwind label %1207

1164:                                             ; preds = %1162
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #14
  %1165 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %1166 = load ptr, ptr %1165, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %137) #14
  %1167 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %1168 unwind label %1211

1168:                                             ; preds = %1164
  %1169 = getelementptr inbounds %"class.JPH::Vec3", ptr %138, i32 0, i32 0
  %1170 = getelementptr inbounds %union.anon, ptr %1169, i32 0, i32 0
  %1171 = getelementptr inbounds { double, double }, ptr %1170, i32 0, i32 0
  %1172 = extractvalue { double, double } %1167, 0
  store double %1172, ptr %1171, align 16
  %1173 = getelementptr inbounds { double, double }, ptr %1170, i32 0, i32 1
  %1174 = extractvalue { double, double } %1167, 1
  store double %1174, ptr %1173, align 8
  %1175 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %1176 unwind label %1211

1176:                                             ; preds = %1168
  %1177 = getelementptr inbounds %"class.JPH::Quat", ptr %139, i32 0, i32 0
  %1178 = getelementptr inbounds %"class.JPH::Vec4", ptr %1177, i32 0, i32 0
  %1179 = getelementptr inbounds %union.anon.4, ptr %1178, i32 0, i32 0
  %1180 = getelementptr inbounds { double, double }, ptr %1179, i32 0, i32 0
  %1181 = extractvalue { double, double } %1175, 0
  store double %1181, ptr %1180, align 16
  %1182 = getelementptr inbounds { double, double }, ptr %1179, i32 0, i32 1
  %1183 = extractvalue { double, double } %1175, 1
  store double %1183, ptr %1182, align 8
  %1184 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 0
  %1185 = load double, ptr %1184, align 16
  %1186 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 1
  %1187 = load double, ptr %1186, align 8
  %1188 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 0
  %1189 = load double, ptr %1188, align 16
  %1190 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 1
  %1191 = load double, ptr %1190, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %137, ptr noundef %134, double %1185, double %1187, double %1189, double %1191, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %1192 unwind label %1211

1192:                                             ; preds = %1176
  %1193 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %1166, ptr noundef nonnull align 16 dereferenceable(256) %137)
          to label %1194 unwind label %1215

1194:                                             ; preds = %1192
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %137) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr %137) #14
  store ptr %1193, ptr %136, align 8, !tbaa !5
  %1195 = load ptr, ptr %136, align 8, !tbaa !5
  invoke void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %1195, float noundef 1.000000e+00)
          to label %1196 unwind label %1220

1196:                                             ; preds = %1194
  %1197 = getelementptr inbounds %class.Test, ptr %140, i32 0, i32 3
  %1198 = load ptr, ptr %1197, align 8, !tbaa !9
  %1199 = load ptr, ptr %136, align 8, !tbaa !5
  %1200 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %1199)
          to label %1201 unwind label %1220

1201:                                             ; preds = %1196
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %1198, ptr noundef nonnull align 4 dereferenceable(4) %1200, i32 noundef 0)
          to label %1202 unwind label %1220

1202:                                             ; preds = %1201
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #14
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %134) #14
  call void @llvm.lifetime.end.p0(i64 152, ptr %134) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #14
  br label %1229

1203:                                             ; preds = %1161
  %1204 = landingpad { ptr, i32 }
          cleanup
  %1205 = extractvalue { ptr, i32 } %1204, 0
  store ptr %1205, ptr %6, align 8
  %1206 = extractvalue { ptr, i32 } %1204, 1
  store i32 %1206, ptr %7, align 4
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %135) #14
  br label %1226

1207:                                             ; preds = %1162
  %1208 = landingpad { ptr, i32 }
          cleanup
  %1209 = extractvalue { ptr, i32 } %1208, 0
  store ptr %1209, ptr %6, align 8
  %1210 = extractvalue { ptr, i32 } %1208, 1
  store i32 %1210, ptr %7, align 4
  br label %1225

1211:                                             ; preds = %1176, %1168, %1164
  %1212 = landingpad { ptr, i32 }
          cleanup
  %1213 = extractvalue { ptr, i32 } %1212, 0
  store ptr %1213, ptr %6, align 8
  %1214 = extractvalue { ptr, i32 } %1212, 1
  store i32 %1214, ptr %7, align 4
  br label %1219

1215:                                             ; preds = %1192
  %1216 = landingpad { ptr, i32 }
          cleanup
  %1217 = extractvalue { ptr, i32 } %1216, 0
  store ptr %1217, ptr %6, align 8
  %1218 = extractvalue { ptr, i32 } %1216, 1
  store i32 %1218, ptr %7, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %137) #14
  br label %1219

1219:                                             ; preds = %1215, %1211
  call void @llvm.lifetime.end.p0(i64 256, ptr %137) #14
  br label %1224

1220:                                             ; preds = %1201, %1196, %1194
  %1221 = landingpad { ptr, i32 }
          cleanup
  %1222 = extractvalue { ptr, i32 } %1221, 0
  store ptr %1222, ptr %6, align 8
  %1223 = extractvalue { ptr, i32 } %1221, 1
  store i32 %1223, ptr %7, align 4
  br label %1224

1224:                                             ; preds = %1220, %1219
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #14
  br label %1225

1225:                                             ; preds = %1224, %1207
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %134) #14
  br label %1226

1226:                                             ; preds = %1225, %1203
  call void @llvm.lifetime.end.p0(i64 152, ptr %134) #14
  br label %1227

1227:                                             ; preds = %1226, %1160, %629
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #14
  br label %1228

1228:                                             ; preds = %1227, %625
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #14
  br label %1236

1229:                                             ; preds = %1202, %599
  br label %1230

1230:                                             ; preds = %1229, %596
  br label %1231

1231:                                             ; preds = %1230, %567
  br label %1232

1232:                                             ; preds = %1231, %479
  br label %1233

1233:                                             ; preds = %1232, %390
  br label %1234

1234:                                             ; preds = %1233, %312
  br label %1235

1235:                                             ; preds = %1234, %171
  ret void

1236:                                             ; preds = %1228, %591, %503, %404, %346, %185
  %1237 = load ptr, ptr %6, align 8
  %1238 = load i32, ptr %7, align 4
  %1239 = insertvalue { ptr, i32 } poison, ptr %1237, 0
  %1240 = insertvalue { ptr, i32 } %1239, i32 %1238, 1
  resume { ptr, i32 } %1240
}

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #2

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) #3

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122), float noundef) #8 align 2

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122)) #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11VehicleTest13LoadRaceTrackEPKc(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef) #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef) #6

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3SinEf(float noundef) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #9

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3CosEf(float noundef) #4

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

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

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

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) #3

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

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

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

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) #3

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44), double, double, double, double, double, double, i32 noundef, i32 noundef) unnamed_addr #1 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #12

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

declare void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) #11 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind willreturn memory(read) "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 = { "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 = { 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 #5 = { 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 #6 = { 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 #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #11 = { 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 #12 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { 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, !6, i64 24}
!10 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 56}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !13, i64 0}
!13 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !6, i64 48}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!17, !17, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"int", !7, i64 0}
!21 = !{i64 0, i64 16, !22}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}


; 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::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.5", %"class.JPH::RefConst.6" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Triangle" = type { [3 x %"class.JPH::Float3"], i32, i32 }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.18", %"class.JPH::Array.21", %"class.JPH::Array.24", i32, float, i8, i32 }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.13", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.13" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.14, i8, [7 x i8] }>
%union.anon.14 = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.JPH::Array.18" = type { i64, i64, ptr }
%"class.JPH::Array.21" = type { i64, i64, ptr }
%"class.JPH::Array.24" = type { i64, i64, ptr }

@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZN11VehicleTest10sSceneNameE = external dso_local local_unnamed_addr global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11VehicleTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::BodyCreationSettings", align 16
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::BodyCreationSettings", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::BodyCreationSettings", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::BodyCreationSettings", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::BodyCreationSettings", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::BodyCreationSettings", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::BodyCreationSettings", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Array.10", align 8
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Triangle", align 4
  %38 = alloca %"class.JPH::Triangle", align 4
  %39 = alloca %"class.JPH::Triangle", align 4
  %40 = alloca %"class.JPH::Triangle", align 4
  %41 = alloca %"class.JPH::Triangle", align 4
  %42 = alloca %"class.JPH::Triangle", align 4
  %43 = alloca %"class.JPH::Triangle", align 4
  %44 = alloca %"class.JPH::Triangle", align 4
  %45 = alloca %"class.JPH::MeshShapeSettings", align 8
  %46 = alloca %"class.JPH::Array.24", align 8
  %47 = alloca %"class.JPH::BodyCreationSettings", align 16
  %48 = load ptr, ptr @_ZN11VehicleTest10sSceneNameE, align 8, !tbaa !5
  %49 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.1) #13
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %51, label %75

51:                                               ; preds = %1
  %52 = getelementptr inbounds i8, ptr %0, i64 24
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %2) #14
  %54 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %55 unwind label %70

55:                                               ; preds = %51
  %56 = load double, ptr %3, align 16
  %57 = getelementptr inbounds i8, ptr %3, i64 8
  %58 = load double, ptr %57, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %54, double %56, double %58, float noundef 0.000000e+00, ptr noundef null)
          to label %59 unwind label %70

59:                                               ; preds = %55
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %60 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %61 = extractvalue { double, double } %60, 0
  %62 = extractvalue { double, double } %60, 1
  %63 = load double, ptr %4, align 16
  %64 = getelementptr inbounds i8, ptr %4, i64 8
  %65 = load double, ptr %64, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %2, ptr noundef nonnull %54, double %63, double %65, double %61, double %62, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %66 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %53, ptr noundef nonnull align 16 dereferenceable(256) %2)
          to label %67 unwind label %72

67:                                               ; preds = %59
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %2) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %2) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %66, float noundef 1.000000e+00)
  %68 = load ptr, ptr %52, align 8, !tbaa !9
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %66)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %68, ptr noundef nonnull align 4 dereferenceable(4) %69, i32 noundef 1)
  call void @_ZN11VehicleTest13LoadRaceTrackEPKc(ptr noundef nonnull align 8 dereferenceable(136) %0, ptr noundef nonnull @.str.8)
  br label %530

70:                                               ; preds = %55, %51
  %71 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %54) #14
  br label %74

72:                                               ; preds = %59
  %73 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %2) #14
  br label %74

74:                                               ; preds = %72, %70
  %.pn219 = phi { ptr, i32 } [ %73, %72 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %2) #14
  br label %531

75:                                               ; preds = %1
  %76 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.2) #13
  %77 = icmp eq i32 %76, 0
  br i1 %77, label %78, label %161

78:                                               ; preds = %75
  %79 = tail call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  %80 = getelementptr inbounds i8, ptr %0, i64 24
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #14
  %82 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %83 unwind label %146

83:                                               ; preds = %78
  %84 = load double, ptr %6, align 16
  %85 = getelementptr inbounds i8, ptr %6, i64 8
  %86 = load double, ptr %85, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %82, double %84, double %86, float noundef 0.000000e+00, ptr noundef null)
          to label %87 unwind label %146

87:                                               ; preds = %83
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %88 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %89 = extractvalue { double, double } %88, 0
  %90 = extractvalue { double, double } %88, 1
  %91 = load double, ptr %7, align 16
  %92 = getelementptr inbounds i8, ptr %7, i64 8
  %93 = load double, ptr %92, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef nonnull %82, double %91, double %93, double %89, double %90, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %94 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %81, ptr noundef nonnull align 16 dereferenceable(256) %5)
          to label %95 unwind label %148

95:                                               ; preds = %87
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %94, float noundef 1.000000e+00)
  %96 = load ptr, ptr %80, align 8, !tbaa !9
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %94)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef 1)
  %98 = load ptr, ptr %80, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #14
  %99 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 2.500000e+01, float noundef 1.000000e+00, float noundef 1.000000e+02)
          to label %100 unwind label %151

100:                                              ; preds = %95
  %101 = load double, ptr %9, align 16
  %102 = getelementptr inbounds i8, ptr %9, i64 8
  %103 = load double, ptr %102, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %99, double %101, double %103, float noundef 0.000000e+00, ptr noundef null)
          to label %104 unwind label %151

104:                                              ; preds = %100
  %105 = call noundef float @_ZN3JPH3SinEf(float noundef 0x3FE0C15240000000)
  %106 = call float @llvm.fmuladd.f32(float %105, float 1.000000e+02, float -1.000000e+00)
  %107 = call noundef float @_ZN3JPH3CosEf(float noundef 0x3FE0C15240000000)
  %108 = call float @llvm.fmuladd.f32(float %107, float 1.000000e+02, float 1.000000e+02)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef 0.000000e+00, float noundef %106, float noundef %108)
  %109 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %110 = extractvalue { double, double } %109, 0
  %111 = extractvalue { double, double } %109, 1
  %112 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %110, double %111, float noundef 0xBFE0C15240000000)
  %113 = extractvalue { double, double } %112, 0
  %114 = extractvalue { double, double } %112, 1
  %115 = load double, ptr %10, align 16
  %116 = getelementptr inbounds i8, ptr %10, i64 8
  %117 = load double, ptr %116, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef nonnull %99, double %115, double %117, double %113, double %114, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %118 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 16 dereferenceable(256) %8)
          to label %119 unwind label %153

119:                                              ; preds = %104
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %118, float noundef 1.000000e+00)
  %120 = load ptr, ptr %80, align 8, !tbaa !9
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %118)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %120, ptr noundef nonnull align 4 dereferenceable(4) %121, i32 noundef 1)
  %122 = load ptr, ptr %80, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #14
  %123 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 2.500000e+01, float noundef 1.000000e+00, float noundef 1.000000e+02)
          to label %124 unwind label %156

124:                                              ; preds = %119
  %125 = load double, ptr %12, align 16
  %126 = getelementptr inbounds i8, ptr %12, i64 8
  %127 = load double, ptr %126, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %123, double %125, double %127, float noundef 0.000000e+00, ptr noundef null)
          to label %128 unwind label %156

128:                                              ; preds = %124
  %129 = call noundef float @_ZN3JPH3SinEf(float noundef 0x3FE0C15240000000)
  %130 = call float @llvm.fmuladd.f32(float %129, float 1.000000e+02, float -1.000000e+00)
  %131 = call noundef float @_ZN3JPH3CosEf(float noundef 0x3FE0C15240000000)
  %132 = call float @llvm.fmuladd.f32(float %131, float 3.000000e+02, float 1.000000e+02)
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 0.000000e+00, float noundef %130, float noundef %132)
  %133 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %134 = extractvalue { double, double } %133, 0
  %135 = extractvalue { double, double } %133, 1
  %136 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %134, double %135, float noundef 0x3FE0C15240000000)
  %137 = extractvalue { double, double } %136, 0
  %138 = extractvalue { double, double } %136, 1
  %139 = load double, ptr %13, align 16
  %140 = getelementptr inbounds i8, ptr %13, i64 8
  %141 = load double, ptr %140, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef nonnull %123, double %139, double %141, double %137, double %138, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %142 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %122, ptr noundef nonnull align 16 dereferenceable(256) %11)
          to label %143 unwind label %158

143:                                              ; preds = %128
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %142, float noundef 1.000000e+00)
  %144 = load ptr, ptr %80, align 8, !tbaa !9
  %145 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %142)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %144, ptr noundef nonnull align 4 dereferenceable(4) %145, i32 noundef 1)
  br label %530

146:                                              ; preds = %83, %78
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %82) #14
  br label %150

148:                                              ; preds = %87
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #14
  br label %150

150:                                              ; preds = %148, %146
  %.pn211 = phi { ptr, i32 } [ %149, %148 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #14
  br label %531

151:                                              ; preds = %100, %95
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %99) #14
  br label %155

153:                                              ; preds = %104
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #14
  br label %155

155:                                              ; preds = %153, %151
  %.pn213 = phi { ptr, i32 } [ %154, %153 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #14
  br label %531

156:                                              ; preds = %124, %119
  %157 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %123) #14
  br label %160

158:                                              ; preds = %128
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #14
  br label %160

160:                                              ; preds = %158, %156
  %.pn215 = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #14
  br label %531

161:                                              ; preds = %75
  %162 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.3) #13
  %163 = icmp eq i32 %162, 0
  br i1 %163, label %164, label %192

164:                                              ; preds = %161
  %165 = getelementptr inbounds i8, ptr %0, i64 24
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %14) #14
  %167 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %168 unwind label %187

168:                                              ; preds = %164
  %169 = load double, ptr %15, align 16
  %170 = getelementptr inbounds i8, ptr %15, i64 8
  %171 = load double, ptr %170, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %167, double %169, double %171, float noundef 0.000000e+00, ptr noundef null)
          to label %172 unwind label %187

172:                                              ; preds = %168
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %173 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %174 = extractvalue { double, double } %173, 0
  %175 = extractvalue { double, double } %173, 1
  %176 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef -2.000000e+01)
  %177 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %174, double %175, float noundef %176)
  %178 = extractvalue { double, double } %177, 0
  %179 = extractvalue { double, double } %177, 1
  %180 = load double, ptr %16, align 16
  %181 = getelementptr inbounds i8, ptr %16, i64 8
  %182 = load double, ptr %181, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %14, ptr noundef nonnull %167, double %180, double %182, double %178, double %179, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %183 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %166, ptr noundef nonnull align 16 dereferenceable(256) %14)
          to label %184 unwind label %189

184:                                              ; preds = %172
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %183, float noundef 1.000000e+00)
  %185 = load ptr, ptr %165, align 8, !tbaa !9
  %186 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %183)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %185, ptr noundef nonnull align 4 dereferenceable(4) %186, i32 noundef 1)
  br label %530

187:                                              ; preds = %168, %164
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %167) #14
  br label %191

189:                                              ; preds = %172
  %190 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #14
  br label %191

191:                                              ; preds = %189, %187
  %.pn209 = phi { ptr, i32 } [ %190, %189 ], [ %188, %187 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #14
  br label %531

192:                                              ; preds = %161
  %193 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.4) #13
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %244

195:                                              ; preds = %192
  %196 = getelementptr inbounds i8, ptr %0, i64 24
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %17) #14
  %198 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %199 unwind label %234

199:                                              ; preds = %195
  %200 = load double, ptr %18, align 16
  %201 = getelementptr inbounds i8, ptr %18, i64 8
  %202 = load double, ptr %201, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %198, double %200, double %202, float noundef 0.000000e+00, ptr noundef null)
          to label %203 unwind label %234

203:                                              ; preds = %199
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %204 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %205 = extractvalue { double, double } %204, 0
  %206 = extractvalue { double, double } %204, 1
  %207 = load double, ptr %19, align 16
  %208 = getelementptr inbounds i8, ptr %19, i64 8
  %209 = load double, ptr %208, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %17, ptr noundef nonnull %198, double %207, double %209, double %205, double %206, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %210 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %197, ptr noundef nonnull align 16 dereferenceable(256) %17)
          to label %211 unwind label %236

211:                                              ; preds = %203
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %210, float noundef 1.000000e+00)
  %212 = load ptr, ptr %196, align 8, !tbaa !9
  %213 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %210)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %212, ptr noundef nonnull align 4 dereferenceable(4) %213, i32 noundef 1)
  %214 = load ptr, ptr %196, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %20) #14
  %215 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 5.000000e+00, float noundef 0x3F999999A0000000, float noundef 5.000000e+00)
          to label %216 unwind label %239

216:                                              ; preds = %211
  %217 = load double, ptr %21, align 16
  %218 = getelementptr inbounds i8, ptr %21, i64 8
  %219 = load double, ptr %218, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %215, double %217, double %219, float noundef 0.000000e+00, ptr noundef null)
          to label %220 unwind label %239

220:                                              ; preds = %216
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef -2.000000e+00, float noundef 0x3F999999A0000000, float noundef 6.000000e+01)
  %221 = call { double, double } @_ZN3JPH4Vec36sAxisYEv()
  %222 = extractvalue { double, double } %221, 0
  %223 = extractvalue { double, double } %221, 1
  %224 = call { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %222, double %223, float noundef 0xBFEE28C760000000)
  %225 = extractvalue { double, double } %224, 0
  %226 = extractvalue { double, double } %224, 1
  %227 = load double, ptr %22, align 16
  %228 = getelementptr inbounds i8, ptr %22, i64 8
  %229 = load double, ptr %228, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %20, ptr noundef nonnull %215, double %227, double %229, double %225, double %226, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %230 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %214, ptr noundef nonnull align 16 dereferenceable(256) %20)
          to label %231 unwind label %241

231:                                              ; preds = %220
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %20) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %230, float noundef 1.000000e+00)
  %232 = load ptr, ptr %196, align 8, !tbaa !9
  %233 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %230)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %232, ptr noundef nonnull align 4 dereferenceable(4) %233, i32 noundef 1)
  br label %530

234:                                              ; preds = %199, %195
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %198) #14
  br label %238

236:                                              ; preds = %203
  %237 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %17) #14
  br label %238

238:                                              ; preds = %236, %234
  %.pn204 = phi { ptr, i32 } [ %237, %236 ], [ %235, %234 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %17) #14
  br label %531

239:                                              ; preds = %216, %211
  %240 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %215) #14
  br label %243

241:                                              ; preds = %220
  %242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #14
  br label %243

243:                                              ; preds = %241, %239
  %.pn206 = phi { ptr, i32 } [ %242, %241 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %20) #14
  br label %531

244:                                              ; preds = %192
  %245 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.5) #13
  %246 = icmp eq i32 %245, 0
  br i1 %246, label %247, label %293

247:                                              ; preds = %244
  %248 = getelementptr inbounds i8, ptr %0, i64 24
  %249 = load ptr, ptr %248, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %23) #14
  %250 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 1.000000e+03, float noundef 1.000000e+00, float noundef 1.000000e+03)
          to label %251 unwind label %283

251:                                              ; preds = %247
  %252 = load double, ptr %24, align 16
  %253 = getelementptr inbounds i8, ptr %24, i64 8
  %254 = load double, ptr %253, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %250, double %252, double %254, float noundef 0.000000e+00, ptr noundef null)
          to label %255 unwind label %283

255:                                              ; preds = %251
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef 0.000000e+00, float noundef -1.000000e+00, float noundef 0.000000e+00)
  %256 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %257 = extractvalue { double, double } %256, 0
  %258 = extractvalue { double, double } %256, 1
  %259 = load double, ptr %25, align 16
  %260 = getelementptr inbounds i8, ptr %25, i64 8
  %261 = load double, ptr %260, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %23, ptr noundef nonnull %250, double %259, double %261, double %257, double %258, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %262 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %249, ptr noundef nonnull align 16 dereferenceable(256) %23)
          to label %263 unwind label %285

263:                                              ; preds = %255
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %23) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %23) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %262, float noundef 1.000000e+00)
  %264 = load ptr, ptr %248, align 8, !tbaa !9
  %265 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %262)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %264, ptr noundef nonnull align 4 dereferenceable(4) %265, i32 noundef 1)
  %266 = load ptr, ptr %248, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %26) #14
  %267 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef 1.500000e+01, float noundef 0x3F999999A0000000, float noundef 1.500000e+01)
          to label %268 unwind label %288

268:                                              ; preds = %263
  %269 = load double, ptr %27, align 16
  %270 = getelementptr inbounds i8, ptr %27, i64 8
  %271 = load double, ptr %270, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %267, double %269, double %271, float noundef 0.000000e+00, ptr noundef null)
          to label %272 unwind label %288

272:                                              ; preds = %268
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef -2.000000e+00, float noundef 0x3F999999A0000000, float noundef 3.000000e+01)
  %273 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %274 = extractvalue { double, double } %273, 0
  %275 = extractvalue { double, double } %273, 1
  %276 = load double, ptr %28, align 16
  %277 = getelementptr inbounds i8, ptr %28, i64 8
  %278 = load double, ptr %277, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %26, ptr noundef nonnull %267, double %276, double %278, double %274, double %275, i8 noundef zeroext 2, i16 noundef zeroext 1)
  %279 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %266, ptr noundef nonnull align 16 dereferenceable(256) %26)
          to label %280 unwind label %290

280:                                              ; preds = %272
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %26) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %26) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %279, float noundef 1.000000e+00)
  %281 = load ptr, ptr %248, align 8, !tbaa !9
  %282 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %279)
  call void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %281, ptr noundef nonnull align 4 dereferenceable(4) %282, i32 noundef 0)
  br label %530

283:                                              ; preds = %251, %247
  %284 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %250) #14
  br label %287

285:                                              ; preds = %255
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %23) #14
  br label %287

287:                                              ; preds = %285, %283
  %.pn199 = phi { ptr, i32 } [ %286, %285 ], [ %284, %283 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %23) #14
  br label %531

288:                                              ; preds = %268, %263
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %267) #14
  br label %292

290:                                              ; preds = %272
  %291 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %26) #14
  br label %292

292:                                              ; preds = %290, %288
  %.pn201 = phi { ptr, i32 } [ %291, %290 ], [ %289, %288 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %26) #14
  br label %531

293:                                              ; preds = %244
  %294 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.6) #13
  %295 = icmp eq i32 %294, 0
  br i1 %295, label %296, label %298

296:                                              ; preds = %293
  %297 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %0)
  tail call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %297, float noundef 1.000000e+00)
  tail call void @_ZN11VehicleTest12CreateBridgeEv(ptr noundef nonnull align 8 dereferenceable(136) %0)
  tail call void @_ZN11VehicleTest10CreateWallEv(ptr noundef nonnull align 8 dereferenceable(136) %0)
  tail call void @_ZN11VehicleTest12CreateRubbleEv(ptr noundef nonnull align 8 dereferenceable(136) %0)
  br label %530

298:                                              ; preds = %293
  %299 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %48, ptr noundef nonnull dereferenceable(1) @.str.7) #13
  %300 = icmp eq i32 %299, 0
  br i1 %300, label %301, label %530

301:                                              ; preds = %298
  %302 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #14
  %303 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %304 unwind label %316

304:                                              ; preds = %301
  %305 = extractvalue { double, double } %303, 0
  store double %305, ptr %30, align 16
  %306 = getelementptr inbounds i8, ptr %30, i64 8
  %307 = extractvalue { double, double } %303, 1
  store double %307, ptr %306, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #14
  %308 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %309 unwind label %318

309:                                              ; preds = %304
  %310 = extractvalue { double, double } %308, 0
  store double %310, ptr %31, align 16
  %311 = getelementptr inbounds i8, ptr %31, i64 8
  %312 = extractvalue { double, double } %308, 1
  store double %312, ptr %311, align 8
  %.sroa.2105.0..sroa_idx = getelementptr inbounds i8, ptr %32, i64 8
  %313 = getelementptr inbounds i8, ptr %33, i64 8
  %314 = getelementptr inbounds i8, ptr %36, i64 8
  %.sroa.297.0..sroa_idx = getelementptr inbounds i8, ptr %35, i64 8
  br label %320

315:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %45) #14
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %46, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #14
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %45, ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull %46)
          to label %496 unwind label %515

316:                                              ; preds = %301
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %529

318:                                              ; preds = %304
  %319 = landingpad { ptr, i32 }
          cleanup
  br label %528

320:                                              ; preds = %309, %490
  %.0186222 = phi i32 [ 0, %309 ], [ %491, %490 ]
  %321 = uitofp nneg i32 %.0186222 to float
  %322 = fmul float %321, 2.000000e+00
  %323 = fmul float %322, 0x400921FB60000000
  %324 = fdiv float %323, 9.900000e+01
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #14
  %325 = invoke noundef float @_ZN3JPH3CosEf(float noundef %324)
          to label %326 unwind label %466

326:                                              ; preds = %320
  %327 = invoke noundef float @_ZN3JPH3SinEf(float noundef %324)
          to label %328 unwind label %466

328:                                              ; preds = %326
  %329 = fneg float %325
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0.000000e+00, float noundef %329, float noundef %327)
          to label %330 unwind label %466

330:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %34) #14
  %331 = sub nsw i32 0, %.0186222
  %332 = sitofp i32 %331 to float
  %333 = fmul float %332, 2.000000e+01
  %334 = fdiv float %333, 9.900000e+01
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %34, float noundef %334, float noundef 2.000000e+01, float noundef 2.000000e+01)
          to label %335 unwind label %468

335:                                              ; preds = %330
  %.sroa.0104.0.copyload = load double, ptr %32, align 16
  %.sroa.2105.0.copyload = load double, ptr %.sroa.2105.0..sroa_idx, align 8, !tbaa !18
  %336 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 2.000000e+01, double %.sroa.0104.0.copyload, double %.sroa.2105.0.copyload)
          to label %337 unwind label %468

337:                                              ; preds = %335
  %338 = extractvalue { double, double } %336, 0
  %339 = extractvalue { double, double } %336, 1
  %340 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %338, double %339)
          to label %341 unwind label %468

341:                                              ; preds = %337
  %342 = extractvalue { double, double } %340, 0
  store double %342, ptr %33, align 16
  %343 = extractvalue { double, double } %340, 1
  store double %343, ptr %313, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %35) #14
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %35, float noundef 1.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %344 unwind label %470

344:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #14
  %.sroa.0100.0.copyload = load double, ptr %32, align 16
  %.sroa.2101.0.copyload = load double, ptr %.sroa.2105.0..sroa_idx, align 8, !tbaa !18
  %345 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 5.000000e-01, double %.sroa.0100.0.copyload, double %.sroa.2101.0.copyload)
          to label %346 unwind label %472

346:                                              ; preds = %344
  %347 = extractvalue { double, double } %345, 0
  %348 = extractvalue { double, double } %345, 1
  %349 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %347, double %348)
          to label %350 unwind label %472

350:                                              ; preds = %346
  %351 = extractvalue { double, double } %349, 0
  store double %351, ptr %36, align 16
  %352 = extractvalue { double, double } %349, 1
  store double %352, ptr %314, align 8
  %.not = icmp eq i32 %.0186222, 0
  br i1 %.not, label %490, label %353

353:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %37) #14
  %.sroa.096.0.copyload = load double, ptr %35, align 16
  %.sroa.297.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %354 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %.sroa.096.0.copyload, double %.sroa.297.0.copyload)
          to label %355 unwind label %474

355:                                              ; preds = %353
  %356 = extractvalue { double, double } %354, 0
  %357 = extractvalue { double, double } %354, 1
  %.sroa.092.0.copyload = load double, ptr %35, align 16
  %.sroa.293.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %358 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %.sroa.092.0.copyload, double %.sroa.293.0.copyload)
          to label %359 unwind label %474

359:                                              ; preds = %355
  %.sroa.088.0.copyload = load double, ptr %35, align 16
  %.sroa.289.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %360 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.088.0.copyload, double %.sroa.289.0.copyload)
          to label %361 unwind label %474

361:                                              ; preds = %359
  %362 = extractvalue { double, double } %358, 1
  %363 = extractvalue { double, double } %358, 0
  %364 = extractvalue { double, double } %360, 0
  %365 = extractvalue { double, double } %360, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %37, double %356, double %357, double %363, double %362, double %364, double %365, i32 noundef 0, i32 noundef 0)
          to label %366 unwind label %474

366:                                              ; preds = %361
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %37)
          to label %367 unwind label %474

367:                                              ; preds = %366
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %37) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %38) #14
  %.sroa.084.0.copyload = load double, ptr %35, align 16
  %.sroa.285.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %368 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %.sroa.084.0.copyload, double %.sroa.285.0.copyload)
          to label %369 unwind label %476

369:                                              ; preds = %367
  %370 = extractvalue { double, double } %368, 0
  %371 = extractvalue { double, double } %368, 1
  %.sroa.080.0.copyload = load double, ptr %35, align 16
  %.sroa.281.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %372 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.080.0.copyload, double %.sroa.281.0.copyload)
          to label %373 unwind label %476

373:                                              ; preds = %369
  %.sroa.076.0.copyload = load double, ptr %35, align 16
  %.sroa.277.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %374 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.076.0.copyload, double %.sroa.277.0.copyload)
          to label %375 unwind label %476

375:                                              ; preds = %373
  %376 = extractvalue { double, double } %372, 1
  %377 = extractvalue { double, double } %372, 0
  %378 = extractvalue { double, double } %374, 0
  %379 = extractvalue { double, double } %374, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %38, double %370, double %371, double %377, double %376, double %378, double %379, i32 noundef 0, i32 noundef 0)
          to label %380 unwind label %476

380:                                              ; preds = %375
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %38)
          to label %381 unwind label %476

381:                                              ; preds = %380
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %38) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %39) #14
  %.sroa.072.0.copyload = load double, ptr %35, align 16
  %.sroa.273.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %382 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.072.0.copyload, double %.sroa.273.0.copyload)
          to label %383 unwind label %478

383:                                              ; preds = %381
  %384 = extractvalue { double, double } %382, 0
  %385 = extractvalue { double, double } %382, 1
  %.sroa.068.0.copyload = load double, ptr %35, align 16
  %.sroa.269.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %386 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %.sroa.068.0.copyload, double %.sroa.269.0.copyload)
          to label %387 unwind label %478

387:                                              ; preds = %383
  %.sroa.064.0.copyload = load double, ptr %35, align 16
  %.sroa.265.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %388 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.064.0.copyload, double %.sroa.265.0.copyload)
          to label %389 unwind label %478

389:                                              ; preds = %387
  %390 = extractvalue { double, double } %386, 1
  %391 = extractvalue { double, double } %386, 0
  %392 = extractvalue { double, double } %388, 0
  %393 = extractvalue { double, double } %388, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %39, double %384, double %385, double %391, double %390, double %392, double %393, i32 noundef 0, i32 noundef 0)
          to label %394 unwind label %478

394:                                              ; preds = %389
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %39)
          to label %395 unwind label %478

395:                                              ; preds = %394
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %39) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %40) #14
  %.sroa.060.0.copyload = load double, ptr %35, align 16
  %.sroa.261.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %396 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.060.0.copyload, double %.sroa.261.0.copyload)
          to label %397 unwind label %480

397:                                              ; preds = %395
  %398 = extractvalue { double, double } %396, 0
  %399 = extractvalue { double, double } %396, 1
  %.sroa.056.0.copyload = load double, ptr %35, align 16
  %.sroa.257.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %400 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %.sroa.056.0.copyload, double %.sroa.257.0.copyload)
          to label %401 unwind label %480

401:                                              ; preds = %397
  %.sroa.052.0.copyload = load double, ptr %35, align 16
  %.sroa.253.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %402 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %.sroa.052.0.copyload, double %.sroa.253.0.copyload)
          to label %403 unwind label %480

403:                                              ; preds = %401
  %404 = extractvalue { double, double } %400, 1
  %405 = extractvalue { double, double } %400, 0
  %406 = extractvalue { double, double } %402, 0
  %407 = extractvalue { double, double } %402, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %40, double %398, double %399, double %405, double %404, double %406, double %407, i32 noundef 0, i32 noundef 0)
          to label %408 unwind label %480

408:                                              ; preds = %403
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %40)
          to label %409 unwind label %480

409:                                              ; preds = %408
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %40) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %41) #14
  %.sroa.048.0.copyload = load double, ptr %35, align 16
  %.sroa.249.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %410 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %.sroa.048.0.copyload, double %.sroa.249.0.copyload)
          to label %411 unwind label %482

411:                                              ; preds = %409
  %412 = extractvalue { double, double } %410, 0
  %413 = extractvalue { double, double } %410, 1
  %.sroa.044.0.copyload = load double, ptr %35, align 16
  %.sroa.245.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %414 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.044.0.copyload, double %.sroa.245.0.copyload)
          to label %415 unwind label %482

415:                                              ; preds = %411
  %.sroa.040.0.copyload = load double, ptr %35, align 16
  %.sroa.241.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %416 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.040.0.copyload, double %.sroa.241.0.copyload)
          to label %417 unwind label %482

417:                                              ; preds = %415
  %418 = extractvalue { double, double } %414, 1
  %419 = extractvalue { double, double } %414, 0
  %420 = extractvalue { double, double } %416, 0
  %421 = extractvalue { double, double } %416, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %41, double %412, double %413, double %419, double %418, double %420, double %421, i32 noundef 0, i32 noundef 0)
          to label %422 unwind label %482

422:                                              ; preds = %417
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %41)
          to label %423 unwind label %482

423:                                              ; preds = %422
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %41) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %42) #14
  %.sroa.036.0.copyload = load double, ptr %35, align 16
  %.sroa.237.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %424 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.036.0.copyload, double %.sroa.237.0.copyload)
          to label %425 unwind label %484

425:                                              ; preds = %423
  %426 = extractvalue { double, double } %424, 0
  %427 = extractvalue { double, double } %424, 1
  %.sroa.032.0.copyload = load double, ptr %35, align 16
  %.sroa.233.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %428 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.032.0.copyload, double %.sroa.233.0.copyload)
          to label %429 unwind label %484

429:                                              ; preds = %425
  %.sroa.028.0.copyload = load double, ptr %35, align 16
  %.sroa.229.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %430 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %.sroa.028.0.copyload, double %.sroa.229.0.copyload)
          to label %431 unwind label %484

431:                                              ; preds = %429
  %432 = extractvalue { double, double } %428, 1
  %433 = extractvalue { double, double } %428, 0
  %434 = extractvalue { double, double } %430, 0
  %435 = extractvalue { double, double } %430, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %42, double %426, double %427, double %433, double %432, double %434, double %435, i32 noundef 0, i32 noundef 0)
          to label %436 unwind label %484

436:                                              ; preds = %431
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %42)
          to label %437 unwind label %484

437:                                              ; preds = %436
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %42) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %43) #14
  %.sroa.024.0.copyload = load double, ptr %35, align 16
  %.sroa.225.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %438 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %30, double %.sroa.024.0.copyload, double %.sroa.225.0.copyload)
          to label %439 unwind label %486

439:                                              ; preds = %437
  %440 = extractvalue { double, double } %438, 0
  %441 = extractvalue { double, double } %438, 1
  %.sroa.020.0.copyload = load double, ptr %35, align 16
  %.sroa.221.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %442 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.020.0.copyload, double %.sroa.221.0.copyload)
          to label %443 unwind label %486

443:                                              ; preds = %439
  %.sroa.016.0.copyload = load double, ptr %35, align 16
  %.sroa.217.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %444 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.016.0.copyload, double %.sroa.217.0.copyload)
          to label %445 unwind label %486

445:                                              ; preds = %443
  %446 = extractvalue { double, double } %442, 1
  %447 = extractvalue { double, double } %442, 0
  %448 = extractvalue { double, double } %444, 0
  %449 = extractvalue { double, double } %444, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %43, double %440, double %441, double %447, double %446, double %448, double %449, i32 noundef 0, i32 noundef 0)
          to label %450 unwind label %486

450:                                              ; preds = %445
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %43)
          to label %451 unwind label %486

451:                                              ; preds = %450
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %43) #14
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %44) #14
  %.sroa.012.0.copyload = load double, ptr %35, align 16
  %.sroa.213.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %452 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %.sroa.012.0.copyload, double %.sroa.213.0.copyload)
          to label %453 unwind label %488

453:                                              ; preds = %451
  %454 = extractvalue { double, double } %452, 0
  %455 = extractvalue { double, double } %452, 1
  %.sroa.08.0.copyload = load double, ptr %35, align 16
  %.sroa.29.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %456 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %36, double %.sroa.08.0.copyload, double %.sroa.29.0.copyload)
          to label %457 unwind label %488

457:                                              ; preds = %453
  %.sroa.04.0.copyload = load double, ptr %35, align 16
  %.sroa.25.0.copyload = load double, ptr %.sroa.297.0..sroa_idx, align 8, !tbaa !18
  %458 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %.sroa.04.0.copyload, double %.sroa.25.0.copyload)
          to label %459 unwind label %488

459:                                              ; preds = %457
  %460 = extractvalue { double, double } %456, 1
  %461 = extractvalue { double, double } %456, 0
  %462 = extractvalue { double, double } %458, 0
  %463 = extractvalue { double, double } %458, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %44, double %454, double %455, double %461, double %460, double %462, double %463, i32 noundef 0, i32 noundef 0)
          to label %464 unwind label %488

464:                                              ; preds = %459
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %44)
          to label %465 unwind label %488

465:                                              ; preds = %464
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %44) #14
  br label %490

466:                                              ; preds = %328, %326, %320
  %467 = landingpad { ptr, i32 }
          cleanup
  br label %495

468:                                              ; preds = %337, %335, %330
  %469 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %34) #14
  br label %494

470:                                              ; preds = %341
  %471 = landingpad { ptr, i32 }
          cleanup
  br label %493

472:                                              ; preds = %346, %344
  %473 = landingpad { ptr, i32 }
          cleanup
  br label %492

474:                                              ; preds = %366, %361, %359, %355, %353
  %475 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %37) #14
  br label %492

476:                                              ; preds = %380, %375, %373, %369, %367
  %477 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %38) #14
  br label %492

478:                                              ; preds = %394, %389, %387, %383, %381
  %479 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %39) #14
  br label %492

480:                                              ; preds = %408, %403, %401, %397, %395
  %481 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %40) #14
  br label %492

482:                                              ; preds = %422, %417, %415, %411, %409
  %483 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %41) #14
  br label %492

484:                                              ; preds = %436, %431, %429, %425, %423
  %485 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %42) #14
  br label %492

486:                                              ; preds = %450, %445, %443, %439, %437
  %487 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %43) #14
  br label %492

488:                                              ; preds = %464, %459, %457, %453, %451
  %489 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %44) #14
  br label %492

490:                                              ; preds = %465, %350
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %30, ptr noundef nonnull align 16 dereferenceable(16) %33, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %31, ptr noundef nonnull align 16 dereferenceable(16) %36, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #14
  %491 = add nuw nsw i32 %.0186222, 1
  %exitcond.not = icmp eq i32 %491, 100
  br i1 %exitcond.not, label %315, label %320, !llvm.loop !20

492:                                              ; preds = %488, %486, %484, %482, %480, %478, %476, %474, %472
  %.pn192 = phi { ptr, i32 } [ %489, %488 ], [ %487, %486 ], [ %485, %484 ], [ %483, %482 ], [ %481, %480 ], [ %479, %478 ], [ %477, %476 ], [ %475, %474 ], [ %473, %472 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #14
  br label %493

493:                                              ; preds = %492, %470
  %.pn192.pn = phi { ptr, i32 } [ %.pn192, %492 ], [ %471, %470 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %35) #14
  br label %494

494:                                              ; preds = %493, %468
  %.pn192.pn.pn = phi { ptr, i32 } [ %.pn192.pn, %493 ], [ %469, %468 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #14
  br label %495

495:                                              ; preds = %494, %466
  %.pn192.pn.pn.pn = phi { ptr, i32 } [ %.pn192.pn.pn, %494 ], [ %467, %466 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #14
  br label %528

496:                                              ; preds = %315
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #14
  %497 = getelementptr inbounds i8, ptr %45, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %497)
          to label %498 unwind label %517

498:                                              ; preds = %496
  %499 = getelementptr inbounds i8, ptr %0, i64 24
  %500 = load ptr, ptr %499, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %47) #14
  %501 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %502 unwind label %519

502:                                              ; preds = %498
  %503 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %504 unwind label %519

504:                                              ; preds = %502
  %505 = extractvalue { double, double } %501, 1
  %506 = extractvalue { double, double } %501, 0
  %507 = extractvalue { double, double } %503, 0
  %508 = extractvalue { double, double } %503, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %47, ptr noundef nonnull %45, double %506, double %505, double %507, double %508, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %509 unwind label %519

509:                                              ; preds = %504
  %510 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %500, ptr noundef nonnull align 16 dereferenceable(256) %47)
          to label %511 unwind label %521

511:                                              ; preds = %509
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %47) #14
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %47) #14
  call void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122) %510, float noundef 1.000000e+00)
  %512 = load ptr, ptr %499, align 8, !tbaa !9
  %513 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %510)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %512, ptr noundef nonnull align 4 dereferenceable(4) %513, i32 noundef 0)
          to label %514 unwind label %524

514:                                              ; preds = %511
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %45) #14
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %45) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #14
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #14
  br label %530

515:                                              ; preds = %315
  %516 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #14
  br label %527

517:                                              ; preds = %496
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %526

519:                                              ; preds = %504, %502, %498
  %520 = landingpad { ptr, i32 }
          cleanup
  br label %523

521:                                              ; preds = %509
  %522 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %47) #14
  br label %523

523:                                              ; preds = %521, %519
  %.pn = phi { ptr, i32 } [ %522, %521 ], [ %520, %519 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %47) #14
  br label %526

524:                                              ; preds = %511
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %526

526:                                              ; preds = %523, %524, %517
  %.pn188.pn = phi { ptr, i32 } [ %518, %517 ], [ %525, %524 ], [ %.pn, %523 ]
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %45) #14
  br label %527

527:                                              ; preds = %526, %515
  %.pn188.pn.pn = phi { ptr, i32 } [ %.pn188.pn, %526 ], [ %516, %515 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %45) #14
  br label %528

528:                                              ; preds = %527, %495, %318
  %.pn192.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn192.pn.pn.pn, %495 ], [ %.pn188.pn.pn, %527 ], [ %319, %318 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #14
  br label %529

529:                                              ; preds = %528, %316
  %.pn192.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn192.pn.pn.pn.pn, %528 ], [ %317, %316 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #14
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #14
  br label %531

530:                                              ; preds = %143, %231, %296, %514, %298, %280, %184, %67
  ret void

531:                                              ; preds = %287, %292, %238, %243, %150, %160, %155, %529, %191, %74
  %.pn219.pn = phi { ptr, i32 } [ %.pn219, %74 ], [ %.pn209, %191 ], [ %.pn192.pn.pn.pn.pn.pn, %529 ], [ %.pn211, %150 ], [ %.pn215, %160 ], [ %.pn213, %155 ], [ %.pn206, %243 ], [ %.pn204, %238 ], [ %.pn201, %292 ], [ %.pn199, %287 ]
  resume { ptr, i32 } %.pn219.pn
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Body11SetFrictionEf(ptr noundef nonnull align 16 dereferenceable(122), float noundef) local_unnamed_addr #8 align 2

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11VehicleTest13LoadRaceTrackEPKc(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3SinEf(float noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #9

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3CosEf(float noundef) local_unnamed_addr #4

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

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

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

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #3

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

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

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

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44), double, double, double, double, double, double, i32 noundef, i32 noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #12

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

declare void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #11 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 = { "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 = { 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 #5 = { 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 #6 = { 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 #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #11 = { 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 #12 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { 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, !6, i64 24}
!10 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 56}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !13, i64 0}
!13 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !6, i64 48}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{i64 0, i64 16, !18}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,SROAPass,SimplifyCFGPass,TailCallElimPass