; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General/ActiveEdgesTest.ll (ZN15ActiveEdgesTest10InitializeEv)

; 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::Ref" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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.6", %"class.JPH::RefConst.7" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::Array" = 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.16", %"class.JPH::Array.19", %"class.JPH::Array.22", i32, float, i8, i32 }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.11, i8, [7 x i8] }>
%union.anon.11 = 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.15 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.15 = type { i64, [8 x i8] }
%"class.JPH::Array.16" = type { i64, i64, ptr }
%"class.JPH::Array.19" = type { i64, i64, ptr }
%"class.JPH::Array.22" = type { i64, i64, ptr }
%"class.JPH::BodyID" = type { i32 }
%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 }

; 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 @_ZN15ActiveEdgesTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca %"class.JPH::Ref", align 8
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.JPH::BodyCreationSettings", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Quat", align 16
  %12 = alloca %"class.JPH::Array", align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca float, align 4
  %24 = alloca %"class.JPH::Quat", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %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::Vec3", align 16
  %38 = alloca float, align 4
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Triangle", align 4
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Vec3", align 16
  %53 = alloca %"class.JPH::Triangle", align 4
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Triangle", align 4
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Triangle", align 4
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca %"class.JPH::Vec3", align 16
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca %"class.JPH::Vec3", align 16
  %72 = alloca ptr, align 8
  %73 = alloca %"class.JPH::Vec3", align 16
  %74 = alloca %"class.JPH::MeshShapeSettings", align 8
  %75 = alloca %"class.JPH::Array.22", align 8
  %76 = alloca %"class.JPH::BodyCreationSettings", align 16
  %77 = alloca %"class.JPH::Vec3", align 16
  %78 = alloca %"class.JPH::Quat", align 16
  %79 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %80 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #12
  store float 5.000000e+00, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #12
  store float 1.000000e+01, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #12
  %81 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %82 unwind label %123

82:                                               ; preds = %1
  %83 = getelementptr inbounds { double, double }, ptr %6, i32 0, i32 0
  %84 = load double, ptr %83, align 16
  %85 = getelementptr inbounds { double, double }, ptr %6, i32 0, i32 1
  %86 = load double, ptr %85, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %81, double %84, double %86, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %87 unwind label %123

87:                                               ; preds = %82
  call void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef %81)
  call void @llvm.lifetime.start.p0(i64 256, ptr %9) #12
  %88 = invoke noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %5)
          to label %89 unwind label %127

89:                                               ; preds = %87
  %90 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %91 unwind label %127

91:                                               ; preds = %89
  %92 = getelementptr inbounds %"class.JPH::Vec3", ptr %10, i32 0, i32 0
  %93 = getelementptr inbounds %union.anon, ptr %92, i32 0, i32 0
  %94 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %95 = extractvalue { double, double } %90, 0
  store double %95, ptr %94, align 16
  %96 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %97 = extractvalue { double, double } %90, 1
  store double %97, ptr %96, align 8
  %98 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %99 unwind label %127

99:                                               ; preds = %91
  %100 = getelementptr inbounds %"class.JPH::Quat", ptr %11, i32 0, i32 0
  %101 = getelementptr inbounds %"class.JPH::Vec4", ptr %100, i32 0, i32 0
  %102 = getelementptr inbounds %union.anon.4, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 0
  %104 = extractvalue { double, double } %98, 0
  store double %104, ptr %103, align 16
  %105 = getelementptr inbounds { double, double }, ptr %102, i32 0, i32 1
  %106 = extractvalue { double, double } %98, 1
  store double %106, ptr %105, align 8
  %107 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %108 = load double, ptr %107, align 16
  %109 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %110 = load double, ptr %109, align 8
  %111 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %112 = load double, ptr %111, align 16
  %113 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %114 = load double, ptr %113, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %9, ptr noundef %88, double %108, double %110, double %112, double %114, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %115 unwind label %127

115:                                              ; preds = %99
  %116 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %9, i32 0, i32 17
  store float 0.000000e+00, ptr %116, align 4, !tbaa !11
  %117 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %9, i32 0, i32 19
  store float 0.000000e+00, ptr %117, align 4, !tbaa !30
  %118 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %9, i32 0, i32 16
  store i8 0, ptr %118, align 1, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #12
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  store i32 -90, ptr %13, align 4, !tbaa !32
  br label %119

119:                                              ; preds = %587, %115
  %120 = load i32, ptr %13, align 4, !tbaa !32
  %121 = icmp sle i32 %120, 90
  br i1 %121, label %131, label %122

122:                                              ; preds = %119
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  br label %593

123:                                              ; preds = %82, %1
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %7, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %8, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %81) #12
  br label %655

127:                                              ; preds = %99, %91, %89, %87
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %7, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %8, align 4
  br label %654

131:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #12
  %132 = load i32, ptr %13, align 4, !tbaa !32
  %133 = icmp slt i32 %132, 0
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #12
  br i1 %133, label %134, label %144

134:                                              ; preds = %131
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef -1.000000e+00)
          to label %135 unwind label %165

135:                                              ; preds = %134
  %136 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %16)
          to label %137 unwind label %165

137:                                              ; preds = %135
  %138 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i32 0, i32 0
  %139 = getelementptr inbounds %union.anon, ptr %138, i32 0, i32 0
  %140 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 0
  %141 = extractvalue { double, double } %136, 0
  store double %141, ptr %140, align 16
  %142 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 1
  %143 = extractvalue { double, double } %136, 1
  store double %143, ptr %142, align 8
  br label %146

144:                                              ; preds = %131
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %145 unwind label %165

145:                                              ; preds = %144
  br label %146

146:                                              ; preds = %145, %137
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #12
  store float 0xC7EFFFFFE0000000, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #12
  %147 = load i32, ptr %13, align 4, !tbaa !32
  %148 = sitofp i32 %147 to float
  %149 = fmul float 5.000000e+00, %148
  store float %149, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #12
  %150 = load float, ptr %18, align 4, !tbaa !9
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef %150, float noundef 0.000000e+00, float noundef -5.000000e+00)
          to label %151 unwind label %169

151:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #12
  %152 = load float, ptr %18, align 4, !tbaa !9
  %153 = fadd float %152, 5.000000e+00
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef %153, float noundef 0.000000e+00, float noundef -5.000000e+00)
          to label %154 unwind label %173

154:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #12
  store i32 0, ptr %21, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #12
  store i32 0, ptr %22, align 4, !tbaa !32
  br label %155

155:                                              ; preds = %548, %154
  %156 = load i32, ptr %21, align 4, !tbaa !32
  %157 = call i32 @llvm.abs.i32(i32 %156, i1 true)
  %158 = icmp sle i32 %157, 90
  br i1 %158, label %159, label %162

159:                                              ; preds = %155
  %160 = load i32, ptr %22, align 4, !tbaa !32
  %161 = icmp slt i32 %160, 90
  br label %162

162:                                              ; preds = %159, %155
  %163 = phi i1 [ false, %155 ], [ %161, %159 ]
  br i1 %163, label %177, label %164

164:                                              ; preds = %162
  store i32 5, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #12
  br label %561

165:                                              ; preds = %144, %135, %134
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %7, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #12
  br label %592

169:                                              ; preds = %146
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %7, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %8, align 4
  br label %591

173:                                              ; preds = %151
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %7, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %8, align 4
  br label %590

177:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #12
  %178 = load i32, ptr %21, align 4, !tbaa !32
  %179 = sitofp i32 %178 to float
  %180 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef %179)
          to label %181 unwind label %361

181:                                              ; preds = %177
  store float %180, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #12
  %182 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %183 unwind label %365

183:                                              ; preds = %181
  %184 = getelementptr inbounds %"class.JPH::Vec3", ptr %25, i32 0, i32 0
  %185 = getelementptr inbounds %union.anon, ptr %184, i32 0, i32 0
  %186 = getelementptr inbounds { double, double }, ptr %185, i32 0, i32 0
  %187 = extractvalue { double, double } %182, 0
  store double %187, ptr %186, align 16
  %188 = getelementptr inbounds { double, double }, ptr %185, i32 0, i32 1
  %189 = extractvalue { double, double } %182, 1
  store double %189, ptr %188, align 8
  %190 = load float, ptr %23, align 4, !tbaa !9
  %191 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %192 = load double, ptr %191, align 16
  %193 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %194 = load double, ptr %193, align 8
  %195 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %192, double %194, float noundef %190)
          to label %196 unwind label %365

196:                                              ; preds = %183
  %197 = getelementptr inbounds %"class.JPH::Quat", ptr %24, i32 0, i32 0
  %198 = getelementptr inbounds %"class.JPH::Vec4", ptr %197, i32 0, i32 0
  %199 = getelementptr inbounds %union.anon.4, ptr %198, i32 0, i32 0
  %200 = getelementptr inbounds { double, double }, ptr %199, i32 0, i32 0
  %201 = extractvalue { double, double } %195, 0
  store double %201, ptr %200, align 16
  %202 = getelementptr inbounds { double, double }, ptr %199, i32 0, i32 1
  %203 = extractvalue { double, double } %195, 1
  store double %203, ptr %202, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #12
  %204 = invoke { double, double } @_ZNK3JPH4Quat11RotateAxisZEv(ptr noundef nonnull align 16 dereferenceable(16) %24)
          to label %205 unwind label %369

205:                                              ; preds = %196
  %206 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %207 = getelementptr inbounds %union.anon, ptr %206, i32 0, i32 0
  %208 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 0
  %209 = extractvalue { double, double } %204, 0
  store double %209, ptr %208, align 16
  %210 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 1
  %211 = extractvalue { double, double } %204, 1
  store double %211, ptr %210, align 8
  %212 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %213 = load double, ptr %212, align 16
  %214 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %215 = load double, ptr %214, align 8
  %216 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 1.000000e+01, double %213, double %215)
          to label %217 unwind label %369

217:                                              ; preds = %205
  %218 = getelementptr inbounds %"class.JPH::Vec3", ptr %26, i32 0, i32 0
  %219 = getelementptr inbounds %union.anon, ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds { double, double }, ptr %219, i32 0, i32 0
  %221 = extractvalue { double, double } %216, 0
  store double %221, ptr %220, align 16
  %222 = getelementptr inbounds { double, double }, ptr %219, i32 0, i32 1
  %223 = extractvalue { double, double } %216, 1
  store double %223, ptr %222, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %29, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !33
  %224 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %225 = load double, ptr %224, align 16
  %226 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %227 = load double, ptr %226, align 8
  %228 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %19, double %225, double %227)
          to label %229 unwind label %373

229:                                              ; preds = %217
  %230 = getelementptr inbounds %"class.JPH::Vec3", ptr %28, i32 0, i32 0
  %231 = getelementptr inbounds %union.anon, ptr %230, i32 0, i32 0
  %232 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 0
  %233 = extractvalue { double, double } %228, 0
  store double %233, ptr %232, align 16
  %234 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 1
  %235 = extractvalue { double, double } %228, 1
  store double %235, ptr %234, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !33
  %236 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %237 = load double, ptr %236, align 16
  %238 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %239 = load double, ptr %238, align 8
  %240 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %237, double %239)
          to label %241 unwind label %377

241:                                              ; preds = %229
  %242 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %243 = getelementptr inbounds %union.anon, ptr %242, i32 0, i32 0
  %244 = getelementptr inbounds { double, double }, ptr %243, i32 0, i32 0
  %245 = extractvalue { double, double } %240, 0
  store double %245, ptr %244, align 16
  %246 = getelementptr inbounds { double, double }, ptr %243, i32 0, i32 1
  %247 = extractvalue { double, double } %240, 1
  store double %247, ptr %246, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  %248 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %249 = load double, ptr %248, align 16
  %250 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %251 = load double, ptr %250, align 8
  %252 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %28, double %249, double %251)
          to label %253 unwind label %381

253:                                              ; preds = %241
  %254 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %255 = getelementptr inbounds %union.anon, ptr %254, i32 0, i32 0
  %256 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 0
  %257 = extractvalue { double, double } %252, 0
  store double %257, ptr %256, align 16
  %258 = getelementptr inbounds { double, double }, ptr %255, i32 0, i32 1
  %259 = extractvalue { double, double } %252, 1
  store double %259, ptr %258, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %37, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  %260 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %261 = load double, ptr %260, align 16
  %262 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %263 = load double, ptr %262, align 8
  %264 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %261, double %263)
          to label %265 unwind label %381

265:                                              ; preds = %253
  %266 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %267 = getelementptr inbounds %union.anon, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 0
  %269 = extractvalue { double, double } %264, 0
  store double %269, ptr %268, align 16
  %270 = getelementptr inbounds { double, double }, ptr %267, i32 0, i32 1
  %271 = extractvalue { double, double } %264, 1
  store double %271, ptr %270, align 8
  %272 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %273 = load double, ptr %272, align 16
  %274 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %275 = load double, ptr %274, align 8
  %276 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %273, double %275)
          to label %277 unwind label %381

277:                                              ; preds = %265
  %278 = getelementptr inbounds %"class.JPH::Vec3", ptr %33, i32 0, i32 0
  %279 = getelementptr inbounds %union.anon, ptr %278, i32 0, i32 0
  %280 = getelementptr inbounds { double, double }, ptr %279, i32 0, i32 0
  %281 = extractvalue { double, double } %276, 0
  store double %281, ptr %280, align 16
  %282 = getelementptr inbounds { double, double }, ptr %279, i32 0, i32 1
  %283 = extractvalue { double, double } %276, 1
  store double %283, ptr %282, align 8
  %284 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %33)
          to label %285 unwind label %381

285:                                              ; preds = %277
  %286 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %287 = getelementptr inbounds %union.anon, ptr %286, i32 0, i32 0
  %288 = getelementptr inbounds { double, double }, ptr %287, i32 0, i32 0
  %289 = extractvalue { double, double } %284, 0
  store double %289, ptr %288, align 16
  %290 = getelementptr inbounds { double, double }, ptr %287, i32 0, i32 1
  %291 = extractvalue { double, double } %284, 1
  store double %291, ptr %290, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %39, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !33
  %292 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %293 = load double, ptr %292, align 16
  %294 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %295 = load double, ptr %294, align 8
  %296 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %32, double %293, double %295)
          to label %297 unwind label %385

297:                                              ; preds = %285
  store float %296, ptr %38, align 4, !tbaa !9
  %298 = load float, ptr %38, align 4, !tbaa !9
  %299 = load float, ptr %17, align 4, !tbaa !9
  %300 = fcmp ogt float %298, %299
  br i1 %300, label %301, label %393

301:                                              ; preds = %297
  %302 = load float, ptr %38, align 4, !tbaa !9
  store float %302, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %45, ptr align 16 %20, i64 16, i1 false), !tbaa.struct !33
  %303 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %304 = load double, ptr %303, align 16
  %305 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %306 = load double, ptr %305, align 8
  %307 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %19, double %304, double %306)
          to label %308 unwind label %389

308:                                              ; preds = %301
  %309 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %310 = getelementptr inbounds %union.anon, ptr %309, i32 0, i32 0
  %311 = getelementptr inbounds { double, double }, ptr %310, i32 0, i32 0
  %312 = extractvalue { double, double } %307, 0
  store double %312, ptr %311, align 16
  %313 = getelementptr inbounds { double, double }, ptr %310, i32 0, i32 1
  %314 = extractvalue { double, double } %307, 1
  store double %314, ptr %313, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %46, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !33
  %315 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %316 = load double, ptr %315, align 16
  %317 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %318 = load double, ptr %317, align 8
  %319 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %44, double %316, double %318)
          to label %320 unwind label %389

320:                                              ; preds = %308
  %321 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %322 = getelementptr inbounds %union.anon, ptr %321, i32 0, i32 0
  %323 = getelementptr inbounds { double, double }, ptr %322, i32 0, i32 0
  %324 = extractvalue { double, double } %319, 0
  store double %324, ptr %323, align 16
  %325 = getelementptr inbounds { double, double }, ptr %322, i32 0, i32 1
  %326 = extractvalue { double, double } %319, 1
  store double %326, ptr %325, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  %327 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %328 = load double, ptr %327, align 16
  %329 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %330 = load double, ptr %329, align 8
  %331 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %43, double %328, double %330)
          to label %332 unwind label %389

332:                                              ; preds = %320
  %333 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %334 = getelementptr inbounds %union.anon, ptr %333, i32 0, i32 0
  %335 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 0
  %336 = extractvalue { double, double } %331, 0
  store double %336, ptr %335, align 16
  %337 = getelementptr inbounds { double, double }, ptr %334, i32 0, i32 1
  %338 = extractvalue { double, double } %331, 1
  store double %338, ptr %337, align 8
  %339 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %42, float noundef 4.000000e+00)
          to label %340 unwind label %389

340:                                              ; preds = %332
  %341 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %342 = getelementptr inbounds %union.anon, ptr %341, i32 0, i32 0
  %343 = getelementptr inbounds { double, double }, ptr %342, i32 0, i32 0
  %344 = extractvalue { double, double } %339, 0
  store double %344, ptr %343, align 16
  %345 = getelementptr inbounds { double, double }, ptr %342, i32 0, i32 1
  %346 = extractvalue { double, double } %339, 1
  store double %346, ptr %345, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %48, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !33
  %347 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %348 = load double, ptr %347, align 16
  %349 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %350 = load double, ptr %349, align 8
  %351 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %41, double %348, double %350)
          to label %352 unwind label %389

352:                                              ; preds = %340
  %353 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %354 = getelementptr inbounds %union.anon, ptr %353, i32 0, i32 0
  %355 = getelementptr inbounds { double, double }, ptr %354, i32 0, i32 0
  %356 = extractvalue { double, double } %351, 0
  store double %356, ptr %355, align 16
  %357 = getelementptr inbounds { double, double }, ptr %354, i32 0, i32 1
  %358 = extractvalue { double, double } %351, 1
  store double %358, ptr %357, align 8
  %359 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %9, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %359, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #12
  %360 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %9, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %360, ptr align 16 %24, i64 16, i1 false), !tbaa.struct !33
  br label %393

361:                                              ; preds = %177
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %7, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %8, align 4
  br label %560

365:                                              ; preds = %183, %181
  %366 = landingpad { ptr, i32 }
          cleanup
  %367 = extractvalue { ptr, i32 } %366, 0
  store ptr %367, ptr %7, align 8
  %368 = extractvalue { ptr, i32 } %366, 1
  store i32 %368, ptr %8, align 4
  br label %559

369:                                              ; preds = %205, %196
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %7, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %8, align 4
  br label %558

373:                                              ; preds = %217
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %7, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %8, align 4
  br label %557

377:                                              ; preds = %229
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %7, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %8, align 4
  br label %556

381:                                              ; preds = %277, %265, %253, %241
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %7, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #12
  br label %555

385:                                              ; preds = %285
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %7, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %8, align 4
  br label %554

389:                                              ; preds = %340, %332, %320, %308, %301
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %7, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #12
  br label %554

393:                                              ; preds = %352, %297
  call void @llvm.lifetime.start.p0(i64 44, ptr %49) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %52, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  %394 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %395 = load double, ptr %394, align 16
  %396 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %397 = load double, ptr %396, align 8
  %398 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %399 = load double, ptr %398, align 16
  %400 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %401 = load double, ptr %400, align 8
  %402 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %403 = load double, ptr %402, align 16
  %404 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  %405 = load double, ptr %404, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %49, double %395, double %397, double %399, double %401, double %403, double %405, i32 noundef 0, i32 noundef 0)
          to label %406 unwind label %526

406:                                              ; preds = %393
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(44) %49)
          to label %407 unwind label %526

407:                                              ; preds = %406
  call void @llvm.lifetime.end.p0(i64 44, ptr %49) #12
  call void @llvm.lifetime.start.p0(i64 44, ptr %53) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %20, i64 16, i1 false), !tbaa.struct !33
  %408 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %409 = load double, ptr %408, align 16
  %410 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %411 = load double, ptr %410, align 8
  %412 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %413 = load double, ptr %412, align 16
  %414 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %415 = load double, ptr %414, align 8
  %416 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %417 = load double, ptr %416, align 16
  %418 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %419 = load double, ptr %418, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %53, double %409, double %411, double %413, double %415, double %417, double %419, i32 noundef 0, i32 noundef 0)
          to label %420 unwind label %530

420:                                              ; preds = %407
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(44) %53)
          to label %421 unwind label %530

421:                                              ; preds = %420
  call void @llvm.lifetime.end.p0(i64 44, ptr %53) #12
  %422 = load i32, ptr %22, align 4, !tbaa !32
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %424, label %547

424:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #12
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %57, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef -1.000000e+00)
          to label %425 unwind label %534

425:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 44, ptr %58) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  %426 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %427 = load double, ptr %426, align 16
  %428 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %429 = load double, ptr %428, align 8
  %430 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %427, double %429)
          to label %431 unwind label %538

431:                                              ; preds = %425
  %432 = getelementptr inbounds %"class.JPH::Vec3", ptr %59, i32 0, i32 0
  %433 = getelementptr inbounds %union.anon, ptr %432, i32 0, i32 0
  %434 = getelementptr inbounds { double, double }, ptr %433, i32 0, i32 0
  %435 = extractvalue { double, double } %430, 0
  store double %435, ptr %434, align 16
  %436 = getelementptr inbounds { double, double }, ptr %433, i32 0, i32 1
  %437 = extractvalue { double, double } %430, 1
  store double %437, ptr %436, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  %438 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %439 = load double, ptr %438, align 16
  %440 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %441 = load double, ptr %440, align 8
  %442 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %439, double %441)
          to label %443 unwind label %538

443:                                              ; preds = %431
  %444 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %445 = getelementptr inbounds %union.anon, ptr %444, i32 0, i32 0
  %446 = getelementptr inbounds { double, double }, ptr %445, i32 0, i32 0
  %447 = extractvalue { double, double } %442, 0
  store double %447, ptr %446, align 16
  %448 = getelementptr inbounds { double, double }, ptr %445, i32 0, i32 1
  %449 = extractvalue { double, double } %442, 1
  store double %449, ptr %448, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %64, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !33
  %450 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 0
  %451 = load double, ptr %450, align 16
  %452 = getelementptr inbounds { double, double }, ptr %64, i32 0, i32 1
  %453 = load double, ptr %452, align 8
  %454 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %451, double %453)
          to label %455 unwind label %538

455:                                              ; preds = %443
  %456 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %457 = getelementptr inbounds %union.anon, ptr %456, i32 0, i32 0
  %458 = getelementptr inbounds { double, double }, ptr %457, i32 0, i32 0
  %459 = extractvalue { double, double } %454, 0
  store double %459, ptr %458, align 16
  %460 = getelementptr inbounds { double, double }, ptr %457, i32 0, i32 1
  %461 = extractvalue { double, double } %454, 1
  store double %461, ptr %460, align 8
  %462 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %463 = load double, ptr %462, align 16
  %464 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %465 = load double, ptr %464, align 8
  %466 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 0
  %467 = load double, ptr %466, align 16
  %468 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 1
  %469 = load double, ptr %468, align 8
  %470 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 0
  %471 = load double, ptr %470, align 16
  %472 = getelementptr inbounds { double, double }, ptr %63, i32 0, i32 1
  %473 = load double, ptr %472, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %58, double %463, double %465, double %467, double %469, double %471, double %473, i32 noundef 0, i32 noundef 0)
          to label %474 unwind label %538

474:                                              ; preds = %455
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(44) %58)
          to label %475 unwind label %538

475:                                              ; preds = %474
  call void @llvm.lifetime.end.p0(i64 44, ptr %58) #12
  call void @llvm.lifetime.start.p0(i64 44, ptr %65) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %67, ptr align 16 %19, i64 16, i1 false), !tbaa.struct !33
  %476 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 0
  %477 = load double, ptr %476, align 16
  %478 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 1
  %479 = load double, ptr %478, align 8
  %480 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %477, double %479)
          to label %481 unwind label %542

481:                                              ; preds = %475
  %482 = getelementptr inbounds %"class.JPH::Vec3", ptr %66, i32 0, i32 0
  %483 = getelementptr inbounds %union.anon, ptr %482, i32 0, i32 0
  %484 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 0
  %485 = extractvalue { double, double } %480, 0
  store double %485, ptr %484, align 16
  %486 = getelementptr inbounds { double, double }, ptr %483, i32 0, i32 1
  %487 = extractvalue { double, double } %480, 1
  store double %487, ptr %486, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %69, ptr align 16 %20, i64 16, i1 false), !tbaa.struct !33
  %488 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 0
  %489 = load double, ptr %488, align 16
  %490 = getelementptr inbounds { double, double }, ptr %69, i32 0, i32 1
  %491 = load double, ptr %490, align 8
  %492 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %489, double %491)
          to label %493 unwind label %542

493:                                              ; preds = %481
  %494 = getelementptr inbounds %"class.JPH::Vec3", ptr %68, i32 0, i32 0
  %495 = getelementptr inbounds %union.anon, ptr %494, i32 0, i32 0
  %496 = getelementptr inbounds { double, double }, ptr %495, i32 0, i32 0
  %497 = extractvalue { double, double } %492, 0
  store double %497, ptr %496, align 16
  %498 = getelementptr inbounds { double, double }, ptr %495, i32 0, i32 1
  %499 = extractvalue { double, double } %492, 1
  store double %499, ptr %498, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %71, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  %500 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 0
  %501 = load double, ptr %500, align 16
  %502 = getelementptr inbounds { double, double }, ptr %71, i32 0, i32 1
  %503 = load double, ptr %502, align 8
  %504 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %57, double %501, double %503)
          to label %505 unwind label %542

505:                                              ; preds = %493
  %506 = getelementptr inbounds %"class.JPH::Vec3", ptr %70, i32 0, i32 0
  %507 = getelementptr inbounds %union.anon, ptr %506, i32 0, i32 0
  %508 = getelementptr inbounds { double, double }, ptr %507, i32 0, i32 0
  %509 = extractvalue { double, double } %504, 0
  store double %509, ptr %508, align 16
  %510 = getelementptr inbounds { double, double }, ptr %507, i32 0, i32 1
  %511 = extractvalue { double, double } %504, 1
  store double %511, ptr %510, align 8
  %512 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %513 = load double, ptr %512, align 16
  %514 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %515 = load double, ptr %514, align 8
  %516 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %517 = load double, ptr %516, align 16
  %518 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %519 = load double, ptr %518, align 8
  %520 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %521 = load double, ptr %520, align 16
  %522 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %523 = load double, ptr %522, align 8
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %65, double %513, double %515, double %517, double %519, double %521, double %523, i32 noundef 0, i32 noundef 0)
          to label %524 unwind label %542

524:                                              ; preds = %505
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(44) %65)
          to label %525 unwind label %542

525:                                              ; preds = %524
  call void @llvm.lifetime.end.p0(i64 44, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #12
  br label %547

526:                                              ; preds = %406, %393
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %7, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %49) #12
  br label %554

530:                                              ; preds = %420, %407
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %7, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %53) #12
  br label %554

534:                                              ; preds = %424
  %535 = landingpad { ptr, i32 }
          cleanup
  %536 = extractvalue { ptr, i32 } %535, 0
  store ptr %536, ptr %7, align 8
  %537 = extractvalue { ptr, i32 } %535, 1
  store i32 %537, ptr %8, align 4
  br label %546

538:                                              ; preds = %474, %455, %443, %431, %425
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %7, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %58) #12
  br label %546

542:                                              ; preds = %524, %505, %493, %481, %475
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %7, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %65) #12
  br label %546

546:                                              ; preds = %542, %538, %534
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #12
  br label %554

547:                                              ; preds = %525, %421
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %19, ptr align 16 %28, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %20, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %13, align 4, !tbaa !32
  %550 = load i32, ptr %21, align 4, !tbaa !32
  %551 = add nsw i32 %550, %549
  store i32 %551, ptr %21, align 4, !tbaa !32
  %552 = load i32, ptr %22, align 4, !tbaa !32
  %553 = add nsw i32 %552, 1
  store i32 %553, ptr %22, align 4, !tbaa !32
  br label %155, !llvm.loop !35

554:                                              ; preds = %546, %530, %526, %389, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %555

555:                                              ; preds = %554, %381
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #12
  br label %556

556:                                              ; preds = %555, %377
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #12
  br label %557

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

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

559:                                              ; preds = %558, %365
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #12
  br label %560

560:                                              ; preds = %559, %361
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #12
  br label %590

561:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #12
  %562 = getelementptr inbounds %class.Test, ptr %80, i32 0, i32 3
  %563 = load ptr, ptr %562, align 8, !tbaa !37
  %564 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %563, ptr noundef nonnull align 16 dereferenceable(256) %9)
          to label %565 unwind label %582

565:                                              ; preds = %561
  store ptr %564, ptr %72, align 8, !tbaa !5
  %566 = getelementptr inbounds %class.Test, ptr %80, i32 0, i32 3
  %567 = load ptr, ptr %566, align 8, !tbaa !37
  %568 = load ptr, ptr %72, align 8, !tbaa !5
  %569 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %568)
          to label %570 unwind label %582

570:                                              ; preds = %565
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %567, ptr noundef nonnull align 4 dereferenceable(4) %569, i32 noundef 0)
          to label %571 unwind label %582

571:                                              ; preds = %570
  %572 = load i32, ptr %13, align 4, !tbaa !32
  %573 = icmp sge i32 %572, 0
  br i1 %573, label %574, label %586

574:                                              ; preds = %571
  %575 = load ptr, ptr %72, align 8, !tbaa !5
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %73, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 2.000000e+00)
          to label %576 unwind label %582

576:                                              ; preds = %574
  %577 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %578 = load double, ptr %577, align 16
  %579 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %580 = load double, ptr %579, align 8
  invoke void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %575, double %578, double %580)
          to label %581 unwind label %582

581:                                              ; preds = %576
  br label %586

582:                                              ; preds = %576, %574, %570, %565, %561
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %7, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #12
  br label %590

586:                                              ; preds = %581, %571
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #12
  br label %587

587:                                              ; preds = %586
  %588 = load i32, ptr %13, align 4, !tbaa !32
  %589 = add nsw i32 %588, 1
  store i32 %589, ptr %13, align 4, !tbaa !32
  br label %119, !llvm.loop !43

590:                                              ; preds = %582, %560, %173
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #12
  br label %591

591:                                              ; preds = %590, %169
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #12
  br label %592

592:                                              ; preds = %591, %165
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  br label %653

593:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 152, ptr %74) #12
  call void @llvm.memset.p0.i64(ptr align 8 %75, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #12
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %74, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef %75)
          to label %594 unwind label %634

594:                                              ; preds = %593
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #12
  %595 = getelementptr inbounds i8, ptr %74, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %595)
          to label %596 unwind label %638

596:                                              ; preds = %594
  %597 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 5.000000e+01)
          to label %598 unwind label %638

598:                                              ; preds = %596
  %599 = invoke noundef float @_ZN3JPH3CosEf(float noundef %597)
          to label %600 unwind label %638

600:                                              ; preds = %598
  %601 = getelementptr inbounds %"class.JPH::MeshShapeSettings", ptr %74, i32 0, i32 5
  store float %599, ptr %601, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 256, ptr %76) #12
  %602 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %603 unwind label %642

603:                                              ; preds = %600
  %604 = getelementptr inbounds %"class.JPH::Vec3", ptr %77, i32 0, i32 0
  %605 = getelementptr inbounds %union.anon, ptr %604, i32 0, i32 0
  %606 = getelementptr inbounds { double, double }, ptr %605, i32 0, i32 0
  %607 = extractvalue { double, double } %602, 0
  store double %607, ptr %606, align 16
  %608 = getelementptr inbounds { double, double }, ptr %605, i32 0, i32 1
  %609 = extractvalue { double, double } %602, 1
  store double %609, ptr %608, align 8
  %610 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %611 unwind label %642

611:                                              ; preds = %603
  %612 = getelementptr inbounds %"class.JPH::Quat", ptr %78, i32 0, i32 0
  %613 = getelementptr inbounds %"class.JPH::Vec4", ptr %612, i32 0, i32 0
  %614 = getelementptr inbounds %union.anon.4, ptr %613, i32 0, i32 0
  %615 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 0
  %616 = extractvalue { double, double } %610, 0
  store double %616, ptr %615, align 16
  %617 = getelementptr inbounds { double, double }, ptr %614, i32 0, i32 1
  %618 = extractvalue { double, double } %610, 1
  store double %618, ptr %617, align 8
  %619 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %620 = load double, ptr %619, align 16
  %621 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %622 = load double, ptr %621, align 8
  %623 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 0
  %624 = load double, ptr %623, align 16
  %625 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 1
  %626 = load double, ptr %625, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %76, ptr noundef %74, double %620, double %622, double %624, double %626, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %627 unwind label %642

627:                                              ; preds = %611
  %628 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %76, i32 0, i32 17
  store float 0.000000e+00, ptr %628, align 4, !tbaa !11
  %629 = getelementptr inbounds %class.Test, ptr %80, i32 0, i32 3
  %630 = load ptr, ptr %629, align 8, !tbaa !37
  %631 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %630, ptr noundef nonnull align 16 dereferenceable(256) %76, i32 noundef 1)
          to label %632 unwind label %646

632:                                              ; preds = %627
  %633 = getelementptr inbounds %"class.JPH::BodyID", ptr %79, i32 0, i32 0
  store i32 %631, ptr %633, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %76) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr %76) #12
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %74) #12
  call void @llvm.lifetime.end.p0(i64 152, ptr %74) #12
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #12
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %9) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr %9) #12
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #12
  ret void

634:                                              ; preds = %593
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %7, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %8, align 4
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #12
  br label %652

638:                                              ; preds = %598, %596, %594
  %639 = landingpad { ptr, i32 }
          cleanup
  %640 = extractvalue { ptr, i32 } %639, 0
  store ptr %640, ptr %7, align 8
  %641 = extractvalue { ptr, i32 } %639, 1
  store i32 %641, ptr %8, align 4
  br label %651

642:                                              ; preds = %611, %603, %600
  %643 = landingpad { ptr, i32 }
          cleanup
  %644 = extractvalue { ptr, i32 } %643, 0
  store ptr %644, ptr %7, align 8
  %645 = extractvalue { ptr, i32 } %643, 1
  store i32 %645, ptr %8, align 4
  br label %650

646:                                              ; preds = %627
  %647 = landingpad { ptr, i32 }
          cleanup
  %648 = extractvalue { ptr, i32 } %647, 0
  store ptr %648, ptr %7, align 8
  %649 = extractvalue { ptr, i32 } %647, 1
  store i32 %649, ptr %8, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %76) #12
  br label %650

650:                                              ; preds = %646, %642
  call void @llvm.lifetime.end.p0(i64 256, ptr %76) #12
  br label %651

651:                                              ; preds = %650, %638
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %74) #12
  br label %652

652:                                              ; preds = %651, %634
  call void @llvm.lifetime.end.p0(i64 152, ptr %74) #12
  br label %653

653:                                              ; preds = %652, %592
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #12
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %9) #12
  br label %654

654:                                              ; preds = %653, %127
  call void @llvm.lifetime.end.p0(i64 256, ptr %9) #12
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #12
  br label %655

655:                                              ; preds = %654, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #12
  br label %656

656:                                              ; preds = %655
  %657 = load ptr, ptr %7, align 8
  %658 = load i32, ptr %8, align 4
  %659 = insertvalue { ptr, i32 } poison, ptr %657, 0
  %660 = insertvalue { ptr, i32 } %659, i32 %658, 1
  resume { ptr, i32 } %660
}

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #2 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 #3 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) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #5 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() #2 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: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #8

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

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

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

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

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

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

; 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) #9

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

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

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

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

; 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)) #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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122), double, double) #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) #11

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 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 #10

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3CosEf(float noundef) #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

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) #10

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #6 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 #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 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 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { "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 #11 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !10, i64 108}
!12 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !13, i64 0, !14, i64 16, !13, i64 32, !13, i64 48, !16, i64 64, !17, i64 72, !18, i64 80, !21, i64 96, !22, i64 97, !23, i64 98, !23, i64 99, !23, i64 100, !23, i64 101, !23, i64 102, !24, i64 103, !23, i64 104, !23, i64 105, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !20, i64 136, !20, i64 140, !25, i64 144, !10, i64 148, !26, i64 160, !28, i64 240, !29, i64 248}
!13 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!14 = !{!"_ZTSN3JPH4QuatE", !15, i64 0}
!15 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = !{!"_ZTSN3JPH14CollisionGroupE", !19, i64 0, !20, i64 8, !20, i64 12}
!19 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!20 = !{!"int", !7, i64 0}
!21 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!22 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!23 = !{!"bool", !7, i64 0}
!24 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!25 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!26 = !{!"_ZTSN3JPH14MassPropertiesE", !10, i64 0, !27, i64 16}
!27 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!28 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!29 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!30 = !{!12, !10, i64 116}
!31 = !{!12, !23, i64 105}
!32 = !{!20, !20, i64 0}
!33 = !{i64 0, i64 16, !34}
!34 = !{!7, !7, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!38, !6, i64 24}
!38 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !23, i64 48, !39, i64 56}
!39 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !40, i64 0}
!40 = !{!"_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, !16, i64 8, !41, i64 16, !16, i64 24, !42, i64 32, !6, i64 48}
!41 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!42 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !10, i64 0, !16, i64 8}
!43 = distinct !{!43, !36}
!44 = !{!45, !10, i64 140}
!45 = !{!"_ZTSN3JPH17MeshShapeSettingsE", !46, i64 0, !53, i64 64, !54, i64 88, !55, i64 112, !20, i64 136, !10, i64 140, !23, i64 144, !56, i64 148}
!46 = !{!"_ZTSN3JPH13ShapeSettingsE", !47, i64 0, !48, i64 8, !16, i64 16, !51, i64 24}
!47 = !{!"_ZTSN3JPH18SerializableObjectE"}
!48 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !49, i64 0}
!49 = !{!"_ZTSSt6atomicIjE", !50, i64 0}
!50 = !{!"_ZTSSt13__atomic_baseIjE", !20, i64 0}
!51 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !7, i64 0, !52, i64 32}
!52 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !7, i64 0}
!53 = !{!"_ZTSN3JPH5ArrayINS_6Float3ENS_12STLAllocatorIS1_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!54 = !{!"_ZTSN3JPH5ArrayINS_15IndexedTriangleENS_12STLAllocatorIS1_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!55 = !{!"_ZTSN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!56 = !{!"_ZTSN3JPH17MeshShapeSettings13EBuildQualityE", !7, i64 0}


; 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::Ref" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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.6", %"class.JPH::RefConst.7" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.6" = type { ptr }
%"class.JPH::RefConst.7" = type { ptr }
%"class.JPH::Array" = 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.16", %"class.JPH::Array.19", %"class.JPH::Array.22", i32, float, i8, i32 }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon.11, i8, [7 x i8] }>
%union.anon.11 = 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.15 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.15 = type { i64, [8 x i8] }
%"class.JPH::Array.16" = type { i64, i64, ptr }
%"class.JPH::Array.19" = type { i64, i64, ptr }
%"class.JPH::Array.22" = type { i64, i64, ptr }

; 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 @_ZN15ActiveEdgesTest10InitializeEv(ptr nocapture noundef nonnull readonly align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Ref", align 8
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::BodyCreationSettings", align 16
  %5 = alloca %"class.JPH::Array", align 8
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Quat", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Triangle", align 4
  %20 = alloca %"class.JPH::Triangle", align 4
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Triangle", align 4
  %23 = alloca %"class.JPH::Triangle", align 4
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::MeshShapeSettings", align 8
  %26 = alloca %"class.JPH::Array.22", align 8
  %27 = alloca %"class.JPH::BodyCreationSettings", align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #12
  %28 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
          to label %29 unwind label %61

29:                                               ; preds = %1
  %30 = load double, ptr %3, align 16
  %31 = getelementptr inbounds i8, ptr %3, i64 8
  %32 = load double, ptr %31, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %28, double %30, double %32, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %33 unwind label %61

33:                                               ; preds = %29
  call void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %28)
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #12
  %34 = call noundef ptr @_ZNK3JPH3RefINS_8BoxShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  %35 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %36 unwind label %63

36:                                               ; preds = %33
  %37 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %38 unwind label %63

38:                                               ; preds = %36
  %39 = extractvalue { double, double } %35, 1
  %40 = extractvalue { double, double } %35, 0
  %41 = extractvalue { double, double } %37, 0
  %42 = extractvalue { double, double } %37, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %4, ptr noundef %34, double %40, double %39, double %41, double %42, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %43 unwind label %63

43:                                               ; preds = %38
  %44 = getelementptr inbounds i8, ptr %4, i64 108
  store float 0.000000e+00, ptr %44, align 4, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %4, i64 116
  store float 0.000000e+00, ptr %45, align 4, !tbaa !28
  %46 = getelementptr inbounds i8, ptr %4, i64 105
  store i8 0, ptr %46, align 1, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #12
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  %47 = getelementptr inbounds i8, ptr %6, i64 8
  %48 = getelementptr inbounds i8, ptr %10, i64 8
  %49 = getelementptr inbounds i8, ptr %11, i64 8
  %.sroa.259.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  %50 = getelementptr inbounds i8, ptr %14, i64 8
  %51 = getelementptr inbounds i8, ptr %13, i64 8
  %52 = getelementptr inbounds i8, ptr %12, i64 8
  %.sroa.248.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %53 = getelementptr inbounds i8, ptr %18, i64 8
  %54 = getelementptr inbounds i8, ptr %17, i64 8
  %55 = getelementptr inbounds i8, ptr %16, i64 8
  %56 = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  %57 = getelementptr inbounds i8, ptr %4, i64 16
  %58 = getelementptr inbounds i8, ptr %0, i64 24
  %59 = getelementptr inbounds i8, ptr %24, i64 8
  br label %65

60:                                               ; preds = %232
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %25) #12
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %26, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %25, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull %26)
          to label %237 unwind label %257

61:                                               ; preds = %29, %1
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %28) #12
  br label %270

63:                                               ; preds = %38, %36, %33
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %269

65:                                               ; preds = %43, %232
  %.0108134 = phi i32 [ -90, %43 ], [ %233, %232 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #12
  %66 = icmp slt i32 %.0108134, 0
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #12
  br i1 %66, label %67, label %73

67:                                               ; preds = %65
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef -1.000000e+00)
          to label %68 unwind label %82

68:                                               ; preds = %67
  %69 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %7)
          to label %70 unwind label %82

70:                                               ; preds = %68
  %71 = extractvalue { double, double } %69, 0
  store double %71, ptr %6, align 16
  %72 = extractvalue { double, double } %69, 1
  store double %72, ptr %47, align 8
  br label %74

73:                                               ; preds = %65
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %74 unwind label %82

74:                                               ; preds = %73, %70
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #12
  %75 = sitofp i32 %.0108134 to float
  %76 = fmul float %75, 5.000000e+00
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #12
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef %76, float noundef 0.000000e+00, float noundef -5.000000e+00)
          to label %77 unwind label %84

77:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #12
  %78 = fadd float %76, 5.000000e+00
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef %78, float noundef 0.000000e+00, float noundef -5.000000e+00)
          to label %.preheader unwind label %86

79:                                               ; preds = %211
  %80 = load ptr, ptr %58, align 8, !tbaa !30
  %81 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %80, ptr noundef nonnull align 16 dereferenceable(256) %4)
          to label %221 unwind label %230

82:                                               ; preds = %73, %68, %67
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #12
  br label %236

84:                                               ; preds = %74
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %235

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

.preheader:                                       ; preds = %77, %211
  %.0109133 = phi float [ %.1110, %211 ], [ 0xC7EFFFFFE0000000, %77 ]
  %.0111132 = phi i32 [ %212, %211 ], [ 0, %77 ]
  %.0112131 = phi i32 [ %213, %211 ], [ 0, %77 ]
  %88 = sitofp i32 %.0111132 to float
  %89 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef %88)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #12
  %90 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %91 unwind label %153

91:                                               ; preds = %.preheader
  %92 = extractvalue { double, double } %90, 0
  %93 = extractvalue { double, double } %90, 1
  %94 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %92, double %93, float noundef %89)
          to label %95 unwind label %153

95:                                               ; preds = %91
  %96 = extractvalue { double, double } %94, 0
  store double %96, ptr %10, align 16
  %97 = extractvalue { double, double } %94, 1
  store double %97, ptr %48, align 8
  %98 = invoke { double, double } @_ZNK3JPH4Quat11RotateAxisZEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
          to label %99 unwind label %155

99:                                               ; preds = %95
  %100 = extractvalue { double, double } %98, 0
  %101 = extractvalue { double, double } %98, 1
  %102 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 1.000000e+01, double %100, double %101)
          to label %103 unwind label %155

103:                                              ; preds = %99
  %104 = extractvalue { double, double } %102, 0
  %105 = extractvalue { double, double } %102, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #12
  %106 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %104, double %105)
          to label %107 unwind label %157

107:                                              ; preds = %103
  %108 = extractvalue { double, double } %106, 0
  store double %108, ptr %11, align 16
  %109 = extractvalue { double, double } %106, 1
  store double %109, ptr %49, align 8
  %110 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %104, double %105)
          to label %111 unwind label %159

111:                                              ; preds = %107
  %112 = extractvalue { double, double } %110, 0
  %113 = extractvalue { double, double } %110, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  %.sroa.058.0.copyload = load double, ptr %8, align 16
  %.sroa.259.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %114 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %.sroa.058.0.copyload, double %.sroa.259.0.copyload)
          to label %115 unwind label %161

115:                                              ; preds = %111
  %116 = extractvalue { double, double } %114, 0
  store double %116, ptr %14, align 16
  %117 = extractvalue { double, double } %114, 1
  store double %117, ptr %50, align 8
  %.sroa.054.0.copyload = load double, ptr %8, align 16
  %.sroa.255.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %118 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %.sroa.054.0.copyload, double %.sroa.255.0.copyload)
          to label %119 unwind label %161

119:                                              ; preds = %115
  %120 = extractvalue { double, double } %118, 0
  %121 = extractvalue { double, double } %118, 1
  %122 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %120, double %121)
          to label %123 unwind label %161

123:                                              ; preds = %119
  %124 = extractvalue { double, double } %122, 0
  store double %124, ptr %13, align 16
  %125 = extractvalue { double, double } %122, 1
  store double %125, ptr %51, align 8
  %126 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %13)
          to label %127 unwind label %161

127:                                              ; preds = %123
  %128 = extractvalue { double, double } %126, 0
  store double %128, ptr %12, align 16
  %129 = extractvalue { double, double } %126, 1
  store double %129, ptr %52, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #12
  %.sroa.050.0.copyload = load double, ptr %6, align 16
  %.sroa.251.0.copyload = load double, ptr %47, align 8, !tbaa !36
  %130 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %.sroa.050.0.copyload, double %.sroa.251.0.copyload)
  %131 = fcmp ogt float %130, %.0109133
  br i1 %131, label %132, label %165

132:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #12
  %.sroa.047.0.copyload = load double, ptr %9, align 16
  %.sroa.248.0.copyload = load double, ptr %.sroa.248.0..sroa_idx, align 8, !tbaa !36
  %133 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %.sroa.047.0.copyload, double %.sroa.248.0.copyload)
          to label %134 unwind label %163

134:                                              ; preds = %132
  %135 = extractvalue { double, double } %133, 0
  store double %135, ptr %18, align 16
  %136 = extractvalue { double, double } %133, 1
  store double %136, ptr %53, align 8
  %.sroa.045.0.copyload = load double, ptr %11, align 16
  %.sroa.246.0.copyload = load double, ptr %49, align 8, !tbaa !36
  %137 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %.sroa.045.0.copyload, double %.sroa.246.0.copyload)
          to label %138 unwind label %163

138:                                              ; preds = %134
  %139 = extractvalue { double, double } %137, 0
  store double %139, ptr %17, align 16
  %140 = extractvalue { double, double } %137, 1
  store double %140, ptr %54, align 8
  %141 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %112, double %113)
          to label %142 unwind label %163

142:                                              ; preds = %138
  %143 = extractvalue { double, double } %141, 0
  store double %143, ptr %16, align 16
  %144 = extractvalue { double, double } %141, 1
  store double %144, ptr %55, align 8
  %145 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 4.000000e+00)
          to label %146 unwind label %163

146:                                              ; preds = %142
  %147 = extractvalue { double, double } %145, 0
  store double %147, ptr %15, align 16
  %148 = extractvalue { double, double } %145, 1
  store double %148, ptr %56, align 8
  %.sroa.041.0.copyload = load double, ptr %12, align 16
  %.sroa.242.0.copyload = load double, ptr %52, align 8, !tbaa !36
  %149 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %.sroa.041.0.copyload, double %.sroa.242.0.copyload)
          to label %150 unwind label %163

150:                                              ; preds = %146
  %151 = extractvalue { double, double } %149, 0
  %152 = extractvalue { double, double } %149, 1
  store double %151, ptr %4, align 16
  store double %152, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %57, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !37
  br label %165

153:                                              ; preds = %91, %.preheader
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %220

155:                                              ; preds = %99, %95
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %220

157:                                              ; preds = %103
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %219

159:                                              ; preds = %107
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %219

161:                                              ; preds = %123, %119, %115, %111
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #12
  br label %218

163:                                              ; preds = %146, %142, %138, %134, %132
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  br label %218

165:                                              ; preds = %150, %127
  %.1110 = phi float [ %130, %150 ], [ %.0109133, %127 ]
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %19) #12
  %.sroa.039.0.copyload = load double, ptr %8, align 16
  %.sroa.240.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %.sroa.037.0.copyload = load double, ptr %11, align 16
  %.sroa.238.0.copyload = load double, ptr %49, align 8, !tbaa !36
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %19, double %.sroa.039.0.copyload, double %.sroa.240.0.copyload, double %.sroa.037.0.copyload, double %.sroa.238.0.copyload, double %112, double %113, i32 noundef 0, i32 noundef 0)
          to label %166 unwind label %200

166:                                              ; preds = %165
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(44) %19)
          to label %167 unwind label %200

167:                                              ; preds = %166
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %19) #12
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %20) #12
  %.sroa.033.0.copyload = load double, ptr %8, align 16
  %.sroa.234.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %.sroa.029.0.copyload = load double, ptr %9, align 16
  %.sroa.230.0.copyload = load double, ptr %.sroa.248.0..sroa_idx, align 8, !tbaa !36
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %20, double %.sroa.033.0.copyload, double %.sroa.234.0.copyload, double %112, double %113, double %.sroa.029.0.copyload, double %.sroa.230.0.copyload, i32 noundef 0, i32 noundef 0)
          to label %168 unwind label %202

168:                                              ; preds = %167
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(44) %20)
          to label %169 unwind label %202

169:                                              ; preds = %168
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %20) #12
  %.not = icmp eq i32 %.0112131, 0
  br i1 %.not, label %211, label %170

170:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #12
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef -1.000000e+00)
          to label %171 unwind label %204

171:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %22) #12
  %.sroa.025.0.copyload = load double, ptr %8, align 16
  %.sroa.226.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %172 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %.sroa.025.0.copyload, double %.sroa.226.0.copyload)
          to label %173 unwind label %206

173:                                              ; preds = %171
  %174 = extractvalue { double, double } %172, 0
  %175 = extractvalue { double, double } %172, 1
  %176 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %112, double %113)
          to label %177 unwind label %206

177:                                              ; preds = %173
  %.sroa.017.0.copyload = load double, ptr %11, align 16
  %.sroa.218.0.copyload = load double, ptr %49, align 8, !tbaa !36
  %178 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %.sroa.017.0.copyload, double %.sroa.218.0.copyload)
          to label %179 unwind label %206

179:                                              ; preds = %177
  %180 = extractvalue { double, double } %176, 1
  %181 = extractvalue { double, double } %176, 0
  %182 = extractvalue { double, double } %178, 0
  %183 = extractvalue { double, double } %178, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %22, double %174, double %175, double %181, double %180, double %182, double %183, i32 noundef 0, i32 noundef 0)
          to label %184 unwind label %206

184:                                              ; preds = %179
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(44) %22)
          to label %185 unwind label %206

185:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %23) #12
  %.sroa.013.0.copyload = load double, ptr %8, align 16
  %.sroa.214.0.copyload = load double, ptr %.sroa.259.0..sroa_idx, align 8, !tbaa !36
  %186 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %.sroa.013.0.copyload, double %.sroa.214.0.copyload)
          to label %187 unwind label %208

187:                                              ; preds = %185
  %188 = extractvalue { double, double } %186, 0
  %189 = extractvalue { double, double } %186, 1
  %.sroa.09.0.copyload = load double, ptr %9, align 16
  %.sroa.210.0.copyload = load double, ptr %.sroa.248.0..sroa_idx, align 8, !tbaa !36
  %190 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %.sroa.09.0.copyload, double %.sroa.210.0.copyload)
          to label %191 unwind label %208

191:                                              ; preds = %187
  %192 = invoke { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %112, double %113)
          to label %193 unwind label %208

193:                                              ; preds = %191
  %194 = extractvalue { double, double } %190, 1
  %195 = extractvalue { double, double } %190, 0
  %196 = extractvalue { double, double } %192, 0
  %197 = extractvalue { double, double } %192, 1
  invoke void @_ZN3JPH8TriangleC2ENS_4Vec3ES1_S1_jj(ptr noundef nonnull align 4 dereferenceable(44) %23, double %188, double %189, double %195, double %194, double %196, double %197, i32 noundef 0, i32 noundef 0)
          to label %198 unwind label %208

198:                                              ; preds = %193
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(44) %23)
          to label %199 unwind label %208

199:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %211

200:                                              ; preds = %166, %165
  %201 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %19) #12
  br label %218

202:                                              ; preds = %168, %167
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %20) #12
  br label %218

204:                                              ; preds = %170
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %210

206:                                              ; preds = %184, %179, %177, %173, %171
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %22) #12
  br label %210

208:                                              ; preds = %198, %193, %191, %187, %185
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %23) #12
  br label %210

210:                                              ; preds = %208, %206, %204
  %.pn117 = phi { ptr, i32 } [ %209, %208 ], [ %207, %206 ], [ %205, %204 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %218

211:                                              ; preds = %199, %169
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %8, ptr noundef nonnull align 16 dereferenceable(16) %11, i64 16, i1 false), !tbaa.struct !37
  store double %112, ptr %9, align 16
  store double %113, ptr %.sroa.248.0..sroa_idx, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #12
  %212 = add nsw i32 %.0111132, %.0108134
  %213 = add nuw nsw i32 %.0112131, 1
  %214 = call i32 @llvm.abs.i32(i32 %212, i1 true)
  %215 = icmp ult i32 %214, 91
  %216 = icmp ult i32 %.0112131, 89
  %217 = select i1 %215, i1 %216, i1 false
  br i1 %217, label %.preheader, label %79, !llvm.loop !38

218:                                              ; preds = %163, %200, %202, %210, %161
  %.pn117.pn.pn = phi { ptr, i32 } [ %162, %161 ], [ %.pn117, %210 ], [ %203, %202 ], [ %201, %200 ], [ %164, %163 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  br label %219

219:                                              ; preds = %159, %218, %157
  %.pn117.pn.pn.pn.pn = phi { ptr, i32 } [ %158, %157 ], [ %.pn117.pn.pn, %218 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #12
  br label %220

220:                                              ; preds = %155, %219, %153
  %.pn117.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %154, %153 ], [ %.pn117.pn.pn.pn.pn, %219 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #12
  br label %234

221:                                              ; preds = %79
  %222 = load ptr, ptr %58, align 8, !tbaa !30
  %223 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %81)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %222, ptr noundef nonnull align 4 dereferenceable(4) %223, i32 noundef 0)
          to label %224 unwind label %230

224:                                              ; preds = %221
  %225 = icmp sgt i32 %.0108134, -1
  br i1 %225, label %226, label %232

226:                                              ; preds = %224
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %24, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 2.000000e+00)
          to label %227 unwind label %230

227:                                              ; preds = %226
  %228 = load double, ptr %24, align 16
  %229 = load double, ptr %59, align 8
  invoke void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %81, double %228, double %229)
          to label %232 unwind label %230

230:                                              ; preds = %227, %226, %221, %79
  %231 = landingpad { ptr, i32 }
          cleanup
  br label %234

232:                                              ; preds = %227, %224
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #12
  %233 = add nsw i32 %.0108134, 1
  %exitcond.not = icmp eq i32 %233, 91
  br i1 %exitcond.not, label %60, label %65, !llvm.loop !40

234:                                              ; preds = %230, %220, %86
  %.pn117.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn, %220 ], [ %231, %230 ], [ %87, %86 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #12
  br label %235

235:                                              ; preds = %234, %84
  %.pn117.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn.pn, %234 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #12
  br label %236

236:                                              ; preds = %235, %82
  %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn.pn.pn, %235 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #12
  br label %268

237:                                              ; preds = %60
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  %238 = getelementptr inbounds i8, ptr %25, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %238)
          to label %239 unwind label %259

239:                                              ; preds = %237
  %240 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 5.000000e+01)
  %241 = invoke noundef float @_ZN3JPH3CosEf(float noundef %240)
          to label %242 unwind label %259

242:                                              ; preds = %239
  %243 = getelementptr inbounds i8, ptr %25, i64 140
  store float %241, ptr %243, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %27) #12
  %244 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %245 unwind label %261

245:                                              ; preds = %242
  %246 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %247 unwind label %261

247:                                              ; preds = %245
  %248 = extractvalue { double, double } %244, 1
  %249 = extractvalue { double, double } %244, 0
  %250 = extractvalue { double, double } %246, 0
  %251 = extractvalue { double, double } %246, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %27, ptr noundef nonnull %25, double %249, double %248, double %250, double %251, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %252 unwind label %261

252:                                              ; preds = %247
  %253 = getelementptr inbounds i8, ptr %27, i64 108
  store float 0.000000e+00, ptr %253, align 4, !tbaa !5
  %254 = load ptr, ptr %58, align 8, !tbaa !30
  %255 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %254, ptr noundef nonnull align 16 dereferenceable(256) %27, i32 noundef 1)
          to label %256 unwind label %263

256:                                              ; preds = %252
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %27) #12
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %25) #12
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %25) #12
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #12
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #12
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  ret void

257:                                              ; preds = %60
  %258 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  br label %267

259:                                              ; preds = %239, %237
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %266

261:                                              ; preds = %247, %245, %242
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %265

263:                                              ; preds = %252
  %264 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %27) #12
  br label %265

265:                                              ; preds = %263, %261
  %.pn = phi { ptr, i32 } [ %264, %263 ], [ %262, %261 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %27) #12
  br label %266

266:                                              ; preds = %265, %259
  %.pn.pn = phi { ptr, i32 } [ %.pn, %265 ], [ %260, %259 ]
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %25) #12
  br label %267

267:                                              ; preds = %266, %257
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %266 ], [ %258, %257 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %25) #12
  br label %268

268:                                              ; preds = %267, %236
  %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn, %236 ], [ %.pn.pn.pn, %267 ]
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #12
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #12
  br label %269

269:                                              ; preds = %268, %63
  %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %268 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #12
  call void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #12
  br label %270

270:                                              ; preds = %269, %61
  %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %269 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  resume { ptr, i32 } %.pn117.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #2 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 #3 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 #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #5 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Quat9sIdentityEv() local_unnamed_addr #2 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: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #8

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH16DegreesToRadiansEf(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 #2 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Quat11RotateAxisZEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2 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 #3 align 2

; 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) #9

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

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

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

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

; 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 #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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3mlES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #3 align 2

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

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

; 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 #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH4Body17SetLinearVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122), double, double) local_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) #11

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 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 #10

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH3CosEf(float noundef) local_unnamed_addr #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

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) local_unnamed_addr #10

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #6 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 #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_8BoxShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 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 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { 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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { "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 #11 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { 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, !22, i64 108}
!6 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !7, i64 0, !10, i64 16, !7, i64 32, !7, i64 48, !12, i64 64, !13, i64 72, !14, i64 80, !18, i64 96, !19, i64 97, !20, i64 98, !20, i64 99, !20, i64 100, !20, i64 101, !20, i64 102, !21, i64 103, !20, i64 104, !20, i64 105, !22, i64 108, !22, i64 112, !22, i64 116, !22, i64 120, !22, i64 124, !22, i64 128, !22, i64 132, !17, i64 136, !17, i64 140, !23, i64 144, !22, i64 148, !24, i64 160, !26, i64 240, !27, i64 248}
!7 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN3JPH4QuatE", !11, i64 0}
!11 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!"short", !8, i64 0}
!14 = !{!"_ZTSN3JPH14CollisionGroupE", !15, i64 0, !17, i64 8, !17, i64 12}
!15 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !16, i64 0}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!"int", !8, i64 0}
!18 = !{!"_ZTSN3JPH11EMotionTypeE", !8, i64 0}
!19 = !{!"_ZTSN3JPH12EAllowedDOFsE", !8, i64 0}
!20 = !{!"bool", !8, i64 0}
!21 = !{!"_ZTSN3JPH14EMotionQualityE", !8, i64 0}
!22 = !{!"float", !8, i64 0}
!23 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !8, i64 0}
!24 = !{!"_ZTSN3JPH14MassPropertiesE", !22, i64 0, !25, i64 16}
!25 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!26 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !16, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !16, i64 0}
!28 = !{!6, !22, i64 116}
!29 = !{!6, !20, i64 105}
!30 = !{!31, !16, i64 24}
!31 = !{!"_ZTS4Test", !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !20, i64 48, !32, i64 56}
!32 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !33, i64 0}
!33 = !{!"_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", !16, i64 0, !12, i64 8, !34, i64 16, !12, i64 24, !35, i64 32, !16, i64 48}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !16, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !22, i64 0, !12, i64 8}
!36 = !{!8, !8, i64 0}
!37 = !{i64 0, i64 16, !36}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}
!41 = !{!42, !22, i64 140}
!42 = !{!"_ZTSN3JPH17MeshShapeSettingsE", !43, i64 0, !50, i64 64, !51, i64 88, !52, i64 112, !17, i64 136, !22, i64 140, !20, i64 144, !53, i64 148}
!43 = !{!"_ZTSN3JPH13ShapeSettingsE", !44, i64 0, !45, i64 8, !12, i64 16, !48, i64 24}
!44 = !{!"_ZTSN3JPH18SerializableObjectE"}
!45 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !46, i64 0}
!46 = !{!"_ZTSSt6atomicIjE", !47, i64 0}
!47 = !{!"_ZTSSt13__atomic_baseIjE", !17, i64 0}
!48 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !8, i64 0, !49, i64 32}
!49 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !8, i64 0}
!50 = !{!"_ZTSN3JPH5ArrayINS_6Float3ENS_12STLAllocatorIS1_EEEE", !12, i64 0, !12, i64 8, !16, i64 16}
!51 = !{!"_ZTSN3JPH5ArrayINS_15IndexedTriangleENS_12STLAllocatorIS1_EEEE", !12, i64 0, !12, i64 8, !16, i64 16}
!52 = !{!"_ZTSN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEE", !12, i64 0, !12, i64 8, !16, i64 16}
!53 = !{!"_ZTSN3JPH17MeshShapeSettings13EBuildQualityE", !8, i64 0}


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