; LLVM IR from zig-gamedev/zphysics :: libs/Jolt/Physics/Collision/Shape (ConvexHullShape)

; 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::ConvexHullBuilder" = type { ptr, %"class.JPH::Array.20", %"class.JPH::Array.23" }
%"class.JPH::Array.20" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.2 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.2 = type { i64, [8 x i8] }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.7 }
%union.anon.7 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.6 }
%union.anon.6 = type { <4 x float> }
%"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 }
%"struct.JPH::AssertLastParam" = type { i8 }
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.JPH::ConvexHullShape::Point" = type { %"class.JPH::Vec3", i32, [3 x i32] }
%"struct.JPH::ConvexHullShape::Face" = type { i16, i16 }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::Array.26" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::ConvexHullShape" = type <{ %"class.JPH::ConvexShape.base", [4 x i8], %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::AABox", %"class.JPH::Array.8", %"class.JPH::Array.11", %"class.JPH::Array.14", %"class.JPH::Array.17", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShape.base" = type <{ %"class.JPH::Shape.base", [6 x i8], %"class.JPH::RefConst", float }>
%"class.JPH::Shape.base" = type <{ ptr, %"class.JPH::RefTarget.5", [4 x i8], i64, i8, i8 }>
%"class.JPH::RefTarget.5" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::Array.8" = type { i64, i64, ptr }
%"class.JPH::Array.11" = type { i64, i64, ptr }
%"class.JPH::Array.14" = type { i64, i64, ptr }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::ConvexHullShapeSettings" = type <{ %"class.JPH::ConvexShapeSettings.base", [4 x i8], %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::ConvexShapeSettings.base" = type <{ %"class.JPH::ShapeSettings", %"class.JPH::RefConst", float }>
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"class.JPH::Result" = type <{ %union.anon, i8, [7 x i8] }>
%union.anon = type { %"class.std::__cxx11::basic_string" }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::ConvexHullBuilder::Face" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Array.26", ptr, float, i8, [11 x i8] }>
%"class.JPH::ConvexHullBuilder::Edge" = type <{ ptr, ptr, ptr, i32, [4 x i8] }>
%"struct.std::pair" = type <{ i32, i8, [3 x i8] }>

@_ZTVN3JPH15ConvexHullShapeE = external dso_local unnamed_addr constant { [37 x ptr] }, align 8
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [108 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [46 x i8], align 1
@__const.ConvexHullShape.best3 = external hidden unnamed_addr constant [3 x i32], align 4
@__const.ConvexHullShape.best2 = external hidden unnamed_addr constant [2 x i32], align 4
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH15ConvexHullShapeC2ERKNS_23ConvexHullShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 16 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull align 8 dereferenceable(33) %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %"class.JPH::ConvexHullBuilder", align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca i32, align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.JPH::Mat44", align 16
  %20 = alloca %"class.JPH::Vec4", align 16
  %21 = alloca %"class.JPH::Vec4", align 16
  %22 = alloca %"class.JPH::Vec4", align 16
  %23 = alloca %"class.JPH::Vec4", align 16
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Mat44", align 16
  %37 = alloca %"class.JPH::Vec4", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec4", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec4", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec4", align 16
  %44 = alloca float, align 4
  %45 = alloca %"class.JPH::Mat44", align 16
  %46 = alloca %"class.JPH::Mat44", align 16
  %47 = alloca %"class.JPH::Mat44", align 16
  %48 = alloca %"class.JPH::Mat44", align 16
  %49 = alloca %"class.JPH::Mat44", align 16
  %50 = alloca %"class.JPH::Mat44", align 16
  %51 = alloca %"class.JPH::Mat44", align 16
  %52 = alloca %"class.std::unordered_map", align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %"struct.JPH::AssertLastParam", align 1
  %58 = alloca i16, align 2
  %59 = alloca i16, align 2
  %60 = alloca ptr, align 8
  %61 = alloca i8, align 1
  %62 = alloca i32, align 4
  %63 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %64 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca %"class.JPH::Vec3", align 16
  %68 = alloca %"struct.JPH::AssertLastParam", align 1
  %69 = alloca %"struct.JPH::ConvexHullShape::Point", align 16
  %70 = alloca %"struct.JPH::AssertLastParam", align 1
  %71 = alloca %"struct.JPH::ConvexHullShape::Face", align 2
  %72 = alloca %"class.JPH::Plane", align 16
  %73 = alloca %"class.JPH::Vec3", align 16
  %74 = alloca %"class.JPH::Vec3", align 16
  %75 = alloca %"class.JPH::Vec3", align 16
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca i32, align 4
  %78 = alloca %"class.JPH::Array.26", align 8
  %79 = alloca i32, align 4
  %80 = alloca ptr, align 8
  %81 = alloca i32, align 4
  %82 = alloca float, align 4
  %83 = alloca [3 x i32], align 4
  %84 = alloca float, align 4
  %85 = alloca [2 x i32], align 4
  %86 = alloca i32, align 4
  %87 = alloca %"class.JPH::Vec3", align 16
  %88 = alloca i32, align 4
  %89 = alloca %"class.JPH::Vec3", align 16
  %90 = alloca %"class.JPH::Vec3", align 16
  %91 = alloca %"class.JPH::Vec3", align 16
  %92 = alloca float, align 4
  %93 = alloca %"class.JPH::Vec3", align 16
  %94 = alloca i32, align 4
  %95 = alloca %"class.JPH::Vec3", align 16
  %96 = alloca float, align 4
  %97 = alloca %"class.JPH::Vec3", align 16
  %98 = alloca %"class.std::initializer_list", align 8
  %99 = alloca [3 x i32], align 4
  %100 = alloca %"class.std::initializer_list", align 8
  %101 = alloca [2 x i32], align 4
  %102 = alloca %"class.std::initializer_list", align 8
  %103 = alloca [1 x i32], align 4
  %104 = alloca ptr, align 8
  %105 = alloca i32, align 4
  %106 = alloca float, align 4
  %107 = alloca ptr, align 8
  %108 = alloca ptr, align 8
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca float, align 4
  %112 = alloca ptr, align 8
  %113 = alloca ptr, align 8
  %114 = alloca ptr, align 8
  %115 = alloca ptr, align 8
  %116 = alloca float, align 4
  %117 = alloca %"class.JPH::Vec3", align 16
  %118 = alloca float, align 4
  %119 = alloca ptr, align 8
  %120 = alloca ptr, align 8
  %121 = alloca ptr, align 8
  %122 = alloca ptr, align 8
  %123 = alloca %"class.JPH::Plane", align 16
  %124 = alloca %"class.JPH::Plane", align 16
  %125 = alloca %"class.JPH::Plane", align 16
  %126 = alloca %"class.JPH::Vec3", align 16
  %127 = alloca %"class.JPH::Vec3", align 16
  %128 = alloca %"struct.JPH::AssertLastParam", align 1
  %129 = alloca %"class.JPH::Plane", align 16
  %130 = alloca %"class.JPH::Vec3", align 16
  %131 = alloca %"class.JPH::Vec3", align 16
  %132 = alloca %"class.JPH::Vec3", align 16
  %133 = alloca %"class.JPH::Vec3", align 16
  %134 = alloca %"class.JPH::Vec3", align 16
  %135 = alloca %"class.JPH::Mat44", align 16
  %136 = alloca %"class.JPH::Mat44", align 16
  %137 = alloca %"class.JPH::Vec4", align 16
  %138 = alloca %"class.JPH::Vec3", align 16
  %139 = alloca %"class.JPH::Vec4", align 16
  %140 = alloca %"class.JPH::Vec3", align 16
  %141 = alloca %"class.JPH::Vec4", align 16
  %142 = alloca %"class.JPH::Vec3", align 16
  %143 = alloca %"class.JPH::Vec4", align 16
  %144 = alloca float, align 4
  %145 = alloca %"class.JPH::Mat44", align 16
  %146 = alloca float, align 4
  %147 = alloca %"class.JPH::Vec3", align 16
  %148 = alloca %"class.JPH::Vec3", align 16
  %149 = alloca %"class.JPH::Vec3", align 16
  %150 = alloca %"struct.JPH::AssertLastParam", align 1
  %151 = alloca float, align 4
  %152 = alloca ptr, align 8
  %153 = alloca ptr, align 8
  %154 = alloca ptr, align 8
  %155 = alloca ptr, align 8
  %156 = alloca float, align 4
  %157 = alloca float, align 4
  %158 = alloca %"class.JPH::Ref", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %159 = load ptr, ptr %4, align 8
  %160 = load ptr, ptr %5, align 8, !tbaa !5
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN3JPH11ConvexShapeC2ENS_13EShapeSubTypeERKNS_19ConvexShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 8 dereferenceable(44) %159, i8 noundef zeroext 6, ptr noundef nonnull align 8 dereferenceable(76) %160, ptr noundef nonnull align 8 dereferenceable(33) %161)
  store ptr getelementptr inbounds inrange(-16, 280) ({ [37 x ptr] }, ptr @_ZTVN3JPH15ConvexHullShapeE, i32 0, i32 0, i32 2), ptr %159, align 16, !tbaa !9
  %162 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  %163 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 3
  %164 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 4
  invoke void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %164)
          to label %165 unwind label %181

165:                                              ; preds = %3
  %166 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %166) #11
  %167 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %167) #11
  %168 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  call void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %168) #11
  %169 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %169) #11
  %170 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %171, i32 0, i32 3
  %173 = load float, ptr %172, align 8, !tbaa !11
  store float %173, ptr %170, align 16, !tbaa !26
  %174 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float 0x47EFFFFFE0000000, ptr %174, align 8, !tbaa !40
  %175 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %176 = load float, ptr %175, align 16, !tbaa !26
  %177 = fcmp olt float %176, 0.000000e+00
  br i1 %177, label %178, label %189

178:                                              ; preds = %165
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %179, ptr noundef @.str.1)
          to label %180 unwind label %185

180:                                              ; preds = %178
  br label %1645

181:                                              ; preds = %3
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %7, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %8, align 4
  br label %1666

185:                                              ; preds = %178
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %7, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %8, align 4
  br label %1665

189:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %10) #11
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %190, i32 0, i32 2
  invoke void @_ZN3JPH17ConvexHullBuilderC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 8 dereferenceable(24) %191)
          to label %192 unwind label %207

192:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %193, i32 0, i32 5
  %195 = load float, ptr %194, align 8, !tbaa !41
  %196 = invoke noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56) %10, i32 noundef 256, float noundef %195, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %197 unwind label %211

197:                                              ; preds = %192
  store i32 %196, ptr %11, align 4, !tbaa !42
  %198 = load i32, ptr %11, align 4, !tbaa !42
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %200, label %215

200:                                              ; preds = %197
  %201 = load i32, ptr %11, align 4, !tbaa !42
  %202 = icmp ne i32 %201, 1
  br i1 %202, label %203, label %215

203:                                              ; preds = %200
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %204, ptr noundef %205)
          to label %206 unwind label %211

206:                                              ; preds = %203
  store i32 1, ptr %12, align 4
  br label %1643

207:                                              ; preds = %189
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %7, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %8, align 4
  br label %1664

211:                                              ; preds = %203, %192
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %7, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %8, align 4
  br label %1663

215:                                              ; preds = %200, %197
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #11
  %216 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3JPH17ConvexHullBuilder8GetFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %10)
          to label %217 unwind label %243

217:                                              ; preds = %215
  store ptr %216, ptr %13, align 8, !tbaa !5
  %218 = load i32, ptr %11, align 4, !tbaa !42
  %219 = icmp eq i32 %218, 0
  br i1 %219, label %220, label %265

220:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  invoke void @_ZNK3JPH17ConvexHullBuilder17DetermineMaxErrorERPNS0_4FaceERfRiS4_(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %221 unwind label %247

221:                                              ; preds = %220
  %222 = load float, ptr %15, align 4, !tbaa !44
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %223, i32 0, i32 5
  %225 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %224)
          to label %226 unwind label %247

226:                                              ; preds = %221
  %227 = load float, ptr %225, align 4, !tbaa !44
  %228 = fmul float 4.000000e+00, %227
  %229 = fcmp ogt float %222, %228
  br i1 %229, label %230, label %260

230:                                              ; preds = %226
  %231 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #11
  %232 = load i32, ptr %17, align 4, !tbaa !45
  %233 = load float, ptr %15, align 4, !tbaa !44
  %234 = fpext float %233 to double
  %235 = load float, ptr %15, align 4, !tbaa !44
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %236, i32 0, i32 5
  %238 = load float, ptr %237, align 8, !tbaa !41
  %239 = fdiv float %235, %238
  %240 = fpext float %239 to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef @.str.2, i32 noundef %232, double noundef %234, double noundef %240)
          to label %241 unwind label %251

241:                                              ; preds = %230
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33) %231, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %242 unwind label %255

242:                                              ; preds = %241
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #11
  store i32 1, ptr %12, align 4
  br label %261

243:                                              ; preds = %265, %215
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %7, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %8, align 4
  br label %1662

247:                                              ; preds = %221, %220
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %7, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %8, align 4
  br label %264

251:                                              ; preds = %230
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %7, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %8, align 4
  br label %259

255:                                              ; preds = %241
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %7, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #11
  br label %259

259:                                              ; preds = %255, %251
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #11
  br label %264

260:                                              ; preds = %226
  store i32 0, ptr %12, align 4
  br label %261

261:                                              ; preds = %260, %242
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  %262 = load i32, ptr %12, align 4
  switch i32 %262, label %1642 [
    i32 0, label %263
  ]

263:                                              ; preds = %261
  br label %265

264:                                              ; preds = %259, %247
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  br label %1662

265:                                              ; preds = %263, %217
  %266 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  %267 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 10
  invoke void @_ZNK3JPH17ConvexHullBuilder24GetCenterOfMassAndVolumeERNS_4Vec3ERf(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 16 dereferenceable(16) %266, ptr noundef nonnull align 4 dereferenceable(4) %267)
          to label %268 unwind label %243

268:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 64, ptr %19) #11
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0x3F91111120000000, float noundef 0x3F81111120000000, float noundef 0x3F81111120000000, float noundef 0.000000e+00)
          to label %269 unwind label %303

269:                                              ; preds = %268
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0x3F81111120000000, float noundef 0x3F91111120000000, float noundef 0x3F81111120000000, float noundef 0.000000e+00)
          to label %270 unwind label %303

270:                                              ; preds = %269
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 0x3F81111120000000, float noundef 0x3F81111120000000, float noundef 0x3F91111120000000, float noundef 0.000000e+00)
          to label %271 unwind label %303

271:                                              ; preds = %270
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %272 unwind label %303

272:                                              ; preds = %271
  %273 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %274 = load double, ptr %273, align 16
  %275 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %276 = load double, ptr %275, align 8
  %277 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %278 = load double, ptr %277, align 16
  %279 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %280 = load double, ptr %279, align 8
  %281 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %282 = load double, ptr %281, align 16
  %283 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %284 = load double, ptr %283, align 8
  %285 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %286 = load double, ptr %285, align 16
  %287 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %288 = load double, ptr %287, align 8
  invoke void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %19, double %274, double %276, double %278, double %280, double %282, double %284, double %286, double %288)
          to label %289 unwind label %303

289:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #11
  invoke void @_ZN3JPH5Mat445sZeroEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %24)
          to label %290 unwind label %307

290:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %291 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %291, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %292 = load ptr, ptr %25, align 8, !tbaa !5
  %293 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %292)
          to label %294 unwind label %311

294:                                              ; preds = %290
  store ptr %293, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %295 = load ptr, ptr %25, align 8, !tbaa !5
  %296 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %295)
          to label %297 unwind label %315

297:                                              ; preds = %294
  store ptr %296, ptr %27, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %485, %297
  %299 = load ptr, ptr %26, align 8, !tbaa !5
  %300 = load ptr, ptr %27, align 8, !tbaa !5
  %301 = icmp ne ptr %299, %300
  br i1 %301, label %319, label %302

302:                                              ; preds = %298
  store i32 2, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %492

303:                                              ; preds = %272, %271, %270, %269, %268
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %7, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %8, align 4
  br label %1661

307:                                              ; preds = %289
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %7, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %8, align 4
  br label %1660

311:                                              ; preds = %290
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %7, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %8, align 4
  br label %491

315:                                              ; preds = %294
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %7, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %8, align 4
  br label %490

319:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %320 = load ptr, ptr %26, align 8, !tbaa !5
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  store ptr %321, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %322 = load ptr, ptr %28, align 8, !tbaa !5
  %323 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %322, i32 0, i32 3
  %324 = load ptr, ptr %323, align 8, !tbaa !46
  store ptr %324, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #11
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %325, i32 0, i32 2
  %327 = load ptr, ptr %29, align 8, !tbaa !5
  %328 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %327, i32 0, i32 3
  %329 = load i32, ptr %328, align 8, !tbaa !50
  %330 = sext i32 %329 to i64
  %331 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %326, i64 noundef %330)
          to label %332 unwind label %447

332:                                              ; preds = %319
  %333 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %333, i64 16, i1 false), !tbaa.struct !52
  %334 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %335 = load double, ptr %334, align 16
  %336 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %337 = load double, ptr %336, align 8
  %338 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %331, double %335, double %337)
          to label %339 unwind label %447

339:                                              ; preds = %332
  %340 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %341 = getelementptr inbounds %union.anon.6, ptr %340, i32 0, i32 0
  %342 = getelementptr inbounds { double, double }, ptr %341, i32 0, i32 0
  %343 = extractvalue { double, double } %338, 0
  store double %343, ptr %342, align 16
  %344 = getelementptr inbounds { double, double }, ptr %341, i32 0, i32 1
  %345 = extractvalue { double, double } %338, 1
  store double %345, ptr %344, align 8
  %346 = load ptr, ptr %29, align 8, !tbaa !5
  %347 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %346, i32 0, i32 1
  %348 = load ptr, ptr %347, align 8, !tbaa !54
  store ptr %348, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #11
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %349, i32 0, i32 2
  %351 = load ptr, ptr %29, align 8, !tbaa !5
  %352 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %351, i32 0, i32 3
  %353 = load i32, ptr %352, align 8, !tbaa !50
  %354 = sext i32 %353 to i64
  %355 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %350, i64 noundef %354)
          to label %356 unwind label %451

356:                                              ; preds = %339
  %357 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %357, i64 16, i1 false), !tbaa.struct !52
  %358 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %359 = load double, ptr %358, align 16
  %360 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %361 = load double, ptr %360, align 8
  %362 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %355, double %359, double %361)
          to label %363 unwind label %451

363:                                              ; preds = %356
  %364 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %365 = getelementptr inbounds %union.anon.6, ptr %364, i32 0, i32 0
  %366 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 0
  %367 = extractvalue { double, double } %362, 0
  store double %367, ptr %366, align 16
  %368 = getelementptr inbounds { double, double }, ptr %365, i32 0, i32 1
  %369 = extractvalue { double, double } %362, 1
  store double %369, ptr %368, align 8
  %370 = load ptr, ptr %29, align 8, !tbaa !5
  %371 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %370, i32 0, i32 1
  %372 = load ptr, ptr %371, align 8, !tbaa !54
  store ptr %372, ptr %29, align 8, !tbaa !5
  br label %373

373:                                              ; preds = %443, %363
  %374 = load ptr, ptr %29, align 8, !tbaa !5
  %375 = load ptr, ptr %28, align 8, !tbaa !5
  %376 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %375, i32 0, i32 3
  %377 = load ptr, ptr %376, align 8, !tbaa !46
  %378 = icmp ne ptr %374, %377
  br i1 %378, label %379, label %484

379:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #11
  %380 = load ptr, ptr %5, align 8, !tbaa !5
  %381 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %380, i32 0, i32 2
  %382 = load ptr, ptr %29, align 8, !tbaa !5
  %383 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %382, i32 0, i32 3
  %384 = load i32, ptr %383, align 8, !tbaa !50
  %385 = sext i32 %384 to i64
  %386 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %381, i64 noundef %385)
          to label %387 unwind label %455

387:                                              ; preds = %379
  %388 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %388, i64 16, i1 false), !tbaa.struct !52
  %389 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %390 = load double, ptr %389, align 16
  %391 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %392 = load double, ptr %391, align 8
  %393 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %386, double %390, double %392)
          to label %394 unwind label %455

394:                                              ; preds = %387
  %395 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %396 = getelementptr inbounds %union.anon.6, ptr %395, i32 0, i32 0
  %397 = getelementptr inbounds { double, double }, ptr %396, i32 0, i32 0
  %398 = extractvalue { double, double } %393, 0
  store double %398, ptr %397, align 16
  %399 = getelementptr inbounds { double, double }, ptr %396, i32 0, i32 1
  %400 = extractvalue { double, double } %393, 1
  store double %400, ptr %399, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %36) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %30, i64 16, i1 false), !tbaa.struct !52
  %401 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %402 = load double, ptr %401, align 16
  %403 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %404 = load double, ptr %403, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %37, double %402, double %404, float noundef 0.000000e+00)
          to label %405 unwind label %459

405:                                              ; preds = %394
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !52
  %406 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %407 = load double, ptr %406, align 16
  %408 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %409 = load double, ptr %408, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %39, double %407, double %409, float noundef 0.000000e+00)
          to label %410 unwind label %459

410:                                              ; preds = %405
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !52
  %411 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %412 = load double, ptr %411, align 16
  %413 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %414 = load double, ptr %413, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %41, double %412, double %414, float noundef 0.000000e+00)
          to label %415 unwind label %459

415:                                              ; preds = %410
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %43, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %416 unwind label %459

416:                                              ; preds = %415
  %417 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %418 = load double, ptr %417, align 16
  %419 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %420 = load double, ptr %419, align 8
  %421 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %422 = load double, ptr %421, align 16
  %423 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %424 = load double, ptr %423, align 8
  %425 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %426 = load double, ptr %425, align 16
  %427 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %428 = load double, ptr %427, align 8
  %429 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %430 = load double, ptr %429, align 16
  %431 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %432 = load double, ptr %431, align 8
  invoke void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %36, double %418, double %420, double %422, double %424, double %426, double %428, double %430, double %432)
          to label %433 unwind label %459

433:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  %434 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %36)
          to label %435 unwind label %463

435:                                              ; preds = %433
  store float %434, ptr %44, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #11
  %436 = load float, ptr %44, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 64, ptr %46) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %47) #11
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %47, ptr noundef nonnull align 16 dereferenceable(64) %36, ptr noundef nonnull align 16 dereferenceable(64) %19)
          to label %437 unwind label %467

437:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #11
  invoke void @_ZNK3JPH5Mat4410TransposedEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %48, ptr noundef nonnull align 16 dereferenceable(64) %36)
          to label %438 unwind label %471

438:                                              ; preds = %437
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %46, ptr noundef nonnull align 16 dereferenceable(64) %47, ptr noundef nonnull align 16 dereferenceable(64) %48)
          to label %439 unwind label %471

439:                                              ; preds = %438
  invoke void @_ZN3JPHmlEfRKNS_5Mat44E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %45, float noundef %436, ptr noundef nonnull align 16 dereferenceable(64) %46)
          to label %440 unwind label %471

440:                                              ; preds = %439
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #11
  %441 = invoke noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44pLERKS0_(ptr noundef nonnull align 16 dereferenceable(64) %24, ptr noundef nonnull align 16 dereferenceable(64) %45)
          to label %442 unwind label %476

442:                                              ; preds = %440
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  br label %443

443:                                              ; preds = %442
  %444 = load ptr, ptr %29, align 8, !tbaa !5
  %445 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %444, i32 0, i32 1
  %446 = load ptr, ptr %445, align 8, !tbaa !54
  store ptr %446, ptr %29, align 8, !tbaa !5
  br label %373, !llvm.loop !55

447:                                              ; preds = %332, %319
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %7, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %8, align 4
  br label %489

451:                                              ; preds = %356, %339
  %452 = landingpad { ptr, i32 }
          cleanup
  %453 = extractvalue { ptr, i32 } %452, 0
  store ptr %453, ptr %7, align 8
  %454 = extractvalue { ptr, i32 } %452, 1
  store i32 %454, ptr %8, align 4
  br label %488

455:                                              ; preds = %387, %379
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %7, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %8, align 4
  br label %483

459:                                              ; preds = %416, %415, %410, %405, %394
  %460 = landingpad { ptr, i32 }
          cleanup
  %461 = extractvalue { ptr, i32 } %460, 0
  store ptr %461, ptr %7, align 8
  %462 = extractvalue { ptr, i32 } %460, 1
  store i32 %462, ptr %8, align 4
  br label %482

463:                                              ; preds = %433
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %7, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %8, align 4
  br label %481

467:                                              ; preds = %435
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %7, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %8, align 4
  br label %475

471:                                              ; preds = %439, %438, %437
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %7, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #11
  br label %475

475:                                              ; preds = %471, %467
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #11
  br label %480

476:                                              ; preds = %440
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %7, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %8, align 4
  br label %480

480:                                              ; preds = %476, %475
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #11
  br label %481

481:                                              ; preds = %480, %463
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %482

482:                                              ; preds = %481, %459
  call void @llvm.lifetime.end.p0(i64 64, ptr %36) #11
  br label %483

483:                                              ; preds = %482, %455
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  br label %488

484:                                              ; preds = %373
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %485

485:                                              ; preds = %484
  %486 = load ptr, ptr %26, align 8, !tbaa !5
  %487 = getelementptr inbounds ptr, ptr %486, i32 1
  store ptr %487, ptr %26, align 8, !tbaa !5
  br label %298

488:                                              ; preds = %483, %451
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #11
  br label %489

489:                                              ; preds = %488, %447
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %490

490:                                              ; preds = %489, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %491

491:                                              ; preds = %490, %311
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %1660

492:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 64, ptr %49) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %51) #11
  invoke void @_ZN3JPH5Mat449sIdentityEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %51)
          to label %493 unwind label %520

493:                                              ; preds = %492
  %494 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %24, i32 noundef 0, i32 noundef 0)
          to label %495 unwind label %520

495:                                              ; preds = %493
  %496 = load float, ptr %494, align 4, !tbaa !44
  %497 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %24, i32 noundef 1, i32 noundef 1)
          to label %498 unwind label %520

498:                                              ; preds = %495
  %499 = load float, ptr %497, align 4, !tbaa !44
  %500 = fadd float %496, %499
  %501 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %24, i32 noundef 2, i32 noundef 2)
          to label %502 unwind label %520

502:                                              ; preds = %498
  %503 = load float, ptr %501, align 4, !tbaa !44
  %504 = fadd float %500, %503
  invoke void @_ZNK3JPH5Mat44mlEf(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %50, ptr noundef nonnull align 16 dereferenceable(64) %51, float noundef %504)
          to label %505 unwind label %520

505:                                              ; preds = %502
  invoke void @_ZNK3JPH5Mat44miERKS0_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %49, ptr noundef nonnull align 16 dereferenceable(64) %50, ptr noundef nonnull align 16 dereferenceable(64) %24)
          to label %506 unwind label %520

506:                                              ; preds = %505
  %507 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %507, ptr align 16 %49, i64 64, i1 false), !tbaa.struct !57
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #11
  call void @llvm.lifetime.start.p0(i64 56, ptr %52) #11
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %52) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  %508 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %508, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %509 = load ptr, ptr %53, align 8, !tbaa !5
  %510 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %509)
          to label %511 unwind label %524

511:                                              ; preds = %506
  store ptr %510, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  %512 = load ptr, ptr %53, align 8, !tbaa !5
  %513 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %512)
          to label %514 unwind label %528

514:                                              ; preds = %511
  store ptr %513, ptr %55, align 8, !tbaa !5
  br label %515

515:                                              ; preds = %720, %514
  %516 = load ptr, ptr %54, align 8, !tbaa !5
  %517 = load ptr, ptr %55, align 8, !tbaa !5
  %518 = icmp ne ptr %516, %517
  br i1 %518, label %532, label %519

519:                                              ; preds = %515
  store i32 7, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %737

520:                                              ; preds = %505, %502, %498, %495, %493, %492
  %521 = landingpad { ptr, i32 }
          cleanup
  %522 = extractvalue { ptr, i32 } %521, 0
  store ptr %522, ptr %7, align 8
  %523 = extractvalue { ptr, i32 } %521, 1
  store i32 %523, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #11
  br label %1660

524:                                              ; preds = %506
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %7, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %8, align 4
  br label %736

528:                                              ; preds = %511
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %7, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %8, align 4
  br label %735

532:                                              ; preds = %515
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  %533 = load ptr, ptr %54, align 8, !tbaa !5
  %534 = load ptr, ptr %533, align 8, !tbaa !5
  store ptr %534, ptr %56, align 8, !tbaa !5
  br label %535

535:                                              ; preds = %532
  %536 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %537 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %536)
          to label %538 unwind label %544

538:                                              ; preds = %535
  %539 = icmp ule i64 %537, 65535
  br i1 %539, label %548, label %540

540:                                              ; preds = %538
  %541 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 132)
          to label %542 unwind label %544

542:                                              ; preds = %540
  br i1 %541, label %543, label %548

543:                                              ; preds = %542
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !58
  br label %548

544:                                              ; preds = %540, %535
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %7, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %8, align 4
  br label %734

548:                                              ; preds = %543, %542, %538
  br label %549

549:                                              ; preds = %548
  br label %550

550:                                              ; preds = %549
  call void @llvm.lifetime.start.p0(i64 2, ptr %58) #11
  %551 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %552 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %551)
          to label %553 unwind label %574

553:                                              ; preds = %550
  %554 = trunc i64 %552 to i16
  store i16 %554, ptr %58, align 2, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 2, ptr %59) #11
  store i16 0, ptr %59, align 2, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #11
  %555 = load ptr, ptr %56, align 8, !tbaa !5
  %556 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %555, i32 0, i32 3
  %557 = load ptr, ptr %556, align 8, !tbaa !46
  store ptr %557, ptr %60, align 8, !tbaa !5
  br label %558

558:                                              ; preds = %663, %553
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %559 = load ptr, ptr %60, align 8, !tbaa !5
  %560 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %559, i32 0, i32 3
  %561 = load i32, ptr %560, align 8, !tbaa !50
  store i32 %561, ptr %62, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #11
  %562 = invoke ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE4findERS7_(ptr noundef nonnull align 8 dereferenceable(56) %52, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %563 unwind label %578

563:                                              ; preds = %558
  %564 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %63, i32 0, i32 0
  %565 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %564, i32 0, i32 0
  store ptr %562, ptr %565, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  %566 = call ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %52) #11
  %567 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %64, i32 0, i32 0
  %568 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %567, i32 0, i32 0
  store ptr %566, ptr %568, align 8
  %569 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKihELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 8 dereferenceable(8) %64) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  br i1 %569, label %570, label %582

570:                                              ; preds = %563
  %571 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKihELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #11
  %572 = getelementptr inbounds %"struct.std::pair", ptr %571, i32 0, i32 1
  %573 = load i8, ptr %572, align 4, !tbaa !61
  store i8 %573, ptr %61, align 1, !tbaa !53
  br label %643

574:                                              ; preds = %550
  %575 = landingpad { ptr, i32 }
          cleanup
  %576 = extractvalue { ptr, i32 } %575, 0
  store ptr %576, ptr %7, align 8
  %577 = extractvalue { ptr, i32 } %575, 1
  store i32 %577, ptr %8, align 4
  br label %733

578:                                              ; preds = %655, %649, %644, %558
  %579 = landingpad { ptr, i32 }
          cleanup
  %580 = extractvalue { ptr, i32 } %579, 0
  store ptr %580, ptr %7, align 8
  %581 = extractvalue { ptr, i32 } %579, 1
  store i32 %581, ptr %8, align 4
  br label %723

582:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #11
  %583 = load ptr, ptr %5, align 8, !tbaa !5
  %584 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %583, i32 0, i32 2
  %585 = load i32, ptr %62, align 4, !tbaa !45
  %586 = sext i32 %585 to i64
  %587 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %584, i64 noundef %586)
          to label %588 unwind label %617

588:                                              ; preds = %582
  %589 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %66, ptr align 16 %589, i64 16, i1 false), !tbaa.struct !52
  %590 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %591 = load double, ptr %590, align 16
  %592 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %593 = load double, ptr %592, align 8
  %594 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %587, double %591, double %593)
          to label %595 unwind label %617

595:                                              ; preds = %588
  %596 = getelementptr inbounds %"class.JPH::Vec3", ptr %65, i32 0, i32 0
  %597 = getelementptr inbounds %union.anon.6, ptr %596, i32 0, i32 0
  %598 = getelementptr inbounds { double, double }, ptr %597, i32 0, i32 0
  %599 = extractvalue { double, double } %594, 0
  store double %599, ptr %598, align 16
  %600 = getelementptr inbounds { double, double }, ptr %597, i32 0, i32 1
  %601 = extractvalue { double, double } %594, 1
  store double %601, ptr %600, align 8
  %602 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %67, ptr align 16 %65, i64 16, i1 false), !tbaa.struct !52
  %603 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 0
  %604 = load double, ptr %603, align 16
  %605 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 1
  %606 = load double, ptr %605, align 8
  invoke void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %602, double %604, double %606)
          to label %607 unwind label %617

607:                                              ; preds = %595
  br label %608

608:                                              ; preds = %607
  %609 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %610 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %609)
          to label %611 unwind label %617

611:                                              ; preds = %608
  %612 = icmp ule i64 %610, 255
  br i1 %612, label %621, label %613

613:                                              ; preds = %611
  %614 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 159)
          to label %615 unwind label %617

615:                                              ; preds = %613
  br i1 %614, label %616, label %621

616:                                              ; preds = %615
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !63
  br label %621

617:                                              ; preds = %634, %623, %613, %608, %595, %588, %582
  %618 = landingpad { ptr, i32 }
          cleanup
  %619 = extractvalue { ptr, i32 } %618, 0
  store ptr %619, ptr %7, align 8
  %620 = extractvalue { ptr, i32 } %618, 1
  store i32 %620, ptr %8, align 4
  br label %642

621:                                              ; preds = %616, %615, %611
  br label %622

622:                                              ; preds = %621
  br label %623

623:                                              ; preds = %622
  %624 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %625 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %624)
          to label %626 unwind label %617

626:                                              ; preds = %623
  %627 = trunc i64 %625 to i8
  store i8 %627, ptr %61, align 1, !tbaa !53
  %628 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #11
  %629 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %629, ptr align 16 %65, i64 16, i1 false), !tbaa.struct !52
  %630 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 1
  store i32 0, ptr %630, align 16, !tbaa !64
  %631 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 2
  store i32 -1, ptr %631, align 4, !tbaa !45
  %632 = getelementptr inbounds i32, ptr %631, i64 1
  store i32 -1, ptr %632, align 4, !tbaa !45
  %633 = getelementptr inbounds i32, ptr %631, i64 2
  store i32 -1, ptr %633, align 4, !tbaa !45
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %628, ptr noundef nonnull align 16 dereferenceable(32) %69)
          to label %634 unwind label %638

634:                                              ; preds = %626
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #11
  %635 = load i8, ptr %61, align 1, !tbaa !53
  %636 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEixERS7_(ptr noundef nonnull align 8 dereferenceable(56) %52, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %637 unwind label %617

637:                                              ; preds = %634
  store i8 %635, ptr %636, align 1, !tbaa !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  br label %643

638:                                              ; preds = %626
  %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
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #11
  br label %642

642:                                              ; preds = %638, %617
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  br label %723

643:                                              ; preds = %637, %570
  br label %644

644:                                              ; preds = %643
  %645 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %646 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %645)
          to label %647 unwind label %578

647:                                              ; preds = %644
  %648 = icmp ult i64 %646, 65535
  br i1 %648, label %653, label %649

649:                                              ; preds = %647
  %650 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.6, ptr noundef @.str.4, i32 noundef 166)
          to label %651 unwind label %578

651:                                              ; preds = %649
  br i1 %650, label %652, label %653

652:                                              ; preds = %651
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !66
  br label %653

653:                                              ; preds = %652, %651, %647
  br label %654

654:                                              ; preds = %653
  br label %655

655:                                              ; preds = %654
  %656 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  invoke void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE9push_backERKh(ptr noundef nonnull align 8 dereferenceable(24) %656, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %657 unwind label %578

657:                                              ; preds = %655
  %658 = load i16, ptr %59, align 2, !tbaa !59
  %659 = add i16 %658, 1
  store i16 %659, ptr %59, align 2, !tbaa !59
  %660 = load ptr, ptr %60, align 8, !tbaa !5
  %661 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %660, i32 0, i32 1
  %662 = load ptr, ptr %661, align 8, !tbaa !54
  store ptr %662, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  br label %663

663:                                              ; preds = %657
  %664 = load ptr, ptr %60, align 8, !tbaa !5
  %665 = load ptr, ptr %56, align 8, !tbaa !5
  %666 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %665, i32 0, i32 3
  %667 = load ptr, ptr %666, align 8, !tbaa !46
  %668 = icmp ne ptr %664, %667
  br i1 %668, label %558, label %669, !llvm.loop !67

669:                                              ; preds = %663
  %670 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #11
  %671 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %71, i32 0, i32 0
  %672 = load i16, ptr %58, align 2, !tbaa !59
  store i16 %672, ptr %671, align 2, !tbaa !68
  %673 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %71, i32 0, i32 1
  %674 = load i16, ptr %59, align 2, !tbaa !59
  store i16 %674, ptr %673, align 2, !tbaa !70
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %670, ptr noundef nonnull align 2 dereferenceable(4) %71)
          to label %675 unwind label %724

675:                                              ; preds = %669
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #11
  %676 = load ptr, ptr %56, align 8, !tbaa !5
  %677 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %676, i32 0, i32 1
  %678 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %74, ptr align 16 %678, i64 16, i1 false), !tbaa.struct !52
  %679 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 0
  %680 = load double, ptr %679, align 16
  %681 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 1
  %682 = load double, ptr %681, align 8
  %683 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %677, double %680, double %682)
          to label %684 unwind label %728

684:                                              ; preds = %675
  %685 = getelementptr inbounds %"class.JPH::Vec3", ptr %73, i32 0, i32 0
  %686 = getelementptr inbounds %union.anon.6, ptr %685, i32 0, i32 0
  %687 = getelementptr inbounds { double, double }, ptr %686, i32 0, i32 0
  %688 = extractvalue { double, double } %683, 0
  store double %688, ptr %687, align 16
  %689 = getelementptr inbounds { double, double }, ptr %686, i32 0, i32 1
  %690 = extractvalue { double, double } %683, 1
  store double %690, ptr %689, align 8
  %691 = load ptr, ptr %56, align 8, !tbaa !5
  %692 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %691, i32 0, i32 0
  %693 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %692)
          to label %694 unwind label %728

694:                                              ; preds = %684
  %695 = getelementptr inbounds %"class.JPH::Vec3", ptr %75, i32 0, i32 0
  %696 = getelementptr inbounds %union.anon.6, ptr %695, i32 0, i32 0
  %697 = getelementptr inbounds { double, double }, ptr %696, i32 0, i32 0
  %698 = extractvalue { double, double } %693, 0
  store double %698, ptr %697, align 16
  %699 = getelementptr inbounds { double, double }, ptr %696, i32 0, i32 1
  %700 = extractvalue { double, double } %693, 1
  store double %700, ptr %699, align 8
  %701 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %702 = load double, ptr %701, align 16
  %703 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %704 = load double, ptr %703, align 8
  %705 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 0
  %706 = load double, ptr %705, align 16
  %707 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 1
  %708 = load double, ptr %707, align 8
  %709 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %702, double %704, double %706, double %708)
          to label %710 unwind label %728

710:                                              ; preds = %694
  %711 = getelementptr inbounds %"class.JPH::Plane", ptr %72, i32 0, i32 0
  %712 = getelementptr inbounds %"class.JPH::Vec4", ptr %711, i32 0, i32 0
  %713 = getelementptr inbounds %union.anon.7, ptr %712, i32 0, i32 0
  %714 = getelementptr inbounds { double, double }, ptr %713, i32 0, i32 0
  %715 = extractvalue { double, double } %709, 0
  store double %715, ptr %714, align 16
  %716 = getelementptr inbounds { double, double }, ptr %713, i32 0, i32 1
  %717 = extractvalue { double, double } %709, 1
  store double %717, ptr %716, align 8
  %718 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  invoke void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %718, ptr noundef nonnull align 16 dereferenceable(16) %72)
          to label %719 unwind label %728

719:                                              ; preds = %710
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 2, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 2, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %720

720:                                              ; preds = %719
  %721 = load ptr, ptr %54, align 8, !tbaa !5
  %722 = getelementptr inbounds ptr, ptr %721, i32 1
  store ptr %722, ptr %54, align 8, !tbaa !5
  br label %515

723:                                              ; preds = %642, %578
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #11
  br label %732

724:                                              ; preds = %669
  %725 = landingpad { ptr, i32 }
          cleanup
  %726 = extractvalue { ptr, i32 } %725, 0
  store ptr %726, ptr %7, align 8
  %727 = extractvalue { ptr, i32 } %725, 1
  store i32 %727, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  br label %732

728:                                              ; preds = %710, %694, %684, %675
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %7, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #11
  br label %732

732:                                              ; preds = %728, %724, %723
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 2, ptr %59) #11
  br label %733

733:                                              ; preds = %732, %574
  call void @llvm.lifetime.end.p0(i64 2, ptr %58) #11
  br label %734

734:                                              ; preds = %733, %544
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %735

735:                                              ; preds = %734, %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %736

736:                                              ; preds = %735, %524
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %1659

737:                                              ; preds = %519
  %738 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %739 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %738)
          to label %740 unwind label %750

740:                                              ; preds = %737
  %741 = icmp ugt i64 %739, 256
  br i1 %741, label %742, label %763

742:                                              ; preds = %740
  %743 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #11
  %744 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %745 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %744)
          to label %746 unwind label %754

746:                                              ; preds = %742
  %747 = trunc i64 %745 to i32
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef @.str.7, i32 noundef %747, i32 noundef 256)
          to label %748 unwind label %754

748:                                              ; preds = %746
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33) %743, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %749 unwind label %758

749:                                              ; preds = %748
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #11
  store i32 1, ptr %12, align 4
  br label %1641

750:                                              ; preds = %737
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %7, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %8, align 4
  br label %1659

754:                                              ; preds = %746, %742
  %755 = landingpad { ptr, i32 }
          cleanup
  %756 = extractvalue { ptr, i32 } %755, 0
  store ptr %756, ptr %7, align 8
  %757 = extractvalue { ptr, i32 } %755, 1
  store i32 %757, ptr %8, align 4
  br label %762

758:                                              ; preds = %748
  %759 = landingpad { ptr, i32 }
          cleanup
  %760 = extractvalue { ptr, i32 } %759, 0
  store ptr %760, ptr %7, align 8
  %761 = extractvalue { ptr, i32 } %759, 1
  store i32 %761, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #11
  br label %762

762:                                              ; preds = %758, %754
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #11
  br label %1659

763:                                              ; preds = %740
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #11
  store i32 0, ptr %77, align 4, !tbaa !45
  br label %764

764:                                              ; preds = %1169, %763
  %765 = load i32, ptr %77, align 4, !tbaa !45
  %766 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %767 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %766)
          to label %768 unwind label %772

768:                                              ; preds = %764
  %769 = trunc i64 %767 to i32
  %770 = icmp slt i32 %765, %769
  br i1 %770, label %776, label %771

771:                                              ; preds = %768
  store i32 17, ptr %12, align 4
  br label %1176

772:                                              ; preds = %764
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %7, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %8, align 4
  br label %1178

776:                                              ; preds = %768
  call void @llvm.lifetime.start.p0(i64 24, ptr %78) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #11
  store i32 0, ptr %79, align 4, !tbaa !45
  br label %777

777:                                              ; preds = %834, %776
  %778 = load i32, ptr %79, align 4, !tbaa !45
  %779 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  %780 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %779)
          to label %781 unwind label %785

781:                                              ; preds = %777
  %782 = trunc i64 %780 to i32
  %783 = icmp slt i32 %778, %782
  br i1 %783, label %789, label %784

784:                                              ; preds = %781
  store i32 20, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  br label %839

785:                                              ; preds = %777
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %7, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %8, align 4
  br label %838

789:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #11
  %790 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  %791 = load i32, ptr %79, align 4, !tbaa !45
  %792 = sext i32 %791 to i64
  %793 = invoke noundef nonnull align 2 dereferenceable(4) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %790, i64 noundef %792)
          to label %794 unwind label %803

794:                                              ; preds = %789
  store ptr %793, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #11
  store i32 0, ptr %81, align 4, !tbaa !45
  br label %795

795:                                              ; preds = %829, %794
  %796 = load i32, ptr %81, align 4, !tbaa !45
  %797 = load ptr, ptr %80, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %797, i32 0, i32 1
  %799 = load i16, ptr %798, align 2, !tbaa !70
  %800 = zext i16 %799 to i32
  %801 = icmp slt i32 %796, %800
  br i1 %801, label %807, label %802

802:                                              ; preds = %795
  store i32 23, ptr %12, align 4
  br label %832

803:                                              ; preds = %789
  %804 = landingpad { ptr, i32 }
          cleanup
  %805 = extractvalue { ptr, i32 } %804, 0
  store ptr %805, ptr %7, align 8
  %806 = extractvalue { ptr, i32 } %804, 1
  store i32 %806, ptr %8, align 4
  br label %837

807:                                              ; preds = %795
  %808 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %809 = load ptr, ptr %80, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %809, i32 0, i32 0
  %811 = load i16, ptr %810, align 2, !tbaa !68
  %812 = zext i16 %811 to i32
  %813 = load i32, ptr %81, align 4, !tbaa !45
  %814 = add nsw i32 %812, %813
  %815 = sext i32 %814 to i64
  %816 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %808, i64 noundef %815)
          to label %817 unwind label %824

817:                                              ; preds = %807
  %818 = load i8, ptr %816, align 1, !tbaa !53
  %819 = zext i8 %818 to i32
  %820 = load i32, ptr %77, align 4, !tbaa !45
  %821 = icmp eq i32 %819, %820
  br i1 %821, label %822, label %828

822:                                              ; preds = %817
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr noundef nonnull align 4 dereferenceable(4) %79)
          to label %823 unwind label %824

823:                                              ; preds = %822
  store i32 23, ptr %12, align 4
  br label %832

824:                                              ; preds = %822, %807
  %825 = landingpad { ptr, i32 }
          cleanup
  %826 = extractvalue { ptr, i32 } %825, 0
  store ptr %826, ptr %7, align 8
  %827 = extractvalue { ptr, i32 } %825, 1
  store i32 %827, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  br label %837

828:                                              ; preds = %817
  br label %829

829:                                              ; preds = %828
  %830 = load i32, ptr %81, align 4, !tbaa !45
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %81, align 4, !tbaa !45
  br label %795, !llvm.loop !71

832:                                              ; preds = %823, %802
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  br label %833

833:                                              ; preds = %832
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %79, align 4, !tbaa !45
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %79, align 4, !tbaa !45
  br label %777, !llvm.loop !72

837:                                              ; preds = %824, %803
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  br label %838

838:                                              ; preds = %837, %785
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  br label %1175

839:                                              ; preds = %784
  %840 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %841 unwind label %846

841:                                              ; preds = %839
  %842 = icmp ult i64 %840, 2
  br i1 %842, label %843, label %850

843:                                              ; preds = %841
  %844 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %844, ptr noundef @.str.8)
          to label %845 unwind label %846

845:                                              ; preds = %843
  store i32 1, ptr %12, align 4
  br label %1166

846:                                              ; preds = %843, %839
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %7, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %8, align 4
  br label %1175

850:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #11
  store float 0x3FA99999A0000000, ptr %82, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 12, ptr %83) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %83, ptr align 4 @__const.ConvexHullShape.best3, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #11
  %851 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.000000e+00)
          to label %852 unwind label %862

852:                                              ; preds = %850
  %853 = invoke noundef float @_ZN3JPH3CosEf(float noundef %851)
          to label %854 unwind label %862

854:                                              ; preds = %852
  store float %853, ptr %84, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %85, ptr align 4 @__const.ConvexHullShape.best2, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #11
  store i32 0, ptr %86, align 4, !tbaa !45
  br label %855

855:                                              ; preds = %1056, %854
  %856 = load i32, ptr %86, align 4, !tbaa !45
  %857 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %858 unwind label %866

858:                                              ; preds = %855
  %859 = trunc i64 %857 to i32
  %860 = icmp slt i32 %856, %859
  br i1 %860, label %870, label %861

861:                                              ; preds = %858
  store i32 26, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  br label %1061

862:                                              ; preds = %852, %850
  %863 = landingpad { ptr, i32 }
          cleanup
  %864 = extractvalue { ptr, i32 } %863, 0
  store ptr %864, ptr %7, align 8
  %865 = extractvalue { ptr, i32 } %863, 1
  store i32 %865, ptr %8, align 4
  br label %1174

866:                                              ; preds = %855
  %867 = landingpad { ptr, i32 }
          cleanup
  %868 = extractvalue { ptr, i32 } %867, 0
  store ptr %868, ptr %7, align 8
  %869 = extractvalue { ptr, i32 } %867, 1
  store i32 %869, ptr %8, align 4
  br label %1060

870:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 16, ptr %87) #11
  %871 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %872 = load i32, ptr %86, align 4, !tbaa !45
  %873 = sext i32 %872 to i64
  %874 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %873)
          to label %875 unwind label %897

875:                                              ; preds = %870
  %876 = load i32, ptr %874, align 4, !tbaa !45
  %877 = sext i32 %876 to i64
  %878 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %871, i64 noundef %877)
          to label %879 unwind label %897

879:                                              ; preds = %875
  %880 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %878)
          to label %881 unwind label %897

881:                                              ; preds = %879
  %882 = getelementptr inbounds %"class.JPH::Vec3", ptr %87, i32 0, i32 0
  %883 = getelementptr inbounds %union.anon.6, ptr %882, i32 0, i32 0
  %884 = getelementptr inbounds { double, double }, ptr %883, i32 0, i32 0
  %885 = extractvalue { double, double } %880, 0
  store double %885, ptr %884, align 16
  %886 = getelementptr inbounds { double, double }, ptr %883, i32 0, i32 1
  %887 = extractvalue { double, double } %880, 1
  store double %887, ptr %886, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #11
  %888 = load i32, ptr %86, align 4, !tbaa !45
  %889 = add nsw i32 %888, 1
  store i32 %889, ptr %88, align 4, !tbaa !45
  br label %890

890:                                              ; preds = %1048, %881
  %891 = load i32, ptr %88, align 4, !tbaa !45
  %892 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %893 unwind label %901

893:                                              ; preds = %890
  %894 = trunc i64 %892 to i32
  %895 = icmp slt i32 %891, %894
  br i1 %895, label %905, label %896

896:                                              ; preds = %893
  store i32 29, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  br label %1055

897:                                              ; preds = %879, %875, %870
  %898 = landingpad { ptr, i32 }
          cleanup
  %899 = extractvalue { ptr, i32 } %898, 0
  store ptr %899, ptr %7, align 8
  %900 = extractvalue { ptr, i32 } %898, 1
  store i32 %900, ptr %8, align 4
  br label %1059

901:                                              ; preds = %890
  %902 = landingpad { ptr, i32 }
          cleanup
  %903 = extractvalue { ptr, i32 } %902, 0
  store ptr %903, ptr %7, align 8
  %904 = extractvalue { ptr, i32 } %902, 1
  store i32 %904, ptr %8, align 4
  br label %1054

905:                                              ; preds = %893
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #11
  %906 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %907 = load i32, ptr %88, align 4, !tbaa !45
  %908 = sext i32 %907 to i64
  %909 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %908)
          to label %910 unwind label %958

910:                                              ; preds = %905
  %911 = load i32, ptr %909, align 4, !tbaa !45
  %912 = sext i32 %911 to i64
  %913 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %906, i64 noundef %912)
          to label %914 unwind label %958

914:                                              ; preds = %910
  %915 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %913)
          to label %916 unwind label %958

916:                                              ; preds = %914
  %917 = getelementptr inbounds %"class.JPH::Vec3", ptr %89, i32 0, i32 0
  %918 = getelementptr inbounds %union.anon.6, ptr %917, i32 0, i32 0
  %919 = getelementptr inbounds { double, double }, ptr %918, i32 0, i32 0
  %920 = extractvalue { double, double } %915, 0
  store double %920, ptr %919, align 16
  %921 = getelementptr inbounds { double, double }, ptr %918, i32 0, i32 1
  %922 = extractvalue { double, double } %915, 1
  store double %922, ptr %921, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %90) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %91, ptr align 16 %89, i64 16, i1 false), !tbaa.struct !52
  %923 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 0
  %924 = load double, ptr %923, align 16
  %925 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 1
  %926 = load double, ptr %925, align 8
  %927 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %87, double %924, double %926)
          to label %928 unwind label %962

928:                                              ; preds = %916
  %929 = getelementptr inbounds %"class.JPH::Vec3", ptr %90, i32 0, i32 0
  %930 = getelementptr inbounds %union.anon.6, ptr %929, i32 0, i32 0
  %931 = getelementptr inbounds { double, double }, ptr %930, i32 0, i32 0
  %932 = extractvalue { double, double } %927, 0
  store double %932, ptr %931, align 16
  %933 = getelementptr inbounds { double, double }, ptr %930, i32 0, i32 1
  %934 = extractvalue { double, double } %927, 1
  store double %934, ptr %933, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %93, ptr align 16 %89, i64 16, i1 false), !tbaa.struct !52
  %935 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %936 = load double, ptr %935, align 16
  %937 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %938 = load double, ptr %937, align 8
  %939 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %87, double %936, double %938)
          to label %940 unwind label %966

940:                                              ; preds = %928
  store float %939, ptr %92, align 4, !tbaa !44
  %941 = load float, ptr %92, align 4, !tbaa !44
  %942 = load float, ptr %84, align 4, !tbaa !44
  %943 = fcmp olt float %941, %942
  br i1 %943, label %944, label %970

944:                                              ; preds = %940
  %945 = load float, ptr %92, align 4, !tbaa !44
  store float %945, ptr %84, align 4, !tbaa !44
  %946 = load i32, ptr %86, align 4, !tbaa !45
  %947 = sext i32 %946 to i64
  %948 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %947)
          to label %949 unwind label %966

949:                                              ; preds = %944
  %950 = load i32, ptr %948, align 4, !tbaa !45
  %951 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 0
  store i32 %950, ptr %951, align 4, !tbaa !45
  %952 = load i32, ptr %88, align 4, !tbaa !45
  %953 = sext i32 %952 to i64
  %954 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %953)
          to label %955 unwind label %966

955:                                              ; preds = %949
  %956 = load i32, ptr %954, align 4, !tbaa !45
  %957 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 1
  store i32 %956, ptr %957, align 4, !tbaa !45
  br label %970

958:                                              ; preds = %914, %910, %905
  %959 = landingpad { ptr, i32 }
          cleanup
  %960 = extractvalue { ptr, i32 } %959, 0
  store ptr %960, ptr %7, align 8
  %961 = extractvalue { ptr, i32 } %959, 1
  store i32 %961, ptr %8, align 4
  br label %1053

962:                                              ; preds = %916
  %963 = landingpad { ptr, i32 }
          cleanup
  %964 = extractvalue { ptr, i32 } %963, 0
  store ptr %964, ptr %7, align 8
  %965 = extractvalue { ptr, i32 } %963, 1
  store i32 %965, ptr %8, align 4
  br label %1052

966:                                              ; preds = %949, %944, %928
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %7, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %8, align 4
  br label %1051

970:                                              ; preds = %955, %940
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #11
  %971 = load i32, ptr %88, align 4, !tbaa !45
  %972 = add nsw i32 %971, 1
  store i32 %972, ptr %94, align 4, !tbaa !45
  br label %973

973:                                              ; preds = %1042, %970
  %974 = load i32, ptr %94, align 4, !tbaa !45
  %975 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %976 unwind label %980

976:                                              ; preds = %973
  %977 = trunc i64 %975 to i32
  %978 = icmp slt i32 %974, %977
  br i1 %978, label %984, label %979

979:                                              ; preds = %976
  store i32 32, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #11
  br label %1047

980:                                              ; preds = %973
  %981 = landingpad { ptr, i32 }
          cleanup
  %982 = extractvalue { ptr, i32 } %981, 0
  store ptr %982, ptr %7, align 8
  %983 = extractvalue { ptr, i32 } %981, 1
  store i32 %983, ptr %8, align 4
  br label %1046

984:                                              ; preds = %976
  call void @llvm.lifetime.start.p0(i64 16, ptr %95) #11
  %985 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %986 = load i32, ptr %94, align 4, !tbaa !45
  %987 = sext i32 %986 to i64
  %988 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %987)
          to label %989 unwind label %1033

989:                                              ; preds = %984
  %990 = load i32, ptr %988, align 4, !tbaa !45
  %991 = sext i32 %990 to i64
  %992 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %985, i64 noundef %991)
          to label %993 unwind label %1033

993:                                              ; preds = %989
  %994 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %992)
          to label %995 unwind label %1033

995:                                              ; preds = %993
  %996 = getelementptr inbounds %"class.JPH::Vec3", ptr %95, i32 0, i32 0
  %997 = getelementptr inbounds %union.anon.6, ptr %996, i32 0, i32 0
  %998 = getelementptr inbounds { double, double }, ptr %997, i32 0, i32 0
  %999 = extractvalue { double, double } %994, 0
  store double %999, ptr %998, align 16
  %1000 = getelementptr inbounds { double, double }, ptr %997, i32 0, i32 1
  %1001 = extractvalue { double, double } %994, 1
  store double %1001, ptr %1000, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %97, ptr align 16 %95, i64 16, i1 false), !tbaa.struct !52
  %1002 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 0
  %1003 = load double, ptr %1002, align 16
  %1004 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 1
  %1005 = load double, ptr %1004, align 8
  %1006 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %90, double %1003, double %1005)
          to label %1007 unwind label %1037

1007:                                             ; preds = %995
  %1008 = invoke noundef float @_ZSt3absf(float noundef %1006)
          to label %1009 unwind label %1037

1009:                                             ; preds = %1007
  store float %1008, ptr %96, align 4, !tbaa !44
  %1010 = load float, ptr %96, align 4, !tbaa !44
  %1011 = load float, ptr %82, align 4, !tbaa !44
  %1012 = fcmp ogt float %1010, %1011
  br i1 %1012, label %1013, label %1041

1013:                                             ; preds = %1009
  %1014 = load float, ptr %96, align 4, !tbaa !44
  store float %1014, ptr %82, align 4, !tbaa !44
  %1015 = load i32, ptr %86, align 4, !tbaa !45
  %1016 = sext i32 %1015 to i64
  %1017 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1016)
          to label %1018 unwind label %1037

1018:                                             ; preds = %1013
  %1019 = load i32, ptr %1017, align 4, !tbaa !45
  %1020 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 0
  store i32 %1019, ptr %1020, align 4, !tbaa !45
  %1021 = load i32, ptr %88, align 4, !tbaa !45
  %1022 = sext i32 %1021 to i64
  %1023 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1022)
          to label %1024 unwind label %1037

1024:                                             ; preds = %1018
  %1025 = load i32, ptr %1023, align 4, !tbaa !45
  %1026 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 1
  store i32 %1025, ptr %1026, align 4, !tbaa !45
  %1027 = load i32, ptr %94, align 4, !tbaa !45
  %1028 = sext i32 %1027 to i64
  %1029 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1028)
          to label %1030 unwind label %1037

1030:                                             ; preds = %1024
  %1031 = load i32, ptr %1029, align 4, !tbaa !45
  %1032 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 2
  store i32 %1031, ptr %1032, align 4, !tbaa !45
  br label %1041

1033:                                             ; preds = %993, %989, %984
  %1034 = landingpad { ptr, i32 }
          cleanup
  %1035 = extractvalue { ptr, i32 } %1034, 0
  store ptr %1035, ptr %7, align 8
  %1036 = extractvalue { ptr, i32 } %1034, 1
  store i32 %1036, ptr %8, align 4
  br label %1045

1037:                                             ; preds = %1024, %1018, %1013, %1007, %995
  %1038 = landingpad { ptr, i32 }
          cleanup
  %1039 = extractvalue { ptr, i32 } %1038, 0
  store ptr %1039, ptr %7, align 8
  %1040 = extractvalue { ptr, i32 } %1038, 1
  store i32 %1040, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  br label %1045

1041:                                             ; preds = %1030, %1009
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #11
  br label %1042

1042:                                             ; preds = %1041
  %1043 = load i32, ptr %94, align 4, !tbaa !45
  %1044 = add nsw i32 %1043, 1
  store i32 %1044, ptr %94, align 4, !tbaa !45
  br label %973, !llvm.loop !73

1045:                                             ; preds = %1037, %1033
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #11
  br label %1046

1046:                                             ; preds = %1045, %980
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #11
  br label %1051

1047:                                             ; preds = %979
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #11
  br label %1048

1048:                                             ; preds = %1047
  %1049 = load i32, ptr %88, align 4, !tbaa !45
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %88, align 4, !tbaa !45
  br label %890, !llvm.loop !74

1051:                                             ; preds = %1046, %966
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #11
  br label %1052

1052:                                             ; preds = %1051, %962
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #11
  br label %1053

1053:                                             ; preds = %1052, %958
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #11
  br label %1054

1054:                                             ; preds = %1053, %901
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  br label %1059

1055:                                             ; preds = %896
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #11
  br label %1056

1056:                                             ; preds = %1055
  %1057 = load i32, ptr %86, align 4, !tbaa !45
  %1058 = add nsw i32 %1057, 1
  store i32 %1058, ptr %86, align 4, !tbaa !45
  br label %855, !llvm.loop !75

1059:                                             ; preds = %1054, %897
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #11
  br label %1060

1060:                                             ; preds = %1059, %866
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  br label %1173

1061:                                             ; preds = %861
  %1062 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 0
  %1063 = load i32, ptr %1062, align 4, !tbaa !45
  %1064 = icmp ne i32 %1063, -1
  br i1 %1064, label %1065, label %1086

1065:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 12, ptr %99) #11
  %1066 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 0
  %1067 = load i32, ptr %1066, align 4, !tbaa !45
  store i32 %1067, ptr %99, align 4, !tbaa !45
  %1068 = getelementptr inbounds i32, ptr %99, i64 1
  %1069 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 1
  %1070 = load i32, ptr %1069, align 4, !tbaa !45
  store i32 %1070, ptr %1068, align 4, !tbaa !45
  %1071 = getelementptr inbounds i32, ptr %99, i64 2
  %1072 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 2
  %1073 = load i32, ptr %1072, align 4, !tbaa !45
  store i32 %1073, ptr %1071, align 4, !tbaa !45
  %1074 = getelementptr inbounds %"class.std::initializer_list", ptr %98, i32 0, i32 0
  store ptr %99, ptr %1074, align 8, !tbaa !76
  %1075 = getelementptr inbounds %"class.std::initializer_list", ptr %98, i32 0, i32 1
  store i64 3, ptr %1075, align 8, !tbaa !78
  %1076 = getelementptr inbounds { ptr, i64 }, ptr %98, i32 0, i32 0
  %1077 = load ptr, ptr %1076, align 8
  %1078 = getelementptr inbounds { ptr, i64 }, ptr %98, i32 0, i32 1
  %1079 = load i64, ptr %1078, align 8
  %1080 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr %1077, i64 %1079)
          to label %1081 unwind label %1082

1081:                                             ; preds = %1065
  call void @llvm.lifetime.end.p0(i64 12, ptr %99) #11
  br label %1125

1082:                                             ; preds = %1065
  %1083 = landingpad { ptr, i32 }
          cleanup
  %1084 = extractvalue { ptr, i32 } %1083, 0
  store ptr %1084, ptr %7, align 8
  %1085 = extractvalue { ptr, i32 } %1083, 1
  store i32 %1085, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %99) #11
  br label %1173

1086:                                             ; preds = %1061
  %1087 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 0
  %1088 = load i32, ptr %1087, align 4, !tbaa !45
  %1089 = icmp ne i32 %1088, -1
  br i1 %1089, label %1090, label %1108

1090:                                             ; preds = %1086
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #11
  %1091 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 0
  %1092 = load i32, ptr %1091, align 4, !tbaa !45
  store i32 %1092, ptr %101, align 4, !tbaa !45
  %1093 = getelementptr inbounds i32, ptr %101, i64 1
  %1094 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 1
  %1095 = load i32, ptr %1094, align 4, !tbaa !45
  store i32 %1095, ptr %1093, align 4, !tbaa !45
  %1096 = getelementptr inbounds %"class.std::initializer_list", ptr %100, i32 0, i32 0
  store ptr %101, ptr %1096, align 8, !tbaa !76
  %1097 = getelementptr inbounds %"class.std::initializer_list", ptr %100, i32 0, i32 1
  store i64 2, ptr %1097, align 8, !tbaa !78
  %1098 = getelementptr inbounds { ptr, i64 }, ptr %100, i32 0, i32 0
  %1099 = load ptr, ptr %1098, align 8
  %1100 = getelementptr inbounds { ptr, i64 }, ptr %100, i32 0, i32 1
  %1101 = load i64, ptr %1100, align 8
  %1102 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr %1099, i64 %1101)
          to label %1103 unwind label %1104

1103:                                             ; preds = %1090
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  br label %1124

1104:                                             ; preds = %1090
  %1105 = landingpad { ptr, i32 }
          cleanup
  %1106 = extractvalue { ptr, i32 } %1105, 0
  store ptr %1106, ptr %7, align 8
  %1107 = extractvalue { ptr, i32 } %1105, 1
  store i32 %1107, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  br label %1173

1108:                                             ; preds = %1086
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #11
  %1109 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef 0)
          to label %1110 unwind label %1120

1110:                                             ; preds = %1108
  %1111 = load i32, ptr %1109, align 4, !tbaa !45
  store i32 %1111, ptr %103, align 4, !tbaa !45
  %1112 = getelementptr inbounds %"class.std::initializer_list", ptr %102, i32 0, i32 0
  store ptr %103, ptr %1112, align 8, !tbaa !76
  %1113 = getelementptr inbounds %"class.std::initializer_list", ptr %102, i32 0, i32 1
  store i64 1, ptr %1113, align 8, !tbaa !78
  %1114 = getelementptr inbounds { ptr, i64 }, ptr %102, i32 0, i32 0
  %1115 = load ptr, ptr %1114, align 8
  %1116 = getelementptr inbounds { ptr, i64 }, ptr %102, i32 0, i32 1
  %1117 = load i64, ptr %1116, align 8
  %1118 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr %1115, i64 %1117)
          to label %1119 unwind label %1120

1119:                                             ; preds = %1110
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #11
  br label %1124

1120:                                             ; preds = %1110, %1108
  %1121 = landingpad { ptr, i32 }
          cleanup
  %1122 = extractvalue { ptr, i32 } %1121, 0
  store ptr %1122, ptr %7, align 8
  %1123 = extractvalue { ptr, i32 } %1121, 1
  store i32 %1123, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #11
  br label %1173

1124:                                             ; preds = %1119, %1103
  br label %1125

1125:                                             ; preds = %1124, %1081
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #11
  %1126 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %1127 = load i32, ptr %77, align 4, !tbaa !45
  %1128 = sext i32 %1127 to i64
  %1129 = invoke noundef nonnull align 16 dereferenceable(32) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1126, i64 noundef %1128)
          to label %1130 unwind label %1143

1130:                                             ; preds = %1125
  store ptr %1129, ptr %104, align 8, !tbaa !5
  %1131 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %1132 unwind label %1143

1132:                                             ; preds = %1130
  %1133 = trunc i64 %1131 to i32
  %1134 = load ptr, ptr %104, align 8, !tbaa !5
  %1135 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1134, i32 0, i32 1
  store i32 %1133, ptr %1135, align 16, !tbaa !64
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #11
  store i32 0, ptr %105, align 4, !tbaa !45
  br label %1136

1136:                                             ; preds = %1162, %1132
  %1137 = load i32, ptr %105, align 4, !tbaa !45
  %1138 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %1139 unwind label %1147

1139:                                             ; preds = %1136
  %1140 = trunc i64 %1138 to i32
  %1141 = icmp slt i32 %1137, %1140
  br i1 %1141, label %1151, label %1142

1142:                                             ; preds = %1139
  store i32 35, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #11
  br label %1165

1143:                                             ; preds = %1130, %1125
  %1144 = landingpad { ptr, i32 }
          cleanup
  %1145 = extractvalue { ptr, i32 } %1144, 0
  store ptr %1145, ptr %7, align 8
  %1146 = extractvalue { ptr, i32 } %1144, 1
  store i32 %1146, ptr %8, align 4
  br label %1172

1147:                                             ; preds = %1151, %1136
  %1148 = landingpad { ptr, i32 }
          cleanup
  %1149 = extractvalue { ptr, i32 } %1148, 0
  store ptr %1149, ptr %7, align 8
  %1150 = extractvalue { ptr, i32 } %1148, 1
  store i32 %1150, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #11
  br label %1172

1151:                                             ; preds = %1139
  %1152 = load i32, ptr %105, align 4, !tbaa !45
  %1153 = sext i32 %1152 to i64
  %1154 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1153)
          to label %1155 unwind label %1147

1155:                                             ; preds = %1151
  %1156 = load i32, ptr %1154, align 4, !tbaa !45
  %1157 = load ptr, ptr %104, align 8, !tbaa !5
  %1158 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1157, i32 0, i32 2
  %1159 = load i32, ptr %105, align 4, !tbaa !45
  %1160 = sext i32 %1159 to i64
  %1161 = getelementptr inbounds [3 x i32], ptr %1158, i64 0, i64 %1160
  store i32 %1156, ptr %1161, align 4, !tbaa !45
  br label %1162

1162:                                             ; preds = %1155
  %1163 = load i32, ptr %105, align 4, !tbaa !45
  %1164 = add nsw i32 %1163, 1
  store i32 %1164, ptr %105, align 4, !tbaa !45
  br label %1136, !llvm.loop !79

1165:                                             ; preds = %1142
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %83) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  store i32 0, ptr %12, align 4
  br label %1166

1166:                                             ; preds = %1165, %845
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %78) #11
  %1167 = load i32, ptr %12, align 4
  switch i32 %1167, label %1176 [
    i32 0, label %1168
  ]

1168:                                             ; preds = %1166
  br label %1169

1169:                                             ; preds = %1168
  %1170 = load i32, ptr %77, align 4, !tbaa !45
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %77, align 4, !tbaa !45
  br label %764, !llvm.loop !80

1172:                                             ; preds = %1147, %1143
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  br label %1173

1173:                                             ; preds = %1172, %1120, %1104, %1082, %1060
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #11
  br label %1174

1174:                                             ; preds = %1173, %862
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %83) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  br label %1175

1175:                                             ; preds = %1174, %846, %838
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %78) #11
  br label %1178

1176:                                             ; preds = %1166, %771
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  %1177 = load i32, ptr %12, align 4
  switch i32 %1177, label %1641 [
    i32 17, label %1179
  ]

1178:                                             ; preds = %1175, %772
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  br label %1659

1179:                                             ; preds = %1176
  %1180 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %1181 = load float, ptr %1180, align 16, !tbaa !26
  %1182 = fcmp ogt float %1181, 0.000000e+00
  br i1 %1182, label %1183, label %1280

1183:                                             ; preds = %1179
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #11
  store float 0x47EFFFFFE0000000, ptr %106, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #11
  %1184 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  store ptr %1184, ptr %107, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #11
  %1185 = load ptr, ptr %107, align 8, !tbaa !5
  %1186 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1185)
          to label %1187 unwind label %1196

1187:                                             ; preds = %1183
  store ptr %1186, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #11
  %1188 = load ptr, ptr %107, align 8, !tbaa !5
  %1189 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1188)
          to label %1190 unwind label %1200

1190:                                             ; preds = %1187
  store ptr %1189, ptr %109, align 8, !tbaa !5
  br label %1191

1191:                                             ; preds = %1257, %1190
  %1192 = load ptr, ptr %108, align 8, !tbaa !5
  %1193 = load ptr, ptr %109, align 8, !tbaa !5
  %1194 = icmp ne ptr %1192, %1193
  br i1 %1194, label %1204, label %1195

1195:                                             ; preds = %1191
  store i32 38, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #11
  br label %1267

1196:                                             ; preds = %1183
  %1197 = landingpad { ptr, i32 }
          cleanup
  %1198 = extractvalue { ptr, i32 } %1197, 0
  store ptr %1198, ptr %7, align 8
  %1199 = extractvalue { ptr, i32 } %1197, 1
  store i32 %1199, ptr %8, align 4
  br label %1266

1200:                                             ; preds = %1187
  %1201 = landingpad { ptr, i32 }
          cleanup
  %1202 = extractvalue { ptr, i32 } %1201, 0
  store ptr %1202, ptr %7, align 8
  %1203 = extractvalue { ptr, i32 } %1201, 1
  store i32 %1203, ptr %8, align 4
  br label %1265

1204:                                             ; preds = %1191
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #11
  %1205 = load ptr, ptr %108, align 8, !tbaa !5
  store ptr %1205, ptr %110, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #11
  store float 0.000000e+00, ptr %111, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #11
  %1206 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  store ptr %1206, ptr %112, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #11
  %1207 = load ptr, ptr %112, align 8, !tbaa !5
  %1208 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1207)
          to label %1209 unwind label %1218

1209:                                             ; preds = %1204
  store ptr %1208, ptr %113, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #11
  %1210 = load ptr, ptr %112, align 8, !tbaa !5
  %1211 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1210)
          to label %1212 unwind label %1222

1212:                                             ; preds = %1209
  store ptr %1211, ptr %114, align 8, !tbaa !5
  br label %1213

1213:                                             ; preds = %1248, %1212
  %1214 = load ptr, ptr %113, align 8, !tbaa !5
  %1215 = load ptr, ptr %114, align 8, !tbaa !5
  %1216 = icmp ne ptr %1214, %1215
  br i1 %1216, label %1226, label %1217

1217:                                             ; preds = %1213
  store i32 40, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1253

1218:                                             ; preds = %1204
  %1219 = landingpad { ptr, i32 }
          cleanup
  %1220 = extractvalue { ptr, i32 } %1219, 0
  store ptr %1220, ptr %7, align 8
  %1221 = extractvalue { ptr, i32 } %1219, 1
  store i32 %1221, ptr %8, align 4
  br label %1252

1222:                                             ; preds = %1209
  %1223 = landingpad { ptr, i32 }
          cleanup
  %1224 = extractvalue { ptr, i32 } %1223, 0
  store ptr %1224, ptr %7, align 8
  %1225 = extractvalue { ptr, i32 } %1223, 1
  store i32 %1225, ptr %8, align 4
  br label %1251

1226:                                             ; preds = %1213
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #11
  %1227 = load ptr, ptr %113, align 8, !tbaa !5
  store ptr %1227, ptr %115, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #11
  %1228 = load ptr, ptr %110, align 8, !tbaa !5
  %1229 = load ptr, ptr %115, align 8, !tbaa !5
  %1230 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1229, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %117, ptr align 16 %1230, i64 16, i1 false), !tbaa.struct !52
  %1231 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 0
  %1232 = load double, ptr %1231, align 16
  %1233 = getelementptr inbounds { double, double }, ptr %117, i32 0, i32 1
  %1234 = load double, ptr %1233, align 8
  %1235 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %1228, double %1232, double %1234)
          to label %1236 unwind label %1243

1236:                                             ; preds = %1226
  %1237 = fneg float %1235
  store float %1237, ptr %116, align 4, !tbaa !44
  %1238 = load float, ptr %116, align 4, !tbaa !44
  %1239 = load float, ptr %111, align 4, !tbaa !44
  %1240 = fcmp ogt float %1238, %1239
  br i1 %1240, label %1241, label %1247

1241:                                             ; preds = %1236
  %1242 = load float, ptr %116, align 4, !tbaa !44
  store float %1242, ptr %111, align 4, !tbaa !44
  br label %1247

1243:                                             ; preds = %1226
  %1244 = landingpad { ptr, i32 }
          cleanup
  %1245 = extractvalue { ptr, i32 } %1244, 0
  store ptr %1245, ptr %7, align 8
  %1246 = extractvalue { ptr, i32 } %1244, 1
  store i32 %1246, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  br label %1251

1247:                                             ; preds = %1241, %1236
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  br label %1248

1248:                                             ; preds = %1247
  %1249 = load ptr, ptr %113, align 8, !tbaa !5
  %1250 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1249, i32 1
  store ptr %1250, ptr %113, align 8, !tbaa !5
  br label %1213

1251:                                             ; preds = %1243, %1222
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #11
  br label %1252

1252:                                             ; preds = %1251, %1218
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1264

1253:                                             ; preds = %1217
  %1254 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %106, ptr noundef nonnull align 4 dereferenceable(4) %111)
          to label %1255 unwind label %1260

1255:                                             ; preds = %1253
  %1256 = load float, ptr %1254, align 4, !tbaa !44
  store float %1256, ptr %106, align 4, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #11
  br label %1257

1257:                                             ; preds = %1255
  %1258 = load ptr, ptr %108, align 8, !tbaa !5
  %1259 = getelementptr inbounds %"class.JPH::Plane", ptr %1258, i32 1
  store ptr %1259, ptr %108, align 8, !tbaa !5
  br label %1191

1260:                                             ; preds = %1253
  %1261 = landingpad { ptr, i32 }
          cleanup
  %1262 = extractvalue { ptr, i32 } %1261, 0
  store ptr %1262, ptr %7, align 8
  %1263 = extractvalue { ptr, i32 } %1261, 1
  store i32 %1263, ptr %8, align 4
  br label %1264

1264:                                             ; preds = %1260, %1252
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #11
  br label %1265

1265:                                             ; preds = %1264, %1200
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #11
  br label %1266

1266:                                             ; preds = %1265, %1196
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #11
  br label %1279

1267:                                             ; preds = %1195
  %1268 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #11
  %1269 = load float, ptr %106, align 4, !tbaa !44
  %1270 = fmul float 5.000000e-01, %1269
  store float %1270, ptr %118, align 4, !tbaa !44
  %1271 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1268, ptr noundef nonnull align 4 dereferenceable(4) %118)
          to label %1272 unwind label %1275

1272:                                             ; preds = %1267
  %1273 = load float, ptr %1271, align 4, !tbaa !44
  %1274 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  store float %1273, ptr %1274, align 16, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #11
  br label %1280

1275:                                             ; preds = %1267
  %1276 = landingpad { ptr, i32 }
          cleanup
  %1277 = extractvalue { ptr, i32 } %1276, 0
  store ptr %1277, ptr %7, align 8
  %1278 = extractvalue { ptr, i32 } %1276, 1
  store i32 %1278, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #11
  br label %1279

1279:                                             ; preds = %1275, %1266
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #11
  br label %1659

1280:                                             ; preds = %1272, %1179
  %1281 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %1282 = load float, ptr %1281, align 16, !tbaa !26
  %1283 = fcmp ogt float %1282, 0.000000e+00
  br i1 %1283, label %1284, label %1590

1284:                                             ; preds = %1280
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #11
  %1285 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  store ptr %1285, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #11
  %1286 = load ptr, ptr %119, align 8, !tbaa !5
  %1287 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1286)
          to label %1288 unwind label %1297

1288:                                             ; preds = %1284
  store ptr %1287, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #11
  %1289 = load ptr, ptr %119, align 8, !tbaa !5
  %1290 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1289)
          to label %1291 unwind label %1301

1291:                                             ; preds = %1288
  store ptr %1290, ptr %121, align 8, !tbaa !5
  br label %1292

1292:                                             ; preds = %1583, %1291
  %1293 = load ptr, ptr %120, align 8, !tbaa !5
  %1294 = load ptr, ptr %121, align 8, !tbaa !5
  %1295 = icmp ne ptr %1293, %1294
  br i1 %1295, label %1305, label %1296

1296:                                             ; preds = %1292
  store i32 42, ptr %12, align 4
  br label %1586

1297:                                             ; preds = %1284
  %1298 = landingpad { ptr, i32 }
          cleanup
  %1299 = extractvalue { ptr, i32 } %1298, 0
  store ptr %1299, ptr %7, align 8
  %1300 = extractvalue { ptr, i32 } %1298, 1
  store i32 %1300, ptr %8, align 4
  br label %1588

1301:                                             ; preds = %1288
  %1302 = landingpad { ptr, i32 }
          cleanup
  %1303 = extractvalue { ptr, i32 } %1302, 0
  store ptr %1303, ptr %7, align 8
  %1304 = extractvalue { ptr, i32 } %1302, 1
  store i32 %1304, ptr %8, align 4
  br label %1587

1305:                                             ; preds = %1292
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #11
  %1306 = load ptr, ptr %120, align 8, !tbaa !5
  store ptr %1306, ptr %122, align 8, !tbaa !5
  %1307 = load ptr, ptr %122, align 8, !tbaa !5
  %1308 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1307, i32 0, i32 1
  %1309 = load i32, ptr %1308, align 16, !tbaa !64
  %1310 = icmp ne i32 %1309, 1
  br i1 %1310, label %1311, label %1579

1311:                                             ; preds = %1305
  call void @llvm.lifetime.start.p0(i64 16, ptr %123) #11
  %1312 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %1313 = load ptr, ptr %122, align 8, !tbaa !5
  %1314 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1313, i32 0, i32 2
  %1315 = getelementptr inbounds [3 x i32], ptr %1314, i64 0, i64 0
  %1316 = load i32, ptr %1315, align 4, !tbaa !45
  %1317 = sext i32 %1316 to i64
  %1318 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1312, i64 noundef %1317)
          to label %1319 unwind label %1349

1319:                                             ; preds = %1311
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %123, ptr align 16 %1318, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.start.p0(i64 16, ptr %124) #11
  %1320 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %1321 = load ptr, ptr %122, align 8, !tbaa !5
  %1322 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1321, i32 0, i32 2
  %1323 = getelementptr inbounds [3 x i32], ptr %1322, i64 0, i64 1
  %1324 = load i32, ptr %1323, align 4, !tbaa !45
  %1325 = sext i32 %1324 to i64
  %1326 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1320, i64 noundef %1325)
          to label %1327 unwind label %1353

1327:                                             ; preds = %1319
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %124, ptr align 16 %1326, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.start.p0(i64 16, ptr %125) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %126) #11
  %1328 = load ptr, ptr %122, align 8, !tbaa !5
  %1329 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1328, i32 0, i32 1
  %1330 = load i32, ptr %1329, align 16, !tbaa !64
  %1331 = icmp eq i32 %1330, 3
  br i1 %1331, label %1332, label %1365

1332:                                             ; preds = %1327
  %1333 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %1334 = load ptr, ptr %122, align 8, !tbaa !5
  %1335 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1334, i32 0, i32 2
  %1336 = getelementptr inbounds [3 x i32], ptr %1335, i64 0, i64 2
  %1337 = load i32, ptr %1336, align 4, !tbaa !45
  %1338 = sext i32 %1337 to i64
  %1339 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1333, i64 noundef %1338)
          to label %1340 unwind label %1357

1340:                                             ; preds = %1332
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %125, ptr align 16 %1339, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.start.p0(i64 16, ptr %127) #11
  %1341 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %1342 unwind label %1361

1342:                                             ; preds = %1340
  %1343 = getelementptr inbounds %"class.JPH::Vec3", ptr %127, i32 0, i32 0
  %1344 = getelementptr inbounds %union.anon.6, ptr %1343, i32 0, i32 0
  %1345 = getelementptr inbounds { double, double }, ptr %1344, i32 0, i32 0
  %1346 = extractvalue { double, double } %1341, 0
  store double %1346, ptr %1345, align 16
  %1347 = getelementptr inbounds { double, double }, ptr %1344, i32 0, i32 1
  %1348 = extractvalue { double, double } %1341, 1
  store double %1348, ptr %1347, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %126, ptr align 16 %127, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr %127) #11
  br label %1434

1349:                                             ; preds = %1311
  %1350 = landingpad { ptr, i32 }
          cleanup
  %1351 = extractvalue { ptr, i32 } %1350, 0
  store ptr %1351, ptr %7, align 8
  %1352 = extractvalue { ptr, i32 } %1350, 1
  store i32 %1352, ptr %8, align 4
  br label %1578

1353:                                             ; preds = %1319
  %1354 = landingpad { ptr, i32 }
          cleanup
  %1355 = extractvalue { ptr, i32 } %1354, 0
  store ptr %1355, ptr %7, align 8
  %1356 = extractvalue { ptr, i32 } %1354, 1
  store i32 %1356, ptr %8, align 4
  br label %1577

1357:                                             ; preds = %1371, %1332
  %1358 = landingpad { ptr, i32 }
          cleanup
  %1359 = extractvalue { ptr, i32 } %1358, 0
  store ptr %1359, ptr %7, align 8
  %1360 = extractvalue { ptr, i32 } %1358, 1
  store i32 %1360, ptr %8, align 4
  br label %1576

1361:                                             ; preds = %1340
  %1362 = landingpad { ptr, i32 }
          cleanup
  %1363 = extractvalue { ptr, i32 } %1362, 0
  store ptr %1363, ptr %7, align 8
  %1364 = extractvalue { ptr, i32 } %1362, 1
  store i32 %1364, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %127) #11
  br label %1576

1365:                                             ; preds = %1327
  br label %1366

1366:                                             ; preds = %1365
  %1367 = load ptr, ptr %122, align 8, !tbaa !5
  %1368 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1367, i32 0, i32 1
  %1369 = load i32, ptr %1368, align 16, !tbaa !64
  %1370 = icmp eq i32 %1369, 2
  br i1 %1370, label %1375, label %1371

1371:                                             ; preds = %1366
  %1372 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.4, i32 noundef 313)
          to label %1373 unwind label %1357

1373:                                             ; preds = %1371
  br i1 %1372, label %1374, label %1375

1374:                                             ; preds = %1373
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !81
  br label %1375

1375:                                             ; preds = %1374, %1373, %1366
  br label %1376

1376:                                             ; preds = %1375
  br label %1377

1377:                                             ; preds = %1376
  call void @llvm.lifetime.start.p0(i64 16, ptr %129) #11
  %1378 = load ptr, ptr %122, align 8, !tbaa !5
  %1379 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1378, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %130, ptr align 16 %1379, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.start.p0(i64 16, ptr %132) #11
  %1380 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %123)
          to label %1381 unwind label %1426

1381:                                             ; preds = %1377
  %1382 = getelementptr inbounds %"class.JPH::Vec3", ptr %132, i32 0, i32 0
  %1383 = getelementptr inbounds %union.anon.6, ptr %1382, i32 0, i32 0
  %1384 = getelementptr inbounds { double, double }, ptr %1383, i32 0, i32 0
  %1385 = extractvalue { double, double } %1380, 0
  store double %1385, ptr %1384, align 16
  %1386 = getelementptr inbounds { double, double }, ptr %1383, i32 0, i32 1
  %1387 = extractvalue { double, double } %1380, 1
  store double %1387, ptr %1386, align 8
  %1388 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %124)
          to label %1389 unwind label %1426

1389:                                             ; preds = %1381
  %1390 = getelementptr inbounds %"class.JPH::Vec3", ptr %133, i32 0, i32 0
  %1391 = getelementptr inbounds %union.anon.6, ptr %1390, i32 0, i32 0
  %1392 = getelementptr inbounds { double, double }, ptr %1391, i32 0, i32 0
  %1393 = extractvalue { double, double } %1388, 0
  store double %1393, ptr %1392, align 16
  %1394 = getelementptr inbounds { double, double }, ptr %1391, i32 0, i32 1
  %1395 = extractvalue { double, double } %1388, 1
  store double %1395, ptr %1394, align 8
  %1396 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 0
  %1397 = load double, ptr %1396, align 16
  %1398 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 1
  %1399 = load double, ptr %1398, align 8
  %1400 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %132, double %1397, double %1399)
          to label %1401 unwind label %1426

1401:                                             ; preds = %1389
  %1402 = getelementptr inbounds %"class.JPH::Vec3", ptr %131, i32 0, i32 0
  %1403 = getelementptr inbounds %union.anon.6, ptr %1402, i32 0, i32 0
  %1404 = getelementptr inbounds { double, double }, ptr %1403, i32 0, i32 0
  %1405 = extractvalue { double, double } %1400, 0
  store double %1405, ptr %1404, align 16
  %1406 = getelementptr inbounds { double, double }, ptr %1403, i32 0, i32 1
  %1407 = extractvalue { double, double } %1400, 1
  store double %1407, ptr %1406, align 8
  %1408 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 0
  %1409 = load double, ptr %1408, align 16
  %1410 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 1
  %1411 = load double, ptr %1410, align 8
  %1412 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 0
  %1413 = load double, ptr %1412, align 16
  %1414 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 1
  %1415 = load double, ptr %1414, align 8
  %1416 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %1409, double %1411, double %1413, double %1415)
          to label %1417 unwind label %1426

1417:                                             ; preds = %1401
  %1418 = getelementptr inbounds %"class.JPH::Plane", ptr %129, i32 0, i32 0
  %1419 = getelementptr inbounds %"class.JPH::Vec4", ptr %1418, i32 0, i32 0
  %1420 = getelementptr inbounds %union.anon.7, ptr %1419, i32 0, i32 0
  %1421 = getelementptr inbounds { double, double }, ptr %1420, i32 0, i32 0
  %1422 = extractvalue { double, double } %1416, 0
  store double %1422, ptr %1421, align 16
  %1423 = getelementptr inbounds { double, double }, ptr %1420, i32 0, i32 1
  %1424 = extractvalue { double, double } %1416, 1
  store double %1424, ptr %1423, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %125, ptr align 16 %129, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr %132) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %129) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %134) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %134, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
          to label %1425 unwind label %1430

1425:                                             ; preds = %1417
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %126, ptr align 16 %134, i64 16, i1 false), !tbaa.struct !52
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #11
  br label %1434

1426:                                             ; preds = %1401, %1389, %1381, %1377
  %1427 = landingpad { ptr, i32 }
          cleanup
  %1428 = extractvalue { ptr, i32 } %1427, 0
  store ptr %1428, ptr %7, align 8
  %1429 = extractvalue { ptr, i32 } %1427, 1
  store i32 %1429, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %132) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %129) #11
  br label %1576

1430:                                             ; preds = %1417
  %1431 = landingpad { ptr, i32 }
          cleanup
  %1432 = extractvalue { ptr, i32 } %1431, 0
  store ptr %1432, ptr %7, align 8
  %1433 = extractvalue { ptr, i32 } %1431, 1
  store i32 %1433, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #11
  br label %1576

1434:                                             ; preds = %1425, %1342
  call void @llvm.lifetime.start.p0(i64 64, ptr %135) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %136) #11
  %1435 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %123)
          to label %1436 unwind label %1499

1436:                                             ; preds = %1434
  %1437 = getelementptr inbounds %"class.JPH::Vec3", ptr %138, i32 0, i32 0
  %1438 = getelementptr inbounds %union.anon.6, ptr %1437, i32 0, i32 0
  %1439 = getelementptr inbounds { double, double }, ptr %1438, i32 0, i32 0
  %1440 = extractvalue { double, double } %1435, 0
  store double %1440, ptr %1439, align 16
  %1441 = getelementptr inbounds { double, double }, ptr %1438, i32 0, i32 1
  %1442 = extractvalue { double, double } %1435, 1
  store double %1442, ptr %1441, align 8
  %1443 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 0
  %1444 = load double, ptr %1443, align 16
  %1445 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 1
  %1446 = load double, ptr %1445, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %137, double %1444, double %1446, float noundef 0.000000e+00)
          to label %1447 unwind label %1499

1447:                                             ; preds = %1436
  %1448 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %124)
          to label %1449 unwind label %1499

1449:                                             ; preds = %1447
  %1450 = getelementptr inbounds %"class.JPH::Vec3", ptr %140, i32 0, i32 0
  %1451 = getelementptr inbounds %union.anon.6, ptr %1450, i32 0, i32 0
  %1452 = getelementptr inbounds { double, double }, ptr %1451, i32 0, i32 0
  %1453 = extractvalue { double, double } %1448, 0
  store double %1453, ptr %1452, align 16
  %1454 = getelementptr inbounds { double, double }, ptr %1451, i32 0, i32 1
  %1455 = extractvalue { double, double } %1448, 1
  store double %1455, ptr %1454, align 8
  %1456 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 0
  %1457 = load double, ptr %1456, align 16
  %1458 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 1
  %1459 = load double, ptr %1458, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %139, double %1457, double %1459, float noundef 0.000000e+00)
          to label %1460 unwind label %1499

1460:                                             ; preds = %1449
  %1461 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %125)
          to label %1462 unwind label %1499

1462:                                             ; preds = %1460
  %1463 = getelementptr inbounds %"class.JPH::Vec3", ptr %142, i32 0, i32 0
  %1464 = getelementptr inbounds %union.anon.6, ptr %1463, i32 0, i32 0
  %1465 = getelementptr inbounds { double, double }, ptr %1464, i32 0, i32 0
  %1466 = extractvalue { double, double } %1461, 0
  store double %1466, ptr %1465, align 16
  %1467 = getelementptr inbounds { double, double }, ptr %1464, i32 0, i32 1
  %1468 = extractvalue { double, double } %1461, 1
  store double %1468, ptr %1467, align 8
  %1469 = getelementptr inbounds { double, double }, ptr %142, i32 0, i32 0
  %1470 = load double, ptr %1469, align 16
  %1471 = getelementptr inbounds { double, double }, ptr %142, i32 0, i32 1
  %1472 = load double, ptr %1471, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %141, double %1470, double %1472, float noundef 0.000000e+00)
          to label %1473 unwind label %1499

1473:                                             ; preds = %1462
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %143, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %1474 unwind label %1499

1474:                                             ; preds = %1473
  %1475 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 0
  %1476 = load double, ptr %1475, align 16
  %1477 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 1
  %1478 = load double, ptr %1477, align 8
  %1479 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 0
  %1480 = load double, ptr %1479, align 16
  %1481 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 1
  %1482 = load double, ptr %1481, align 8
  %1483 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 0
  %1484 = load double, ptr %1483, align 16
  %1485 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 1
  %1486 = load double, ptr %1485, align 8
  %1487 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 0
  %1488 = load double, ptr %1487, align 16
  %1489 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 1
  %1490 = load double, ptr %1489, align 8
  invoke void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %136, double %1476, double %1478, double %1480, double %1482, double %1484, double %1486, double %1488, double %1490)
          to label %1491 unwind label %1499

1491:                                             ; preds = %1474
  invoke void @_ZNK3JPH5Mat4410TransposedEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %135, ptr noundef nonnull align 16 dereferenceable(64) %136)
          to label %1492 unwind label %1499

1492:                                             ; preds = %1491
  call void @llvm.lifetime.end.p0(i64 64, ptr %136) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #11
  %1493 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %135)
          to label %1494 unwind label %1503

1494:                                             ; preds = %1492
  store float %1493, ptr %144, align 4, !tbaa !44
  %1495 = load float, ptr %144, align 4, !tbaa !44
  %1496 = fcmp oeq float %1495, 0.000000e+00
  br i1 %1496, label %1497, label %1507

1497:                                             ; preds = %1494
  %1498 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  store float 0.000000e+00, ptr %1498, align 16, !tbaa !26
  store i32 42, ptr %12, align 4
  br label %1565

1499:                                             ; preds = %1491, %1474, %1473, %1462, %1460, %1449, %1447, %1436, %1434
  %1500 = landingpad { ptr, i32 }
          cleanup
  %1501 = extractvalue { ptr, i32 } %1500, 0
  store ptr %1501, ptr %7, align 8
  %1502 = extractvalue { ptr, i32 } %1500, 1
  store i32 %1502, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %136) #11
  br label %1575

1503:                                             ; preds = %1492
  %1504 = landingpad { ptr, i32 }
          cleanup
  %1505 = extractvalue { ptr, i32 } %1504, 0
  store ptr %1505, ptr %7, align 8
  %1506 = extractvalue { ptr, i32 } %1504, 1
  store i32 %1506, ptr %8, align 4
  br label %1574

1507:                                             ; preds = %1494
  call void @llvm.lifetime.start.p0(i64 64, ptr %145) #11
  invoke void @_ZNK3JPH5Mat4412Adjointed3x3Ev(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %145, ptr noundef nonnull align 16 dereferenceable(64) %135)
          to label %1508 unwind label %1539

1508:                                             ; preds = %1507
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %147) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %148) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %149, ptr align 16 %126, i64 16, i1 false), !tbaa.struct !52
  %1509 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %1510 = load double, ptr %1509, align 16
  %1511 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %1512 = load double, ptr %1511, align 8
  %1513 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %145, double %1510, double %1512)
          to label %1514 unwind label %1543

1514:                                             ; preds = %1508
  %1515 = getelementptr inbounds %"class.JPH::Vec3", ptr %148, i32 0, i32 0
  %1516 = getelementptr inbounds %union.anon.6, ptr %1515, i32 0, i32 0
  %1517 = getelementptr inbounds { double, double }, ptr %1516, i32 0, i32 0
  %1518 = extractvalue { double, double } %1513, 0
  store double %1518, ptr %1517, align 16
  %1519 = getelementptr inbounds { double, double }, ptr %1516, i32 0, i32 1
  %1520 = extractvalue { double, double } %1513, 1
  store double %1520, ptr %1519, align 8
  %1521 = load float, ptr %144, align 4, !tbaa !44
  %1522 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %148, float noundef %1521)
          to label %1523 unwind label %1543

1523:                                             ; preds = %1514
  %1524 = getelementptr inbounds %"class.JPH::Vec3", ptr %147, i32 0, i32 0
  %1525 = getelementptr inbounds %union.anon.6, ptr %1524, i32 0, i32 0
  %1526 = getelementptr inbounds { double, double }, ptr %1525, i32 0, i32 0
  %1527 = extractvalue { double, double } %1522, 0
  store double %1527, ptr %1526, align 16
  %1528 = getelementptr inbounds { double, double }, ptr %1525, i32 0, i32 1
  %1529 = extractvalue { double, double } %1522, 1
  store double %1529, ptr %1528, align 8
  %1530 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %147)
          to label %1531 unwind label %1543

1531:                                             ; preds = %1523
  call void @llvm.lifetime.end.p0(i64 16, ptr %148) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %147) #11
  store float %1530, ptr %146, align 4, !tbaa !44
  br label %1532

1532:                                             ; preds = %1531
  %1533 = load float, ptr %146, align 4, !tbaa !44
  %1534 = fcmp ogt float %1533, 1.000000e+00
  br i1 %1534, label %1551, label %1535

1535:                                             ; preds = %1532
  %1536 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 341)
          to label %1537 unwind label %1547

1537:                                             ; preds = %1535
  br i1 %1536, label %1538, label %1551

1538:                                             ; preds = %1537
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !82
  br label %1551

1539:                                             ; preds = %1507
  %1540 = landingpad { ptr, i32 }
          cleanup
  %1541 = extractvalue { ptr, i32 } %1540, 0
  store ptr %1541, ptr %7, align 8
  %1542 = extractvalue { ptr, i32 } %1540, 1
  store i32 %1542, ptr %8, align 4
  br label %1573

1543:                                             ; preds = %1523, %1514, %1508
  %1544 = landingpad { ptr, i32 }
          cleanup
  %1545 = extractvalue { ptr, i32 } %1544, 0
  store ptr %1545, ptr %7, align 8
  %1546 = extractvalue { ptr, i32 } %1544, 1
  store i32 %1546, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %148) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %147) #11
  br label %1572

1547:                                             ; preds = %1535
  %1548 = landingpad { ptr, i32 }
          cleanup
  %1549 = extractvalue { ptr, i32 } %1548, 0
  store ptr %1549, ptr %7, align 8
  %1550 = extractvalue { ptr, i32 } %1548, 1
  store i32 %1550, ptr %8, align 4
  br label %1572

1551:                                             ; preds = %1538, %1537, %1532
  br label %1552

1552:                                             ; preds = %1551
  br label %1553

1553:                                             ; preds = %1552
  call void @llvm.lifetime.start.p0(i64 4, ptr %151) #11
  %1554 = load ptr, ptr %5, align 8, !tbaa !5
  %1555 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %1554, i32 0, i32 4
  %1556 = load float, ptr %1555, align 4, !tbaa !83
  %1557 = load float, ptr %146, align 4, !tbaa !44
  %1558 = fsub float %1557, 1.000000e+00
  %1559 = fdiv float %1556, %1558
  store float %1559, ptr %151, align 4, !tbaa !44
  %1560 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %1561 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1560, ptr noundef nonnull align 4 dereferenceable(4) %151)
          to label %1562 unwind label %1568

1562:                                             ; preds = %1553
  %1563 = load float, ptr %1561, align 4, !tbaa !44
  %1564 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  store float %1563, ptr %1564, align 16, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %145) #11
  store i32 0, ptr %12, align 4
  br label %1565

1565:                                             ; preds = %1562, %1497
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %135) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %124) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #11
  %1566 = load i32, ptr %12, align 4
  switch i32 %1566, label %1580 [
    i32 0, label %1567
  ]

1567:                                             ; preds = %1565
  br label %1579

1568:                                             ; preds = %1553
  %1569 = landingpad { ptr, i32 }
          cleanup
  %1570 = extractvalue { ptr, i32 } %1569, 0
  store ptr %1570, ptr %7, align 8
  %1571 = extractvalue { ptr, i32 } %1569, 1
  store i32 %1571, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  br label %1572

1572:                                             ; preds = %1568, %1547, %1543
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  br label %1573

1573:                                             ; preds = %1572, %1539
  call void @llvm.lifetime.end.p0(i64 64, ptr %145) #11
  br label %1574

1574:                                             ; preds = %1573, %1503
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #11
  br label %1575

1575:                                             ; preds = %1574, %1499
  call void @llvm.lifetime.end.p0(i64 64, ptr %135) #11
  br label %1576

1576:                                             ; preds = %1575, %1430, %1426, %1361, %1357
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #11
  br label %1577

1577:                                             ; preds = %1576, %1353
  call void @llvm.lifetime.end.p0(i64 16, ptr %124) #11
  br label %1578

1578:                                             ; preds = %1577, %1349
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #11
  br label %1587

1579:                                             ; preds = %1567, %1305
  store i32 0, ptr %12, align 4
  br label %1580

1580:                                             ; preds = %1579, %1565
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #11
  %1581 = load i32, ptr %12, align 4
  switch i32 %1581, label %1586 [
    i32 0, label %1582
  ]

1582:                                             ; preds = %1580
  br label %1583

1583:                                             ; preds = %1582
  %1584 = load ptr, ptr %120, align 8, !tbaa !5
  %1585 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1584, i32 1
  store ptr %1585, ptr %120, align 8, !tbaa !5
  br label %1292

1586:                                             ; preds = %1580, %1296
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  br label %1589

1587:                                             ; preds = %1578, %1301
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #11
  br label %1588

1588:                                             ; preds = %1587, %1297
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  br label %1659

1589:                                             ; preds = %1586
  br label %1590

1590:                                             ; preds = %1589, %1280
  %1591 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float 0x47EFFFFFE0000000, ptr %1591, align 8, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #11
  %1592 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  store ptr %1592, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #11
  %1593 = load ptr, ptr %152, align 8, !tbaa !5
  %1594 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1593)
          to label %1595 unwind label %1604

1595:                                             ; preds = %1590
  store ptr %1594, ptr %153, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #11
  %1596 = load ptr, ptr %152, align 8, !tbaa !5
  %1597 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1596)
          to label %1598 unwind label %1608

1598:                                             ; preds = %1595
  store ptr %1597, ptr %154, align 8, !tbaa !5
  br label %1599

1599:                                             ; preds = %1623, %1598
  %1600 = load ptr, ptr %153, align 8, !tbaa !5
  %1601 = load ptr, ptr %154, align 8, !tbaa !5
  %1602 = icmp ne ptr %1600, %1601
  br i1 %1602, label %1612, label %1603

1603:                                             ; preds = %1599
  store i32 48, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #11
  br label %1632

1604:                                             ; preds = %1590
  %1605 = landingpad { ptr, i32 }
          cleanup
  %1606 = extractvalue { ptr, i32 } %1605, 0
  store ptr %1606, ptr %7, align 8
  %1607 = extractvalue { ptr, i32 } %1605, 1
  store i32 %1607, ptr %8, align 4
  br label %1631

1608:                                             ; preds = %1595
  %1609 = landingpad { ptr, i32 }
          cleanup
  %1610 = extractvalue { ptr, i32 } %1609, 0
  store ptr %1610, ptr %7, align 8
  %1611 = extractvalue { ptr, i32 } %1609, 1
  store i32 %1611, ptr %8, align 4
  br label %1630

1612:                                             ; preds = %1599
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #11
  %1613 = load ptr, ptr %153, align 8, !tbaa !5
  store ptr %1613, ptr %155, align 8, !tbaa !5
  %1614 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #11
  %1615 = load ptr, ptr %155, align 8, !tbaa !5
  %1616 = invoke noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16) %1615)
          to label %1617 unwind label %1626

1617:                                             ; preds = %1612
  %1618 = fneg float %1616
  store float %1618, ptr %156, align 4, !tbaa !44
  %1619 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1614, ptr noundef nonnull align 4 dereferenceable(4) %156)
          to label %1620 unwind label %1626

1620:                                             ; preds = %1617
  %1621 = load float, ptr %1619, align 4, !tbaa !44
  %1622 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float %1621, ptr %1622, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #11
  br label %1623

1623:                                             ; preds = %1620
  %1624 = load ptr, ptr %153, align 8, !tbaa !5
  %1625 = getelementptr inbounds %"class.JPH::Plane", ptr %1624, i32 1
  store ptr %1625, ptr %153, align 8, !tbaa !5
  br label %1599

1626:                                             ; preds = %1617, %1612
  %1627 = landingpad { ptr, i32 }
          cleanup
  %1628 = extractvalue { ptr, i32 } %1627, 0
  store ptr %1628, ptr %7, align 8
  %1629 = extractvalue { ptr, i32 } %1627, 1
  store i32 %1629, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #11
  br label %1630

1630:                                             ; preds = %1626, %1608
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #11
  br label %1631

1631:                                             ; preds = %1630, %1604
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #11
  br label %1659

1632:                                             ; preds = %1603
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #11
  store float 0.000000e+00, ptr %157, align 4, !tbaa !44
  %1633 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  %1634 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull align 4 dereferenceable(4) %1633)
          to label %1635 unwind label %1646

1635:                                             ; preds = %1632
  %1636 = load float, ptr %1634, align 4, !tbaa !44
  %1637 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float %1636, ptr %1637, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #11
  %1638 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #11
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %158, ptr noundef %159)
          to label %1639 unwind label %1650

1639:                                             ; preds = %1635
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE3SetEOS3_(ptr noundef nonnull align 8 dereferenceable(33) %1638, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %1640 unwind label %1654

1640:                                             ; preds = %1639
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %158) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #11
  store i32 0, ptr %12, align 4
  br label %1641

1641:                                             ; preds = %1640, %1176, %749
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %52) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %19) #11
  br label %1642

1642:                                             ; preds = %1641, %261
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #11
  br label %1643

1643:                                             ; preds = %1642, %206
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @_ZN3JPH17ConvexHullBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  %1644 = load i32, ptr %12, align 4
  switch i32 %1644, label %1672 [
    i32 0, label %1645
    i32 1, label %1645
  ]

1645:                                             ; preds = %1643, %1643, %180
  ret void

1646:                                             ; preds = %1632
  %1647 = landingpad { ptr, i32 }
          cleanup
  %1648 = extractvalue { ptr, i32 } %1647, 0
  store ptr %1648, ptr %7, align 8
  %1649 = extractvalue { ptr, i32 } %1647, 1
  store i32 %1649, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #11
  br label %1659

1650:                                             ; preds = %1635
  %1651 = landingpad { ptr, i32 }
          cleanup
  %1652 = extractvalue { ptr, i32 } %1651, 0
  store ptr %1652, ptr %7, align 8
  %1653 = extractvalue { ptr, i32 } %1651, 1
  store i32 %1653, ptr %8, align 4
  br label %1658

1654:                                             ; preds = %1639
  %1655 = landingpad { ptr, i32 }
          cleanup
  %1656 = extractvalue { ptr, i32 } %1655, 0
  store ptr %1656, ptr %7, align 8
  %1657 = extractvalue { ptr, i32 } %1655, 1
  store i32 %1657, ptr %8, align 4
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %158) #11
  br label %1658

1658:                                             ; preds = %1654, %1650
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #11
  br label %1659

1659:                                             ; preds = %1658, %1646, %1631, %1588, %1279, %1178, %762, %750, %736
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %52) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr %52) #11
  br label %1660

1660:                                             ; preds = %1659, %520, %491, %307
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #11
  br label %1661

1661:                                             ; preds = %1660, %303
  call void @llvm.lifetime.end.p0(i64 64, ptr %19) #11
  br label %1662

1662:                                             ; preds = %1661, %264, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #11
  br label %1663

1663:                                             ; preds = %1662, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @_ZN3JPH17ConvexHullBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #11
  br label %1664

1664:                                             ; preds = %1663, %207
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  br label %1665

1665:                                             ; preds = %1664, %185
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %169) #11
  call void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %168) #11
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %167) #11
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %166) #11
  br label %1666

1666:                                             ; preds = %1665, %181
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %159) #11
  br label %1667

1667:                                             ; preds = %1666
  %1668 = load ptr, ptr %7, align 8
  %1669 = load i32, ptr %8, align 4
  %1670 = insertvalue { ptr, i32 } poison, ptr %1668, 0
  %1671 = insertvalue { ptr, i32 } %1670, i32 %1669, 1
  resume { ptr, i32 } %1671

1672:                                             ; preds = %1643
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11ConvexShapeC2ENS_13EShapeSubTypeERKNS_19ConvexShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 8 dereferenceable(44), i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(76), ptr noundef nonnull align 8 dereferenceable(33)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef) #3 align 2

declare void @_ZN3JPH17ConvexHullBuilderC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5

declare noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, float noundef, ptr noundef nonnull align 8 dereferenceable(8)) #5

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

declare void @_ZNK3JPH17ConvexHullBuilder17DetermineMaxErrorERPNS0_4FaceERfRiS4_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

declare void @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ...) #5

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

declare void @_ZNK3JPH17ConvexHullBuilder24GetCenterOfMassAndVolumeERNS_4Vec3ERf(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #5

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #6 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 nounwind uwtable
declare dso_local void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef) unnamed_addr #7 align 2

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, i32 noundef) #8 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE4findERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKihELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32), double, double) #3 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEixERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE3SetEOS3_(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { alwaysinline mustprogress 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 #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { 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 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !24, i64 104}
!12 = !{!"_ZTSN3JPH23ConvexHullShapeSettingsE", !13, i64 0, !25, i64 80, !24, i64 104, !24, i64 108, !24, i64 112}
!13 = !{!"_ZTSN3JPH19ConvexShapeSettingsE", !14, i64 0, !23, i64 64, !24, i64 72}
!14 = !{!"_ZTSN3JPH13ShapeSettingsE", !15, i64 0, !16, i64 8, !20, i64 16, !21, i64 24}
!15 = !{!"_ZTSN3JPH18SerializableObjectE"}
!16 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !17, i64 0}
!17 = !{!"_ZTSSt6atomicIjE", !18, i64 0}
!18 = !{!"_ZTSSt13__atomic_baseIjE", !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !7, i64 0, !22, i64 32}
!22 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !7, i64 0}
!23 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !6, i64 0}
!24 = !{!"float", !7, i64 0}
!25 = !{!"_ZTSN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!26 = !{!27, !24, i64 256}
!27 = !{!"_ZTSN3JPH15ConvexHullShapeE", !28, i64 0, !33, i64 48, !34, i64 64, !35, i64 128, !36, i64 160, !37, i64 184, !38, i64 208, !39, i64 232, !24, i64 256, !24, i64 260, !24, i64 264}
!28 = !{!"_ZTSN3JPH11ConvexShapeE", !29, i64 0, !23, i64 32, !24, i64 40}
!29 = !{!"_ZTSN3JPH5ShapeE", !30, i64 8, !20, i64 16, !31, i64 24, !32, i64 25}
!30 = !{!"_ZTSN3JPH9RefTargetINS_5ShapeEEE", !17, i64 0}
!31 = !{!"_ZTSN3JPH10EShapeTypeE", !7, i64 0}
!32 = !{!"_ZTSN3JPH13EShapeSubTypeE", !7, i64 0}
!33 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!34 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!35 = !{!"_ZTSN3JPH5AABoxE", !33, i64 0, !33, i64 16}
!36 = !{!"_ZTSN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!37 = !{!"_ZTSN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!38 = !{!"_ZTSN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!39 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!40 = !{!27, !24, i64 264}
!41 = !{!12, !24, i64 112}
!42 = !{!43, !43, i64 0}
!43 = !{!"_ZTSN3JPH17ConvexHullBuilder7EResultE", !7, i64 0}
!44 = !{!24, !24, i64 0}
!45 = !{!19, !19, i64 0}
!46 = !{!47, !6, i64 56}
!47 = !{!"_ZTSN3JPH17ConvexHullBuilder4FaceE", !33, i64 0, !33, i64 16, !48, i64 32, !6, i64 56, !24, i64 64, !49, i64 68}
!48 = !{!"_ZTSN3JPH5ArrayIiNS_12STLAllocatorIiEEEE", !20, i64 0, !20, i64 8, !6, i64 16}
!49 = !{!"bool", !7, i64 0}
!50 = !{!51, !19, i64 24}
!51 = !{!"_ZTSN3JPH17ConvexHullBuilder4EdgeE", !6, i64 0, !6, i64 8, !6, i64 16, !19, i64 24}
!52 = !{i64 0, i64 16, !53}
!53 = !{!7, !7, i64 0}
!54 = !{!51, !6, i64 8}
!55 = distinct !{!55, !56}
!56 = !{!"llvm.loop.mustprogress"}
!57 = !{i64 0, i64 64, !53}
!58 = !{i64 2157814455}
!59 = !{!60, !60, i64 0}
!60 = !{!"short", !7, i64 0}
!61 = !{!62, !7, i64 4}
!62 = !{!"_ZTSSt4pairIKihE", !19, i64 0, !7, i64 4}
!63 = !{i64 2157814815}
!64 = !{!65, !19, i64 16}
!65 = !{!"_ZTSN3JPH15ConvexHullShape5PointE", !33, i64 0, !19, i64 16, !7, i64 20}
!66 = !{i64 2157815183}
!67 = distinct !{!67, !56}
!68 = !{!69, !60, i64 0}
!69 = !{!"_ZTSN3JPH15ConvexHullShape4FaceE", !60, i64 0, !60, i64 2}
!70 = !{!69, !60, i64 2}
!71 = distinct !{!71, !56}
!72 = distinct !{!72, !56}
!73 = distinct !{!73, !56}
!74 = distinct !{!74, !56}
!75 = distinct !{!75, !56}
!76 = !{!77, !6, i64 0}
!77 = !{!"_ZTSSt16initializer_listIiE", !6, i64 0, !20, i64 8}
!78 = !{!77, !20, i64 8}
!79 = distinct !{!79, !56}
!80 = distinct !{!80, !56}
!81 = !{i64 2157815567}
!82 = !{i64 2157815909}
!83 = !{!12, !24, i64 108}


; 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::ConvexHullBuilder" = type { ptr, %"class.JPH::Array.20", %"class.JPH::Array.23" }
%"class.JPH::Array.20" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.2 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.2 = type { i64, [8 x i8] }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.7 }
%union.anon.7 = type { <4 x float> }
%"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 }
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.JPH::ConvexHullShape::Point" = type { %"class.JPH::Vec3", i32, [3 x i32] }
%"class.JPH::Vec3" = type { %union.anon.6 }
%union.anon.6 = type { <4 x float> }
%"struct.JPH::ConvexHullShape::Face" = type { i16, i16 }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::Array.26" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }

@_ZTVN3JPH15ConvexHullShapeE = external dso_local unnamed_addr constant { [37 x ptr] }, align 8
@.str.1 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [108 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [46 x i8], align 1
@__const.ConvexHullShape.best3 = external hidden unnamed_addr constant [3 x i32], align 4
@__const.ConvexHullShape.best2 = external hidden unnamed_addr constant [2 x i32], align 4
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH15ConvexHullShapeC2ERKNS_23ConvexHullShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 16 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(120) %1, ptr noundef nonnull align 8 dereferenceable(33) %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca %"class.JPH::ConvexHullBuilder", align 8
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.JPH::Mat44", align 16
  %12 = alloca %"class.JPH::Vec4", align 16
  %13 = alloca %"class.JPH::Vec4", align 16
  %14 = alloca %"class.JPH::Vec4", align 16
  %15 = alloca %"class.JPH::Vec4", align 16
  %16 = alloca %"class.JPH::Mat44", align 16
  %17 = alloca %"class.JPH::Mat44", align 16
  %18 = alloca %"class.JPH::Vec4", align 16
  %19 = alloca %"class.JPH::Vec4", align 16
  %20 = alloca %"class.JPH::Vec4", align 16
  %21 = alloca %"class.JPH::Vec4", align 16
  %22 = alloca %"class.JPH::Mat44", align 16
  %23 = alloca %"class.JPH::Mat44", align 16
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca %"class.JPH::Mat44", align 16
  %26 = alloca %"class.JPH::Mat44", align 16
  %27 = alloca %"class.JPH::Mat44", align 16
  %28 = alloca %"class.JPH::Mat44", align 16
  %29 = alloca %"class.std::unordered_map", align 8
  %30 = alloca i8, align 1
  %31 = alloca i32, align 4
  %32 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %33 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %34 = alloca %"struct.JPH::ConvexHullShape::Point", align 16
  %35 = alloca %"struct.JPH::ConvexHullShape::Face", align 2
  %36 = alloca %"class.JPH::Plane", align 16
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.JPH::Array.26", align 8
  %39 = alloca i32, align 4
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca [3 x i32], align 4
  %43 = alloca [2 x i32], align 4
  %44 = alloca [1 x i32], align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca %"class.JPH::Plane", align 16
  %49 = alloca %"class.JPH::Plane", align 16
  %50 = alloca %"class.JPH::Plane", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Vec3", align 16
  %53 = alloca %"class.JPH::Mat44", align 16
  %54 = alloca %"class.JPH::Mat44", align 16
  %55 = alloca %"class.JPH::Vec4", align 16
  %56 = alloca %"class.JPH::Vec4", align 16
  %57 = alloca %"class.JPH::Vec4", align 16
  %58 = alloca %"class.JPH::Vec4", align 16
  %59 = alloca %"class.JPH::Mat44", align 16
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca %"class.JPH::Ref", align 8
  tail call void @_ZN3JPH11ConvexShapeC2ENS_13EShapeSubTypeERKNS_19ConvexShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 8 dereferenceable(44) %0, i8 noundef zeroext 6, ptr noundef nonnull align 8 dereferenceable(76) %1, ptr noundef nonnull align 8 dereferenceable(33) %2)
  store ptr getelementptr inbounds inrange(-16, 280) (i8, ptr @_ZTVN3JPH15ConvexHullShapeE, i64 16), ptr %0, align 16, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %0, i64 128
  invoke void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %66)
          to label %67 unwind label %78

67:                                               ; preds = %3
  %68 = getelementptr inbounds i8, ptr %0, i64 160
  tail call void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %68) #11
  %69 = getelementptr inbounds i8, ptr %0, i64 184
  tail call void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #11
  %70 = getelementptr inbounds i8, ptr %0, i64 208
  tail call void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #11
  %71 = getelementptr inbounds i8, ptr %0, i64 232
  tail call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %71) #11
  %72 = getelementptr inbounds i8, ptr %0, i64 256
  %73 = getelementptr inbounds i8, ptr %1, i64 104
  %74 = load float, ptr %73, align 8, !tbaa !8
  store float %74, ptr %72, align 16, !tbaa !25
  %75 = getelementptr inbounds i8, ptr %0, i64 264
  store float 0x47EFFFFFE0000000, ptr %75, align 8, !tbaa !39
  %76 = fcmp olt float %74, 0.000000e+00
  br i1 %76, label %77, label %82

77:                                               ; preds = %67
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef nonnull @.str.1)
          to label %702 unwind label %80

78:                                               ; preds = %3
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %711

80:                                               ; preds = %77
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %710

82:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #11
  store ptr null, ptr %4, align 8, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5) #11
  %83 = getelementptr inbounds i8, ptr %1, i64 80
  invoke void @_ZN3JPH17ConvexHullBuilderC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 8 dereferenceable(24) %83)
          to label %84 unwind label %91

84:                                               ; preds = %82
  %85 = getelementptr inbounds i8, ptr %1, i64 112
  %86 = load float, ptr %85, align 8, !tbaa !41
  %87 = invoke noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56) %5, i32 noundef 256, float noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %88 unwind label %93

88:                                               ; preds = %84
  %or.cond = icmp ugt i32 %87, 1
  br i1 %or.cond, label %89, label %95

89:                                               ; preds = %88
  %90 = load ptr, ptr %4, align 8, !tbaa !40
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef %90)
          to label %701 unwind label %93

91:                                               ; preds = %82
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %709

93:                                               ; preds = %89, %84
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %708

95:                                               ; preds = %88
  %96 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3JPH17ConvexHullBuilder8GetFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %5)
  %97 = icmp eq i32 %87, 0
  br i1 %97, label %98, label %120

98:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #11
  invoke void @_ZNK3JPH17ConvexHullBuilder17DetermineMaxErrorERPNS0_4FaceERfRiS4_(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %99 unwind label %115

99:                                               ; preds = %98
  %100 = load float, ptr %7, align 4, !tbaa !42
  %101 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %85)
  %102 = load float, ptr %101, align 4, !tbaa !42
  %103 = fmul float %102, 4.000000e+00
  %104 = fcmp ule float %100, %103
  br i1 %104, label %.critedge, label %105

105:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #11
  %106 = load i32, ptr %9, align 4, !tbaa !43
  %107 = load float, ptr %7, align 4, !tbaa !42
  %108 = fpext float %107 to double
  %109 = load float, ptr %85, align 8, !tbaa !41
  %110 = fdiv float %107, %109
  %111 = fpext float %110 to double
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull @.str.2, i32 noundef %106, double noundef %108, double noundef %111)
          to label %112 unwind label %117

112:                                              ; preds = %105
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef nonnull align 8 dereferenceable(32) %10)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  br label %701

113:                                              ; preds = %120
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %708

115:                                              ; preds = %98
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %119

117:                                              ; preds = %105
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #11
  br label %119

119:                                              ; preds = %117, %115
  %.pn = phi { ptr, i32 } [ %118, %117 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  br label %708

.critedge:                                        ; preds = %99
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  br label %120

120:                                              ; preds = %.critedge, %95
  %121 = getelementptr inbounds i8, ptr %0, i64 48
  %122 = getelementptr inbounds i8, ptr %0, i64 260
  invoke void @_ZNK3JPH17ConvexHullBuilder24GetCenterOfMassAndVolumeERNS_4Vec3ERf(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 16 dereferenceable(16) %121, ptr noundef nonnull align 4 dereferenceable(4) %122)
          to label %123 unwind label %113

123:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #11
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0x3F91111120000000, float noundef 0x3F81111120000000, float noundef 0x3F81111120000000, float noundef 0.000000e+00)
          to label %124 unwind label %147

124:                                              ; preds = %123
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 0x3F81111120000000, float noundef 0x3F91111120000000, float noundef 0x3F81111120000000, float noundef 0.000000e+00)
          to label %125 unwind label %147

125:                                              ; preds = %124
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %14, float noundef 0x3F81111120000000, float noundef 0x3F81111120000000, float noundef 0x3F91111120000000, float noundef 0.000000e+00)
          to label %126 unwind label %147

126:                                              ; preds = %125
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %127 unwind label %147

127:                                              ; preds = %126
  %128 = load double, ptr %12, align 16
  %129 = getelementptr inbounds i8, ptr %12, i64 8
  %130 = load double, ptr %129, align 8
  %131 = load double, ptr %13, align 16
  %132 = getelementptr inbounds i8, ptr %13, i64 8
  %133 = load double, ptr %132, align 8
  %134 = load double, ptr %14, align 16
  %135 = getelementptr inbounds i8, ptr %14, i64 8
  %136 = load double, ptr %135, align 8
  %137 = load double, ptr %15, align 16
  %138 = getelementptr inbounds i8, ptr %15, i64 8
  %139 = load double, ptr %138, align 8
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %11, double %128, double %130, double %131, double %133, double %134, double %136, double %137, double %139)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %16) #11
  invoke void @_ZN3JPH5Mat445sZeroEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %16)
          to label %140 unwind label %149

140:                                              ; preds = %127
  %141 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %142 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %.not433 = icmp eq ptr %141, %142
  br i1 %.not433, label %._crit_edge437, label %.lr.ph436

.lr.ph436:                                        ; preds = %140
  %.sroa.2164.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 56
  %143 = getelementptr inbounds i8, ptr %18, i64 8
  %144 = getelementptr inbounds i8, ptr %19, i64 8
  %145 = getelementptr inbounds i8, ptr %20, i64 8
  %146 = getelementptr inbounds i8, ptr %21, i64 8
  br label %151

._crit_edge437:                                   ; preds = %._crit_edge, %140
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %27) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %28) #11
  invoke void @_ZN3JPH5Mat449sIdentityEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %28)
          to label %222 unwind label %251

147:                                              ; preds = %126, %125, %124, %123
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %707

149:                                              ; preds = %127
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %706

151:                                              ; preds = %.lr.ph436, %._crit_edge
  %.0256434 = phi ptr [ %141, %.lr.ph436 ], [ %221, %._crit_edge ]
  %152 = load ptr, ptr %.0256434, align 8, !tbaa !40
  %153 = getelementptr inbounds i8, ptr %152, i64 56
  %154 = load ptr, ptr %153, align 8, !tbaa !44
  %155 = getelementptr inbounds i8, ptr %154, i64 24
  %156 = load i32, ptr %155, align 8, !tbaa !48
  %157 = sext i32 %156 to i64
  %158 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %157)
          to label %159 unwind label %202

159:                                              ; preds = %151
  %.sroa.0163.0.copyload = load double, ptr %121, align 16
  %.sroa.2164.0.copyload = load double, ptr %.sroa.2164.0..sroa_idx, align 8, !tbaa !50
  %160 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %158, double %.sroa.0163.0.copyload, double %.sroa.2164.0.copyload)
          to label %161 unwind label %202

161:                                              ; preds = %159
  %162 = extractvalue { double, double } %160, 0
  %163 = extractvalue { double, double } %160, 1
  %164 = getelementptr inbounds i8, ptr %154, i64 8
  %165 = load ptr, ptr %164, align 8, !tbaa !51
  %166 = getelementptr inbounds i8, ptr %165, i64 24
  %167 = load i32, ptr %166, align 8, !tbaa !48
  %168 = sext i32 %167 to i64
  %169 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %168)
          to label %170 unwind label %204

170:                                              ; preds = %161
  %.sroa.0159.0.copyload = load double, ptr %121, align 16
  %.sroa.2160.0.copyload = load double, ptr %.sroa.2164.0..sroa_idx, align 8, !tbaa !50
  %171 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %169, double %.sroa.0159.0.copyload, double %.sroa.2160.0.copyload)
          to label %172 unwind label %204

172:                                              ; preds = %170
  %.0257.in427 = getelementptr inbounds i8, ptr %165, i64 8
  %.0257428 = load ptr, ptr %.0257.in427, align 8, !tbaa !51
  %173 = load ptr, ptr %153, align 8, !tbaa !44
  %.not323429 = icmp eq ptr %.0257428, %173
  br i1 %.not323429, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %172
  %174 = extractvalue { double, double } %171, 1
  %175 = extractvalue { double, double } %171, 0
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %200
  %.0257432 = phi ptr [ %.0257, %200 ], [ %.0257428, %.lr.ph.preheader ]
  %.sroa.6162.0431 = phi double [ %184, %200 ], [ %174, %.lr.ph.preheader ]
  %.sroa.0161.0430 = phi double [ %183, %200 ], [ %175, %.lr.ph.preheader ]
  %176 = getelementptr inbounds i8, ptr %.0257432, i64 24
  %177 = load i32, ptr %176, align 8, !tbaa !48
  %178 = sext i32 %177 to i64
  %179 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %178)
          to label %180 unwind label %206

180:                                              ; preds = %.lr.ph
  %.sroa.0155.0.copyload = load double, ptr %121, align 16
  %.sroa.2156.0.copyload = load double, ptr %.sroa.2164.0..sroa_idx, align 8, !tbaa !50
  %181 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %179, double %.sroa.0155.0.copyload, double %.sroa.2156.0.copyload)
          to label %182 unwind label %206

182:                                              ; preds = %180
  %183 = extractvalue { double, double } %181, 0
  %184 = extractvalue { double, double } %181, 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %17) #11
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %18, double %162, double %163, float noundef 0.000000e+00)
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %19, double %.sroa.0161.0430, double %.sroa.6162.0431, float noundef 0.000000e+00)
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %20, double %183, double %184, float noundef 0.000000e+00)
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %185 unwind label %208

185:                                              ; preds = %182
  %186 = load double, ptr %18, align 16
  %187 = load double, ptr %143, align 8
  %188 = load double, ptr %19, align 16
  %189 = load double, ptr %144, align 8
  %190 = load double, ptr %20, align 16
  %191 = load double, ptr %145, align 8
  %192 = load double, ptr %21, align 16
  %193 = load double, ptr %146, align 8
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %17, double %186, double %187, double %188, double %189, double %190, double %191, double %192, double %193)
  %194 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %17)
          to label %195 unwind label %210

195:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %23) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %24) #11
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %24, ptr noundef nonnull align 16 dereferenceable(64) %17, ptr noundef nonnull align 16 dereferenceable(64) %11)
          to label %196 unwind label %212

196:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %25) #11
  call void @_ZNK3JPH5Mat4410TransposedEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %25, ptr noundef nonnull align 16 dereferenceable(64) %17)
  invoke void @_ZNK3JPH5Mat44mlERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %23, ptr noundef nonnull align 16 dereferenceable(64) %24, ptr noundef nonnull align 16 dereferenceable(64) %25)
          to label %197 unwind label %214

197:                                              ; preds = %196
  invoke void @_ZN3JPHmlEfRKNS_5Mat44E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %22, float noundef %194, ptr noundef nonnull align 16 dereferenceable(64) %23)
          to label %198 unwind label %214

198:                                              ; preds = %197
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %23) #11
  %199 = invoke noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH5Mat44pLERKS0_(ptr noundef nonnull align 16 dereferenceable(64) %16, ptr noundef nonnull align 16 dereferenceable(64) %22)
          to label %200 unwind label %217

200:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #11
  %.0257.in = getelementptr inbounds i8, ptr %.0257432, i64 8
  %.0257 = load ptr, ptr %.0257.in, align 8, !tbaa !51
  %201 = load ptr, ptr %153, align 8, !tbaa !44
  %.not323 = icmp eq ptr %.0257, %201
  br i1 %.not323, label %._crit_edge, label %.lr.ph, !llvm.loop !52

202:                                              ; preds = %159, %151
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %706

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

206:                                              ; preds = %180, %.lr.ph
  %207 = landingpad { ptr, i32 }
          cleanup
  br label %706

208:                                              ; preds = %182
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %220

210:                                              ; preds = %185
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %220

212:                                              ; preds = %195
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %216

214:                                              ; preds = %197, %196
  %215 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %25) #11
  br label %216

216:                                              ; preds = %214, %212
  %.pn324 = phi { ptr, i32 } [ %215, %214 ], [ %213, %212 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %23) #11
  br label %219

217:                                              ; preds = %198
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %219

219:                                              ; preds = %217, %216
  %.pn326 = phi { ptr, i32 } [ %218, %217 ], [ %.pn324, %216 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  br label %220

220:                                              ; preds = %210, %219, %208
  %.pn326.pn.pn = phi { ptr, i32 } [ %209, %208 ], [ %.pn326, %219 ], [ %211, %210 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %17) #11
  br label %706

._crit_edge:                                      ; preds = %200, %172
  %221 = getelementptr inbounds i8, ptr %.0256434, i64 8
  %.not = icmp eq ptr %221, %142
  br i1 %.not, label %._crit_edge437, label %151

222:                                              ; preds = %._crit_edge437
  %223 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %16, i32 noundef 0, i32 noundef 0)
          to label %224 unwind label %251

224:                                              ; preds = %222
  %225 = load float, ptr %223, align 4, !tbaa !42
  %226 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %16, i32 noundef 1, i32 noundef 1)
          to label %227 unwind label %251

227:                                              ; preds = %224
  %228 = load float, ptr %226, align 4, !tbaa !42
  %229 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %16, i32 noundef 2, i32 noundef 2)
          to label %230 unwind label %251

230:                                              ; preds = %227
  %231 = fadd float %225, %228
  %232 = load float, ptr %229, align 4, !tbaa !42
  %233 = fadd float %231, %232
  invoke void @_ZNK3JPH5Mat44mlEf(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %27, ptr noundef nonnull align 16 dereferenceable(64) %28, float noundef %233)
          to label %234 unwind label %251

234:                                              ; preds = %230
  invoke void @_ZNK3JPH5Mat44miERKS0_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %26, ptr noundef nonnull align 16 dereferenceable(64) %27, ptr noundef nonnull align 16 dereferenceable(64) %16)
          to label %235 unwind label %251

235:                                              ; preds = %234
  %236 = getelementptr inbounds i8, ptr %0, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %236, ptr noundef nonnull align 16 dereferenceable(64) %26, i64 64, i1 false), !tbaa.struct !54
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %29) #11
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #11
  %237 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %238 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %.not284438 = icmp eq ptr %237, %238
  br i1 %.not284438, label %._crit_edge442, label %.lr.ph441

.lr.ph441:                                        ; preds = %235
  %.sroa.2129.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.6131.0..sroa_idx = getelementptr inbounds i8, ptr %34, i64 8
  %239 = getelementptr inbounds i8, ptr %34, i64 16
  %240 = getelementptr inbounds i8, ptr %35, i64 2
  %241 = getelementptr inbounds i8, ptr %36, i64 8
  br label %253

._crit_edge442:                                   ; preds = %336, %235
  %242 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %243 = icmp ugt i64 %242, 256
  br i1 %243, label %343, label %.preheader352.split

.preheader352.split:                              ; preds = %._crit_edge442
  %244 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %245 = trunc i64 %244 to i32
  %.not297497 = icmp sgt i32 %245, 0
  br i1 %.not297497, label %.lr.ph499, label %.critedge344

.lr.ph499:                                        ; preds = %.preheader352.split
  %.sroa.0107.0.copyload = load i32, ptr @__const.ConvexHullShape.best3, align 4
  %.sroa.7109.0.copyload = load i32, ptr getelementptr inbounds (i8, ptr @__const.ConvexHullShape.best3, i64 4), align 4
  %.sroa.9.0.copyload = load i32, ptr getelementptr inbounds (i8, ptr @__const.ConvexHullShape.best3, i64 8), align 4
  %.sroa.0104.0.copyload = load i32, ptr @__const.ConvexHullShape.best2, align 4
  %.sroa.7.0.copyload = load i32, ptr getelementptr inbounds (i8, ptr @__const.ConvexHullShape.best2, i64 4), align 4
  %246 = getelementptr inbounds i8, ptr %40, i64 8
  %247 = getelementptr inbounds i8, ptr %41, i64 8
  %248 = getelementptr inbounds i8, ptr %42, i64 4
  %249 = getelementptr inbounds i8, ptr %42, i64 8
  %250 = getelementptr inbounds i8, ptr %43, i64 4
  br label %349

251:                                              ; preds = %234, %230, %227, %224, %222, %._crit_edge437
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %28) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %26) #11
  br label %706

253:                                              ; preds = %.lr.ph441, %336
  %.0258439 = phi ptr [ %237, %.lr.ph441 ], [ %337, %336 ]
  %254 = load ptr, ptr %.0258439, align 8, !tbaa !40
  %255 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %256 = icmp ult i64 %255, 65536
  br i1 %256, label %263, label %257

257:                                              ; preds = %253
  %258 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 132)
          to label %259 unwind label %261

259:                                              ; preds = %257
  br i1 %258, label %260, label %263

260:                                              ; preds = %259
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !55
  br label %263

261:                                              ; preds = %257
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %705

263:                                              ; preds = %260, %259, %253
  %264 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %265 = trunc i64 %264 to i16
  %266 = getelementptr inbounds i8, ptr %254, i64 56
  %267 = load ptr, ptr %266, align 8, !tbaa !44
  br label %268

268:                                              ; preds = %316, %263
  %.0260 = phi ptr [ %267, %263 ], [ %319, %316 ]
  %.0259 = phi i16 [ 0, %263 ], [ %317, %316 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #11
  %269 = getelementptr inbounds i8, ptr %.0260, i64 24
  %270 = load i32, ptr %269, align 8, !tbaa !48
  store i32 %270, ptr %31, align 4, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #11
  %271 = invoke ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE4findERS7_(ptr noundef nonnull align 8 dereferenceable(56) %29, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %272 unwind label %279

272:                                              ; preds = %268
  store ptr %271, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #11
  %273 = call ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %29) #11
  store ptr %273, ptr %33, align 8
  %274 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKihELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br i1 %274, label %275, label %281

275:                                              ; preds = %272
  %276 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKihELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #11
  %277 = getelementptr inbounds i8, ptr %276, i64 4
  %278 = load i8, ptr %277, align 4, !tbaa !56
  store i8 %278, ptr %30, align 1, !tbaa !50
  br label %308

279:                                              ; preds = %315, %311, %268
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %338

281:                                              ; preds = %272
  %282 = load i32, ptr %31, align 4, !tbaa !43
  %283 = sext i32 %282 to i64
  %284 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %283)
          to label %285 unwind label %297

285:                                              ; preds = %281
  %.sroa.0128.0.copyload = load double, ptr %121, align 16
  %.sroa.2129.0.copyload = load double, ptr %.sroa.2129.0..sroa_idx, align 8, !tbaa !50
  %286 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %284, double %.sroa.0128.0.copyload, double %.sroa.2129.0.copyload)
          to label %287 unwind label %297

287:                                              ; preds = %285
  %288 = extractvalue { double, double } %286, 0
  %289 = extractvalue { double, double } %286, 1
  invoke void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %66, double %288, double %289)
          to label %290 unwind label %297

290:                                              ; preds = %287
  %291 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %292 = icmp ult i64 %291, 256
  br i1 %292, label %299, label %293

293:                                              ; preds = %290
  %294 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 159)
          to label %295 unwind label %297

295:                                              ; preds = %293
  br i1 %294, label %296, label %299

296:                                              ; preds = %295
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !58
  br label %299

297:                                              ; preds = %302, %293, %287, %285, %281
  %298 = landingpad { ptr, i32 }
          cleanup
  br label %338

299:                                              ; preds = %296, %295, %290
  %300 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %301 = trunc i64 %300 to i8
  store i8 %301, ptr %30, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #11
  store double %288, ptr %34, align 16
  store double %289, ptr %.sroa.6131.0..sroa_idx, align 8, !tbaa !50
  store <4 x i32> <i32 0, i32 -1, i32 -1, i32 -1>, ptr %239, align 16, !tbaa !43
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %68, ptr noundef nonnull align 16 dereferenceable(32) %34)
          to label %302 unwind label %306

302:                                              ; preds = %299
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #11
  %303 = load i8, ptr %30, align 1, !tbaa !50
  %304 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEixERS7_(ptr noundef nonnull align 8 dereferenceable(56) %29, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %305 unwind label %297

305:                                              ; preds = %302
  store i8 %303, ptr %304, align 1, !tbaa !50
  br label %308

306:                                              ; preds = %299
  %307 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #11
  br label %338

308:                                              ; preds = %275, %305
  %309 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %310 = icmp ult i64 %309, 65535
  br i1 %310, label %315, label %311

311:                                              ; preds = %308
  %312 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.4, i32 noundef 166)
          to label %313 unwind label %279

313:                                              ; preds = %311
  br i1 %312, label %314, label %315

314:                                              ; preds = %313
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !59
  br label %315

315:                                              ; preds = %314, %313, %308
  invoke void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE9push_backERKh(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %316 unwind label %279

316:                                              ; preds = %315
  %317 = add i16 %.0259, 1
  %318 = getelementptr inbounds i8, ptr %.0260, i64 8
  %319 = load ptr, ptr %318, align 8, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #11
  %320 = load ptr, ptr %266, align 8, !tbaa !44
  %.not318 = icmp eq ptr %319, %320
  br i1 %.not318, label %321, label %268, !llvm.loop !60

321:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #11
  store i16 %265, ptr %35, align 2, !tbaa !61
  store i16 %317, ptr %240, align 2, !tbaa !64
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %69, ptr noundef nonnull align 2 dereferenceable(4) %35)
          to label %322 unwind label %339

322:                                              ; preds = %321
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #11
  %323 = getelementptr inbounds i8, ptr %254, i64 16
  %.sroa.0122.0.copyload = load double, ptr %121, align 16
  %.sroa.2123.0.copyload = load double, ptr %.sroa.2129.0..sroa_idx, align 8, !tbaa !50
  %324 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %323, double %.sroa.0122.0.copyload, double %.sroa.2123.0.copyload)
          to label %325 unwind label %341

325:                                              ; preds = %322
  %326 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %254)
          to label %327 unwind label %341

327:                                              ; preds = %325
  %328 = extractvalue { double, double } %324, 1
  %329 = extractvalue { double, double } %324, 0
  %330 = extractvalue { double, double } %326, 0
  %331 = extractvalue { double, double } %326, 1
  %332 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %329, double %328, double %330, double %331)
          to label %333 unwind label %341

333:                                              ; preds = %327
  %334 = extractvalue { double, double } %332, 0
  store double %334, ptr %36, align 16
  %335 = extractvalue { double, double } %332, 1
  store double %335, ptr %241, align 8
  invoke void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %70, ptr noundef nonnull align 16 dereferenceable(16) %36)
          to label %336 unwind label %341

336:                                              ; preds = %333
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #11
  %337 = getelementptr inbounds i8, ptr %.0258439, i64 8
  %.not284 = icmp eq ptr %337, %238
  br i1 %.not284, label %._crit_edge442, label %253

338:                                              ; preds = %297, %306, %279
  %.pn316 = phi { ptr, i32 } [ %280, %279 ], [ %298, %297 ], [ %307, %306 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #11
  br label %705

339:                                              ; preds = %321
  %340 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  br label %705

341:                                              ; preds = %333, %327, %325, %322
  %342 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #11
  br label %705

343:                                              ; preds = %._crit_edge442
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #11
  %344 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %345 = trunc i64 %344 to i32
  invoke void (ptr, ptr, ...) @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull @.str.7, i32 noundef %345, i32 noundef 256)
          to label %346 unwind label %347

346:                                              ; preds = %343
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef nonnull align 8 dereferenceable(32) %37)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #11
  br label %700

347:                                              ; preds = %343
  %348 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #11
  br label %705

349:                                              ; preds = %.lr.ph499, %._crit_edge496
  %indvars.iv542 = phi i64 [ 0, %.lr.ph499 ], [ %indvars.iv.next543, %._crit_edge496 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %38) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #11
  store i32 0, ptr %39, align 4, !tbaa !43
  %350 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69)
  %351 = trunc i64 %350 to i32
  %352 = icmp sgt i32 %351, 0
  br i1 %352, label %.lr.ph446, label %._crit_edge447

._crit_edge447:                                   ; preds = %.loopexit350, %349
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #11
  %353 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %354 = icmp ugt i64 %353, 1
  br i1 %354, label %386, label %383

.lr.ph446:                                        ; preds = %349, %.loopexit350
  %355 = load i32, ptr %39, align 4, !tbaa !43
  %356 = sext i32 %355 to i64
  %357 = invoke noundef nonnull align 2 dereferenceable(4) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %69, i64 noundef %356)
          to label %.preheader unwind label %365

.preheader:                                       ; preds = %.lr.ph446
  %358 = getelementptr inbounds i8, ptr %357, i64 2
  %359 = load i16, ptr %358, align 2, !tbaa !64
  %.not519 = icmp eq i16 %359, 0
  br i1 %.not519, label %.loopexit350, label %.lr.ph444

360:                                              ; preds = %372
  %361 = add nuw nsw i32 %.0262443, 1
  %362 = load i16, ptr %358, align 2, !tbaa !64
  %363 = zext i16 %362 to i32
  %364 = icmp ult i32 %361, %363
  br i1 %364, label %.lr.ph444, label %.loopexit350, !llvm.loop !65

365:                                              ; preds = %.lr.ph446
  %366 = landingpad { ptr, i32 }
          cleanup
  br label %382

.lr.ph444:                                        ; preds = %.preheader, %360
  %.0262443 = phi i32 [ %361, %360 ], [ 0, %.preheader ]
  %367 = load i16, ptr %357, align 2, !tbaa !61
  %368 = zext i16 %367 to i32
  %369 = add nuw nsw i32 %.0262443, %368
  %370 = zext nneg i32 %369 to i64
  %371 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %370)
          to label %372 unwind label %.loopexit351

372:                                              ; preds = %.lr.ph444
  %373 = load i8, ptr %371, align 1, !tbaa !50
  %374 = zext i8 %373 to i64
  %375 = icmp eq i64 %indvars.iv542, %374
  br i1 %375, label %376, label %360

376:                                              ; preds = %372
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 4 dereferenceable(4) %39)
          to label %.loopexit350 unwind label %.loopexit.split-lp

.loopexit351:                                     ; preds = %.lr.ph444
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %382

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

.loopexit350:                                     ; preds = %360, %.preheader, %376
  %377 = load i32, ptr %39, align 4, !tbaa !43
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %39, align 4, !tbaa !43
  %379 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69)
  %380 = trunc i64 %379 to i32
  %381 = icmp slt i32 %378, %380
  br i1 %381, label %.lr.ph446, label %._crit_edge447, !llvm.loop !66

382:                                              ; preds = %.loopexit351, %.loopexit.split-lp, %365
  %.pn311 = phi { ptr, i32 } [ %366, %365 ], [ %lpad.loopexit, %.loopexit351 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #11
  br label %527

383:                                              ; preds = %._crit_edge447
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef nonnull @.str.8)
          to label %.thread unwind label %384

.thread:                                          ; preds = %383
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %38) #11
  br label %700

384:                                              ; preds = %383
  %385 = landingpad { ptr, i32 }
          cleanup
  br label %527

386:                                              ; preds = %._crit_edge447
  %387 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.000000e+00)
  %388 = invoke noundef float @_ZN3JPH3CosEf(float noundef %387)
          to label %389 unwind label %393

389:                                              ; preds = %386
  %390 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %391 = trunc i64 %390 to i32
  %392 = icmp sgt i32 %391, 0
  br i1 %392, label %.lr.ph486, label %._crit_edge487

._crit_edge487:                                   ; preds = %._crit_edge469, %389
  %.sroa.0104.0.lcssa = phi i32 [ %.sroa.0104.0.copyload, %389 ], [ %.sroa.0104.1.lcssa, %._crit_edge469 ]
  %.sroa.7.0.lcssa = phi i32 [ %.sroa.7.0.copyload, %389 ], [ %.sroa.7.1.lcssa, %._crit_edge469 ]
  %.sroa.0107.0.lcssa = phi i32 [ %.sroa.0107.0.copyload, %389 ], [ %.sroa.0107.1.lcssa, %._crit_edge469 ]
  %.sroa.7109.0.lcssa = phi i32 [ %.sroa.7109.0.copyload, %389 ], [ %.sroa.7109.1.lcssa, %._crit_edge469 ]
  %.sroa.9.0.lcssa = phi i32 [ %.sroa.9.0.copyload, %389 ], [ %.sroa.9.1.lcssa, %._crit_edge469 ]
  %.not285 = icmp eq i32 %.sroa.0107.0.lcssa, -1
  br i1 %.not285, label %489, label %484

393:                                              ; preds = %386
  %394 = landingpad { ptr, i32 }
          cleanup
  br label %527

.lr.ph486:                                        ; preds = %389, %._crit_edge469
  %indvars.iv536 = phi i64 [ %indvars.iv.next537, %._crit_edge469 ], [ 0, %389 ]
  %indvars.iv531 = phi i64 [ %indvars.iv.next532, %._crit_edge469 ], [ 1, %389 ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge469 ], [ 2, %389 ]
  %.0263484 = phi float [ %.1264.lcssa, %._crit_edge469 ], [ 0x3FA99999A0000000, %389 ]
  %.sroa.9.0483 = phi i32 [ %.sroa.9.1.lcssa, %._crit_edge469 ], [ %.sroa.9.0.copyload, %389 ]
  %.sroa.7109.0482 = phi i32 [ %.sroa.7109.1.lcssa, %._crit_edge469 ], [ %.sroa.7109.0.copyload, %389 ]
  %.sroa.0107.0481 = phi i32 [ %.sroa.0107.1.lcssa, %._crit_edge469 ], [ %.sroa.0107.0.copyload, %389 ]
  %.0267480 = phi float [ %.1268.lcssa, %._crit_edge469 ], [ %388, %389 ]
  %.sroa.7.0479 = phi i32 [ %.sroa.7.1.lcssa, %._crit_edge469 ], [ %.sroa.7.0.copyload, %389 ]
  %.sroa.0104.0478 = phi i32 [ %.sroa.0104.1.lcssa, %._crit_edge469 ], [ %.sroa.0104.0.copyload, %389 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #11
  %395 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv536)
          to label %396 unwind label %411

396:                                              ; preds = %.lr.ph486
  %397 = load i32, ptr %395, align 4, !tbaa !43
  %398 = sext i32 %397 to i64
  %399 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %398)
          to label %400 unwind label %411

400:                                              ; preds = %396
  %401 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %399)
          to label %402 unwind label %411

402:                                              ; preds = %400
  %403 = extractvalue { double, double } %401, 0
  store double %403, ptr %40, align 16
  %404 = extractvalue { double, double } %401, 1
  store double %404, ptr %246, align 8
  %indvars.iv.next537 = add nuw nsw i64 %indvars.iv536, 1
  %405 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext = shl i64 %405, 32
  %406 = ashr exact i64 %sext, 32
  %407 = icmp slt i64 %indvars.iv.next537, %406
  br i1 %407, label %.lr.ph468, label %._crit_edge469

._crit_edge469:                                   ; preds = %._crit_edge455, %402
  %.sroa.0104.1.lcssa = phi i32 [ %.sroa.0104.0478, %402 ], [ %.sroa.0104.2, %._crit_edge455 ]
  %.sroa.7.1.lcssa = phi i32 [ %.sroa.7.0479, %402 ], [ %.sroa.7.2, %._crit_edge455 ]
  %.1268.lcssa = phi float [ %.0267480, %402 ], [ %.2269, %._crit_edge455 ]
  %.sroa.0107.1.lcssa = phi i32 [ %.sroa.0107.0481, %402 ], [ %.sroa.0107.2.lcssa, %._crit_edge455 ]
  %.sroa.7109.1.lcssa = phi i32 [ %.sroa.7109.0482, %402 ], [ %.sroa.7109.2.lcssa, %._crit_edge455 ]
  %.sroa.9.1.lcssa = phi i32 [ %.sroa.9.0483, %402 ], [ %.sroa.9.2.lcssa, %._crit_edge455 ]
  %.1264.lcssa = phi float [ %.0263484, %402 ], [ %.2265.lcssa, %._crit_edge455 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #11
  %408 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext545 = shl i64 %408, 32
  %409 = ashr exact i64 %sext545, 32
  %410 = icmp slt i64 %indvars.iv.next537, %409
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %indvars.iv.next532 = add nuw nsw i64 %indvars.iv531, 1
  br i1 %410, label %.lr.ph486, label %._crit_edge487, !llvm.loop !67

411:                                              ; preds = %400, %396, %.lr.ph486
  %412 = landingpad { ptr, i32 }
          cleanup
  br label %483

.lr.ph468:                                        ; preds = %402, %._crit_edge455
  %indvars.iv533 = phi i64 [ %indvars.iv.next534, %._crit_edge455 ], [ %indvars.iv531, %402 ]
  %indvars.iv526 = phi i64 [ %indvars.iv.next527, %._crit_edge455 ], [ %indvars.iv, %402 ]
  %.1264466 = phi float [ %.2265.lcssa, %._crit_edge455 ], [ %.0263484, %402 ]
  %.sroa.9.1465 = phi i32 [ %.sroa.9.2.lcssa, %._crit_edge455 ], [ %.sroa.9.0483, %402 ]
  %.sroa.7109.1464 = phi i32 [ %.sroa.7109.2.lcssa, %._crit_edge455 ], [ %.sroa.7109.0482, %402 ]
  %.sroa.0107.1463 = phi i32 [ %.sroa.0107.2.lcssa, %._crit_edge455 ], [ %.sroa.0107.0481, %402 ]
  %.1268462 = phi float [ %.2269, %._crit_edge455 ], [ %.0267480, %402 ]
  %.sroa.7.1461 = phi i32 [ %.sroa.7.2, %._crit_edge455 ], [ %.sroa.7.0479, %402 ]
  %.sroa.0104.1460 = phi i32 [ %.sroa.0104.2, %._crit_edge455 ], [ %.sroa.0104.0478, %402 ]
  %413 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv533)
          to label %414 unwind label %436

414:                                              ; preds = %.lr.ph468
  %415 = load i32, ptr %413, align 4, !tbaa !43
  %416 = sext i32 %415 to i64
  %417 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %416)
          to label %418 unwind label %436

418:                                              ; preds = %414
  %419 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %417)
          to label %420 unwind label %436

420:                                              ; preds = %418
  %421 = extractvalue { double, double } %419, 0
  %422 = extractvalue { double, double } %419, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #11
  %423 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %40, double %421, double %422)
          to label %424 unwind label %438

424:                                              ; preds = %420
  %425 = extractvalue { double, double } %423, 0
  store double %425, ptr %41, align 16
  %426 = extractvalue { double, double } %423, 1
  store double %426, ptr %247, align 8
  %427 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %40, double %421, double %422)
  %428 = fcmp olt float %427, %.1268462
  br i1 %428, label %429, label %442

429:                                              ; preds = %424
  %430 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv536)
          to label %431 unwind label %440

431:                                              ; preds = %429
  %432 = load i32, ptr %430, align 4, !tbaa !43
  %433 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv533)
          to label %434 unwind label %440

434:                                              ; preds = %431
  %435 = load i32, ptr %433, align 4, !tbaa !43
  br label %442

436:                                              ; preds = %418, %414, %.lr.ph468
  %437 = landingpad { ptr, i32 }
          cleanup
  br label %483

438:                                              ; preds = %420
  %439 = landingpad { ptr, i32 }
          cleanup
  br label %482

440:                                              ; preds = %431, %429
  %441 = landingpad { ptr, i32 }
          cleanup
  br label %482

442:                                              ; preds = %434, %424
  %.sroa.0104.2 = phi i32 [ %432, %434 ], [ %.sroa.0104.1460, %424 ]
  %.sroa.7.2 = phi i32 [ %435, %434 ], [ %.sroa.7.1461, %424 ]
  %.2269 = phi float [ %427, %434 ], [ %.1268462, %424 ]
  %indvars.iv.next534 = add nuw nsw i64 %indvars.iv533, 1
  %443 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %444 = trunc i64 %443 to i32
  %445 = trunc nuw i64 %indvars.iv.next534 to i32
  %446 = icmp slt i32 %445, %444
  br i1 %446, label %.lr.ph454, label %._crit_edge455

._crit_edge455:                                   ; preds = %477, %442
  %.sroa.0107.2.lcssa = phi i32 [ %.sroa.0107.1463, %442 ], [ %.sroa.0107.3, %477 ]
  %.sroa.7109.2.lcssa = phi i32 [ %.sroa.7109.1464, %442 ], [ %.sroa.7109.3, %477 ]
  %.sroa.9.2.lcssa = phi i32 [ %.sroa.9.1465, %442 ], [ %.sroa.9.3, %477 ]
  %.2265.lcssa = phi float [ %.1264466, %442 ], [ %.3266, %477 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #11
  %447 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %448 = trunc i64 %447 to i32
  %449 = icmp slt i32 %445, %448
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  br i1 %449, label %.lr.ph468, label %._crit_edge469, !llvm.loop !68

.lr.ph454:                                        ; preds = %442, %477
  %indvars.iv528 = phi i64 [ %indvars.iv.next529, %477 ], [ %indvars.iv526, %442 ]
  %.2265452 = phi float [ %.3266, %477 ], [ %.1264466, %442 ]
  %.sroa.9.2451 = phi i32 [ %.sroa.9.3, %477 ], [ %.sroa.9.1465, %442 ]
  %.sroa.7109.2450 = phi i32 [ %.sroa.7109.3, %477 ], [ %.sroa.7109.1464, %442 ]
  %.sroa.0107.2449 = phi i32 [ %.sroa.0107.3, %477 ], [ %.sroa.0107.1463, %442 ]
  %450 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv528)
          to label %451 unwind label %473

451:                                              ; preds = %.lr.ph454
  %452 = load i32, ptr %450, align 4, !tbaa !43
  %453 = sext i32 %452 to i64
  %454 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %453)
          to label %455 unwind label %473

455:                                              ; preds = %451
  %456 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %454)
          to label %457 unwind label %473

457:                                              ; preds = %455
  %458 = extractvalue { double, double } %456, 0
  %459 = extractvalue { double, double } %456, 1
  %460 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %41, double %458, double %459)
  %461 = call noundef float @_ZSt3absf(float noundef %460)
  %462 = fcmp ogt float %461, %.2265452
  br i1 %462, label %463, label %477

463:                                              ; preds = %457
  %464 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv536)
          to label %465 unwind label %475

465:                                              ; preds = %463
  %466 = load i32, ptr %464, align 4, !tbaa !43
  %467 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv533)
          to label %468 unwind label %475

468:                                              ; preds = %465
  %469 = load i32, ptr %467, align 4, !tbaa !43
  %470 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv528)
          to label %471 unwind label %475

471:                                              ; preds = %468
  %472 = load i32, ptr %470, align 4, !tbaa !43
  br label %477

473:                                              ; preds = %455, %451, %.lr.ph454
  %474 = landingpad { ptr, i32 }
          cleanup
  br label %482

475:                                              ; preds = %468, %465, %463
  %476 = landingpad { ptr, i32 }
          cleanup
  br label %482

477:                                              ; preds = %471, %457
  %.sroa.0107.3 = phi i32 [ %466, %471 ], [ %.sroa.0107.2449, %457 ]
  %.sroa.7109.3 = phi i32 [ %469, %471 ], [ %.sroa.7109.2450, %457 ]
  %.sroa.9.3 = phi i32 [ %472, %471 ], [ %.sroa.9.2451, %457 ]
  %.3266 = phi float [ %461, %471 ], [ %.2265452, %457 ]
  %indvars.iv.next529 = add nuw nsw i64 %indvars.iv528, 1
  %478 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %479 = trunc i64 %478 to i32
  %480 = trunc nuw i64 %indvars.iv.next529 to i32
  %481 = icmp slt i32 %480, %479
  br i1 %481, label %.lr.ph454, label %._crit_edge455, !llvm.loop !69

482:                                              ; preds = %440, %475, %473, %438
  %.pn289.pn.pn = phi { ptr, i32 } [ %439, %438 ], [ %441, %440 ], [ %476, %475 ], [ %474, %473 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #11
  br label %483

483:                                              ; preds = %436, %482, %411
  %.pn289.pn.pn.pn.pn = phi { ptr, i32 } [ %412, %411 ], [ %.pn289.pn.pn, %482 ], [ %437, %436 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #11
  br label %527

484:                                              ; preds = %._crit_edge487
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %42) #11
  store i32 %.sroa.0107.0.lcssa, ptr %42, align 4, !tbaa !43
  store i32 %.sroa.7109.0.lcssa, ptr %248, align 4, !tbaa !43
  store i32 %.sroa.9.0.lcssa, ptr %249, align 4, !tbaa !43
  %485 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr nonnull %42, i64 3)
          to label %486 unwind label %487

486:                                              ; preds = %484
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #11
  br label %503

487:                                              ; preds = %484
  %488 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #11
  br label %527

489:                                              ; preds = %._crit_edge487
  %.not286 = icmp eq i32 %.sroa.0104.0.lcssa, -1
  br i1 %.not286, label %495, label %490

490:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #11
  store i32 %.sroa.0104.0.lcssa, ptr %43, align 4, !tbaa !43
  store i32 %.sroa.7.0.lcssa, ptr %250, align 4, !tbaa !43
  %491 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr nonnull %43, i64 2)
          to label %492 unwind label %493

492:                                              ; preds = %490
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #11
  br label %503

493:                                              ; preds = %490
  %494 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #11
  br label %527

495:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #11
  %496 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef 0)
          to label %497 unwind label %501

497:                                              ; preds = %495
  %498 = load i32, ptr %496, align 4, !tbaa !43
  store i32 %498, ptr %44, align 4, !tbaa !43
  %499 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr nonnull %44, i64 1)
          to label %500 unwind label %501

500:                                              ; preds = %497
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #11
  br label %503

501:                                              ; preds = %497, %495
  %502 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #11
  br label %527

503:                                              ; preds = %492, %500, %486
  %504 = invoke noundef nonnull align 16 dereferenceable(32) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %68, i64 noundef %indvars.iv542)
          to label %505 unwind label %513

505:                                              ; preds = %503
  %506 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %507 = trunc i64 %506 to i32
  %508 = getelementptr inbounds i8, ptr %504, i64 16
  store i32 %507, ptr %508, align 16, !tbaa !70
  %509 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %510 = trunc i64 %509 to i32
  %511 = icmp sgt i32 %510, 0
  br i1 %511, label %.lr.ph495, label %._crit_edge496

.lr.ph495:                                        ; preds = %505
  %512 = getelementptr inbounds i8, ptr %504, i64 20
  br label %517

513:                                              ; preds = %503
  %514 = landingpad { ptr, i32 }
          cleanup
  br label %527

515:                                              ; preds = %517
  %516 = landingpad { ptr, i32 }
          cleanup
  br label %527

517:                                              ; preds = %.lr.ph495, %519
  %indvars.iv539 = phi i64 [ 0, %.lr.ph495 ], [ %indvars.iv.next540, %519 ]
  %518 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv539)
          to label %519 unwind label %515

519:                                              ; preds = %517
  %520 = load i32, ptr %518, align 4, !tbaa !43
  %521 = getelementptr inbounds [3 x i32], ptr %512, i64 0, i64 %indvars.iv539
  store i32 %520, ptr %521, align 4, !tbaa !43
  %indvars.iv.next540 = add nuw nsw i64 %indvars.iv539, 1
  %522 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext546 = shl i64 %522, 32
  %523 = ashr exact i64 %sext546, 32
  %524 = icmp slt i64 %indvars.iv.next540, %523
  br i1 %524, label %517, label %._crit_edge496, !llvm.loop !72

._crit_edge496:                                   ; preds = %519, %505
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %38) #11
  %indvars.iv.next543 = add nuw nsw i64 %indvars.iv542, 1
  %525 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %sext547 = shl i64 %525, 32
  %526 = ashr exact i64 %sext547, 32
  %.not297 = icmp slt i64 %indvars.iv.next543, %526
  br i1 %.not297, label %349, label %.critedge344, !llvm.loop !73

527:                                              ; preds = %393, %513, %515, %501, %493, %487, %483, %384, %382
  %.pn311.pn = phi { ptr, i32 } [ %.pn311, %382 ], [ %385, %384 ], [ %394, %393 ], [ %.pn289.pn.pn.pn.pn, %483 ], [ %488, %487 ], [ %494, %493 ], [ %502, %501 ], [ %516, %515 ], [ %514, %513 ]
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %38) #11
  br label %705

.critedge344:                                     ; preds = %._crit_edge496, %.preheader352.split
  %528 = load float, ptr %72, align 16, !tbaa !25
  %529 = fcmp ogt float %528, 0.000000e+00
  br i1 %529, label %530, label %552

530:                                              ; preds = %.critedge344
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #11
  store float 0x47EFFFFFE0000000, ptr %45, align 4, !tbaa !42
  %531 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %532 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %.not298505 = icmp eq ptr %531, %532
  br i1 %.not298505, label %.._crit_edge509_crit_edge, label %.lr.ph508

.._crit_edge509_crit_edge:                        ; preds = %530
  %.pre = load float, ptr %45, align 4, !tbaa !42
  br label %._crit_edge509

._crit_edge509:                                   ; preds = %._crit_edge504, %.._crit_edge509_crit_edge
  %533 = phi float [ %.pre, %.._crit_edge509_crit_edge ], [ %540, %._crit_edge504 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #11
  %534 = fmul float %533, 5.000000e-01
  store float %534, ptr %47, align 4, !tbaa !42
  %535 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %72, ptr noundef nonnull align 4 dereferenceable(4) %47)
  %536 = load float, ptr %535, align 4, !tbaa !42
  store float %536, ptr %72, align 16, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #11
  br label %552

.lr.ph508:                                        ; preds = %530, %._crit_edge504
  %.0274506 = phi ptr [ %541, %._crit_edge504 ], [ %531, %530 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #11
  store float 0.000000e+00, ptr %46, align 4, !tbaa !42
  %537 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %538 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %.not310500 = icmp eq ptr %537, %538
  br i1 %.not310500, label %._crit_edge504, label %.lr.ph503

._crit_edge504:                                   ; preds = %550, %.lr.ph508
  %539 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %45, ptr noundef nonnull align 4 dereferenceable(4) %46)
  %540 = load float, ptr %539, align 4, !tbaa !42
  store float %540, ptr %45, align 4, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #11
  %541 = getelementptr inbounds i8, ptr %.0274506, i64 16
  %.not298 = icmp eq ptr %541, %532
  br i1 %.not298, label %._crit_edge509, label %.lr.ph508

.lr.ph503:                                        ; preds = %.lr.ph508, %550
  %.0275501 = phi ptr [ %551, %550 ], [ %537, %.lr.ph508 ]
  %.sroa.045.0.copyload = load double, ptr %.0275501, align 16
  %.sroa.246.0..sroa_idx = getelementptr inbounds i8, ptr %.0275501, i64 8
  %.sroa.246.0.copyload = load double, ptr %.sroa.246.0..sroa_idx, align 8, !tbaa !50
  %542 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %.0274506, double %.sroa.045.0.copyload, double %.sroa.246.0.copyload)
          to label %543 unwind label %548

543:                                              ; preds = %.lr.ph503
  %544 = fneg float %542
  %545 = load float, ptr %46, align 4, !tbaa !42
  %546 = fcmp olt float %545, %544
  br i1 %546, label %547, label %550

547:                                              ; preds = %543
  store float %544, ptr %46, align 4, !tbaa !42
  br label %550

548:                                              ; preds = %.lr.ph503
  %549 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #11
  br label %705

550:                                              ; preds = %547, %543
  %551 = getelementptr inbounds i8, ptr %.0275501, i64 32
  %.not310 = icmp eq ptr %551, %538
  br i1 %.not310, label %._crit_edge504, label %.lr.ph503

552:                                              ; preds = %._crit_edge509, %.critedge344
  %553 = phi float [ %536, %._crit_edge509 ], [ %528, %.critedge344 ]
  %554 = fcmp ogt float %553, 0.000000e+00
  br i1 %554, label %555, label %.loopexit

555:                                              ; preds = %552
  %556 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %557 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %.not299510 = icmp eq ptr %556, %557
  br i1 %.not299510, label %.loopexit, label %.lr.ph513

.lr.ph513:                                        ; preds = %555
  %558 = getelementptr inbounds i8, ptr %51, i64 8
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %50, i64 8
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %52, i64 8
  %559 = getelementptr inbounds i8, ptr %55, i64 8
  %560 = getelementptr inbounds i8, ptr %56, i64 8
  %561 = getelementptr inbounds i8, ptr %57, i64 8
  %562 = getelementptr inbounds i8, ptr %58, i64 8
  %563 = getelementptr inbounds i8, ptr %61, i64 8
  %564 = getelementptr inbounds i8, ptr %60, i64 8
  %565 = getelementptr inbounds i8, ptr %1, i64 108
  br label %566

566:                                              ; preds = %.lr.ph513, %685
  %.0276511 = phi ptr [ %556, %.lr.ph513 ], [ %686, %685 ]
  %567 = getelementptr inbounds i8, ptr %.0276511, i64 16
  %568 = load i32, ptr %567, align 16, !tbaa !70
  %.not300 = icmp eq i32 %568, 1
  br i1 %.not300, label %685, label %569

569:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #11
  %570 = getelementptr inbounds i8, ptr %.0276511, i64 20
  %571 = load i32, ptr %570, align 4, !tbaa !43
  %572 = sext i32 %571 to i64
  %573 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %572)
          to label %574 unwind label %591

574:                                              ; preds = %569
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %48, ptr noundef nonnull align 16 dereferenceable(16) %573, i64 16, i1 false), !tbaa.struct !74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #11
  %575 = getelementptr inbounds i8, ptr %.0276511, i64 24
  %576 = load i32, ptr %575, align 4, !tbaa !43
  %577 = sext i32 %576 to i64
  %578 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %577)
          to label %579 unwind label %593

579:                                              ; preds = %574
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %49, ptr noundef nonnull align 16 dereferenceable(16) %578, i64 16, i1 false), !tbaa.struct !74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #11
  %580 = load i32, ptr %567, align 16, !tbaa !70
  switch i32 %580, label %599 [
    i32 3, label %581
    i32 2, label %603
  ]

581:                                              ; preds = %579
  %582 = getelementptr inbounds i8, ptr %.0276511, i64 28
  %583 = load i32, ptr %582, align 4, !tbaa !43
  %584 = sext i32 %583 to i64
  %585 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %584)
          to label %586 unwind label %595

586:                                              ; preds = %581
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %50, ptr noundef nonnull align 16 dereferenceable(16) %585, i64 16, i1 false), !tbaa.struct !74
  %587 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %588 unwind label %597

588:                                              ; preds = %586
  %589 = extractvalue { double, double } %587, 0
  %590 = extractvalue { double, double } %587, 1
  br label %622

591:                                              ; preds = %569
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %683

593:                                              ; preds = %574
  %594 = landingpad { ptr, i32 }
          cleanup
  br label %682

595:                                              ; preds = %599, %581
  %596 = landingpad { ptr, i32 }
          cleanup
  br label %681

597:                                              ; preds = %586
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %681

599:                                              ; preds = %579
  %600 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.4, i32 noundef 313)
          to label %601 unwind label %595

601:                                              ; preds = %599
  br i1 %600, label %602, label %603

602:                                              ; preds = %601
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !75
  br label %603

603:                                              ; preds = %579, %602, %601
  %.sroa.026.0.copyload = load double, ptr %.0276511, align 16
  %.sroa.227.0..sroa_idx = getelementptr inbounds i8, ptr %.0276511, i64 8
  %.sroa.227.0.copyload = load double, ptr %.sroa.227.0..sroa_idx, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #11
  %604 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %48)
          to label %605 unwind label %620

605:                                              ; preds = %603
  %606 = extractvalue { double, double } %604, 0
  store double %606, ptr %51, align 16
  %607 = extractvalue { double, double } %604, 1
  store double %607, ptr %558, align 8
  %608 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %49)
          to label %609 unwind label %620

609:                                              ; preds = %605
  %610 = extractvalue { double, double } %608, 0
  %611 = extractvalue { double, double } %608, 1
  %612 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %51, double %610, double %611)
          to label %613 unwind label %620

613:                                              ; preds = %609
  %614 = extractvalue { double, double } %612, 0
  %615 = extractvalue { double, double } %612, 1
  %616 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %.sroa.026.0.copyload, double %.sroa.227.0.copyload, double %614, double %615)
          to label %617 unwind label %620

617:                                              ; preds = %613
  %618 = extractvalue { double, double } %616, 0
  %619 = extractvalue { double, double } %616, 1
  store double %618, ptr %50, align 16
  store double %619, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !50
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %52) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %52, float noundef 1.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %.sroa.031.0.copyload = load double, ptr %52, align 16
  %.sroa.6.0.copyload = load double, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !50
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %52) #11
  br label %622

620:                                              ; preds = %613, %609, %605, %603
  %621 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #11
  br label %681

622:                                              ; preds = %617, %588
  %.sroa.6.0 = phi double [ %590, %588 ], [ %.sroa.6.0.copyload, %617 ]
  %.sroa.031.0 = phi double [ %589, %588 ], [ %.sroa.031.0.copyload, %617 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %53) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %54) #11
  %623 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %48)
          to label %624 unwind label %647

624:                                              ; preds = %622
  %625 = extractvalue { double, double } %623, 0
  %626 = extractvalue { double, double } %623, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %55, double %625, double %626, float noundef 0.000000e+00)
  %627 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %49)
          to label %628 unwind label %647

628:                                              ; preds = %624
  %629 = extractvalue { double, double } %627, 0
  %630 = extractvalue { double, double } %627, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %56, double %629, double %630, float noundef 0.000000e+00)
  %631 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %50)
          to label %632 unwind label %647

632:                                              ; preds = %628
  %633 = extractvalue { double, double } %631, 0
  %634 = extractvalue { double, double } %631, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %57, double %633, double %634, float noundef 0.000000e+00)
  invoke void @_ZN3JPH4Vec4C2Effff(ptr noundef nonnull align 16 dereferenceable(16) %58, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00)
          to label %635 unwind label %647

635:                                              ; preds = %632
  %636 = load double, ptr %55, align 16
  %637 = load double, ptr %559, align 8
  %638 = load double, ptr %56, align 16
  %639 = load double, ptr %560, align 8
  %640 = load double, ptr %57, align 16
  %641 = load double, ptr %561, align 8
  %642 = load double, ptr %58, align 16
  %643 = load double, ptr %562, align 8
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %54, double %636, double %637, double %638, double %639, double %640, double %641, double %642, double %643)
  call void @_ZNK3JPH5Mat4410TransposedEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %53, ptr noundef nonnull align 16 dereferenceable(64) %54)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %54) #11
  %644 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %53)
          to label %645 unwind label %649

645:                                              ; preds = %635
  %646 = fcmp une float %644, 0.000000e+00
  br i1 %646, label %651, label %684

647:                                              ; preds = %632, %628, %624, %622
  %648 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %54) #11
  br label %680

649:                                              ; preds = %635
  %650 = landingpad { ptr, i32 }
          cleanup
  br label %680

651:                                              ; preds = %645
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %59) #11
  invoke void @_ZNK3JPH5Mat4412Adjointed3x3Ev(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %59, ptr noundef nonnull align 16 dereferenceable(64) %53)
          to label %652 unwind label %668

652:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %60) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %61) #11
  %653 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %59, double %.sroa.031.0, double %.sroa.6.0)
          to label %654 unwind label %670

654:                                              ; preds = %652
  %655 = extractvalue { double, double } %653, 0
  store double %655, ptr %61, align 16
  %656 = extractvalue { double, double } %653, 1
  store double %656, ptr %563, align 8
  %657 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %61, float noundef %644)
          to label %658 unwind label %670

658:                                              ; preds = %654
  %659 = extractvalue { double, double } %657, 0
  store double %659, ptr %60, align 16
  %660 = extractvalue { double, double } %657, 1
  store double %660, ptr %564, align 8
  %661 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %60)
          to label %662 unwind label %670

662:                                              ; preds = %658
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #11
  %663 = fcmp ogt float %661, 1.000000e+00
  br i1 %663, label %.thread345, label %664

664:                                              ; preds = %662
  %665 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 341)
          to label %666 unwind label %672

666:                                              ; preds = %664
  br i1 %665, label %667, label %.thread345

667:                                              ; preds = %666
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !76
  br label %.thread345

668:                                              ; preds = %651
  %669 = landingpad { ptr, i32 }
          cleanup
  br label %679

670:                                              ; preds = %658, %654, %652
  %671 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #11
  br label %679

672:                                              ; preds = %664
  %673 = landingpad { ptr, i32 }
          cleanup
  br label %679

.thread345:                                       ; preds = %662, %666, %667
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #11
  %674 = load float, ptr %565, align 4, !tbaa !77
  %675 = fadd float %661, -1.000000e+00
  %676 = fdiv float %674, %675
  store float %676, ptr %62, align 4, !tbaa !42
  %677 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %72, ptr noundef nonnull align 4 dereferenceable(4) %62)
  %678 = load float, ptr %677, align 4, !tbaa !42
  store float %678, ptr %72, align 16, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %59) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #11
  br label %685

679:                                              ; preds = %670, %672, %668
  %.pn301.pn = phi { ptr, i32 } [ %669, %668 ], [ %673, %672 ], [ %671, %670 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %59) #11
  br label %680

680:                                              ; preds = %649, %679, %647
  %.pn301.pn.pn.pn = phi { ptr, i32 } [ %648, %647 ], [ %.pn301.pn, %679 ], [ %650, %649 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #11
  br label %681

681:                                              ; preds = %680, %620, %597, %595
  %.pn301.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn301.pn.pn.pn, %680 ], [ %598, %597 ], [ %596, %595 ], [ %621, %620 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #11
  br label %682

682:                                              ; preds = %681, %593
  %.pn301.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn301.pn.pn.pn.pn, %681 ], [ %594, %593 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #11
  br label %683

683:                                              ; preds = %682, %591
  %.pn301.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn301.pn.pn.pn.pn.pn, %682 ], [ %592, %591 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #11
  br label %705

684:                                              ; preds = %645
  store float 0.000000e+00, ptr %72, align 16, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #11
  br label %.loopexit

685:                                              ; preds = %.thread345, %566
  %686 = getelementptr inbounds i8, ptr %.0276511, i64 32
  %.not299 = icmp eq ptr %686, %557
  br i1 %.not299, label %.loopexit, label %566

.loopexit:                                        ; preds = %685, %555, %684, %552
  store float 0x47EFFFFFE0000000, ptr %75, align 8, !tbaa !39
  %687 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %688 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %.not309514 = icmp eq ptr %687, %688
  br i1 %.not309514, label %._crit_edge518, label %.lr.ph517

._crit_edge518:                                   ; preds = %692, %.loopexit
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %64) #11
  store float 0.000000e+00, ptr %64, align 4, !tbaa !42
  %689 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %64, ptr noundef nonnull align 4 dereferenceable(4) %75)
  %690 = load float, ptr %689, align 4, !tbaa !42
  store float %690, ptr %75, align 8, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %64) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #11
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull %0)
          to label %699 unwind label %703

.lr.ph517:                                        ; preds = %.loopexit, %692
  %.0250515 = phi ptr [ %696, %692 ], [ %687, %.loopexit ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %63) #11
  %691 = invoke noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16) %.0250515)
          to label %692 unwind label %697

692:                                              ; preds = %.lr.ph517
  %693 = fneg float %691
  store float %693, ptr %63, align 4, !tbaa !42
  %694 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %75, ptr noundef nonnull align 4 dereferenceable(4) %63)
  %695 = load float, ptr %694, align 4, !tbaa !42
  store float %695, ptr %75, align 8, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #11
  %696 = getelementptr inbounds i8, ptr %.0250515, i64 16
  %.not309 = icmp eq ptr %696, %688
  br i1 %.not309, label %._crit_edge518, label %.lr.ph517

697:                                              ; preds = %.lr.ph517
  %698 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #11
  br label %705

699:                                              ; preds = %._crit_edge518
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE3SetEOS3_(ptr noundef nonnull align 8 dereferenceable(33) %2, ptr noundef nonnull align 8 dereferenceable(8) %65)
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #11
  br label %700

700:                                              ; preds = %.thread, %699, %346
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %29) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #11
  br label %701

701:                                              ; preds = %112, %700, %89
  call void @_ZN3JPH17ConvexHullBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  br label %702

702:                                              ; preds = %77, %701
  ret void

703:                                              ; preds = %._crit_edge518
  %704 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #11
  br label %705

705:                                              ; preds = %261, %341, %339, %338, %703, %697, %683, %548, %527, %347
  %.pn319.pn.pn = phi { ptr, i32 } [ %348, %347 ], [ %.pn311.pn, %527 ], [ %549, %548 ], [ %698, %697 ], [ %704, %703 ], [ %.pn301.pn.pn.pn.pn.pn.pn, %683 ], [ %262, %261 ], [ %342, %341 ], [ %340, %339 ], [ %.pn316, %338 ]
  call void @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %29) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %29) #11
  br label %706

706:                                              ; preds = %202, %206, %220, %204, %705, %251, %149
  %.pn326.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn319.pn.pn, %705 ], [ %252, %251 ], [ %150, %149 ], [ %203, %202 ], [ %205, %204 ], [ %.pn326.pn.pn, %220 ], [ %207, %206 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #11
  br label %707

707:                                              ; preds = %706, %147
  %.pn326.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn.pn.pn.pn.pn, %706 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #11
  br label %708

708:                                              ; preds = %113, %119, %707, %93
  %.pn337 = phi { ptr, i32 } [ %94, %93 ], [ %.pn326.pn.pn.pn.pn.pn.pn.pn, %707 ], [ %114, %113 ], [ %.pn, %119 ]
  call void @_ZN3JPH17ConvexHullBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #11
  br label %709

709:                                              ; preds = %708, %91
  %.pn337.pn = phi { ptr, i32 } [ %.pn337, %708 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  br label %710

710:                                              ; preds = %709, %80
  %.pn340 = phi { ptr, i32 } [ %81, %80 ], [ %.pn337.pn, %709 ]
  call void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %71) #11
  call void @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #11
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #11
  call void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %68) #11
  br label %711

711:                                              ; preds = %710, %78
  %.pn340.pn = phi { ptr, i32 } [ %.pn340, %710 ], [ %79, %78 ]
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %0) #11
  resume { ptr, i32 } %.pn340.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11ConvexShapeC2ENS_13EShapeSubTypeERKNS_19ConvexShapeSettingsERNS_6ResultINS_3RefINS_5ShapeEEEEE(ptr noundef nonnull align 8 dereferenceable(44), i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(76), ptr noundef nonnull align 8 dereferenceable(33)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef) local_unnamed_addr #3 align 2

declare void @_ZN3JPH17ConvexHullBuilderC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5

declare noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, float noundef, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

declare void @_ZNK3JPH17ConvexHullBuilder17DetermineMaxErrorERPNS0_4FaceERfRiS4_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

declare void @_ZN3JPH12StringFormatB5cxx11EPKcz(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ...) local_unnamed_addr #5

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

declare void @_ZNK3JPH17ConvexHullBuilder24GetCenterOfMassAndVolumeERNS_4Vec3ERf(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #6 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 nounwind uwtable
declare dso_local void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef) unnamed_addr #7 align 2

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, i32 noundef) local_unnamed_addr #8 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEE4findERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKihELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32), double, double) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIihSt4hashIiESt8equal_toIiEN3JPH12STLAllocatorISt4pairIKihEEEEixERS7_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #8 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE3SetEOS3_(ptr noundef nonnull align 8 dereferenceable(33), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { alwaysinline mustprogress 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 #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !23, i64 104}
!9 = !{!"_ZTSN3JPH23ConvexHullShapeSettingsE", !10, i64 0, !24, i64 80, !23, i64 104, !23, i64 108, !23, i64 112}
!10 = !{!"_ZTSN3JPH19ConvexShapeSettingsE", !11, i64 0, !21, i64 64, !23, i64 72}
!11 = !{!"_ZTSN3JPH13ShapeSettingsE", !12, i64 0, !13, i64 8, !18, i64 16, !19, i64 24}
!12 = !{!"_ZTSN3JPH18SerializableObjectE"}
!13 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !14, i64 0}
!14 = !{!"_ZTSSt6atomicIjE", !15, i64 0}
!15 = !{!"_ZTSSt13__atomic_baseIjE", !16, i64 0}
!16 = !{!"int", !17, i64 0}
!17 = !{!"omnipotent char", !7, i64 0}
!18 = !{!"long", !17, i64 0}
!19 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !17, i64 0, !20, i64 32}
!20 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !17, i64 0}
!21 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !22, i64 0}
!22 = !{!"any pointer", !17, i64 0}
!23 = !{!"float", !17, i64 0}
!24 = !{!"_ZTSN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!25 = !{!26, !23, i64 256}
!26 = !{!"_ZTSN3JPH15ConvexHullShapeE", !27, i64 0, !32, i64 48, !33, i64 64, !34, i64 128, !35, i64 160, !36, i64 184, !37, i64 208, !38, i64 232, !23, i64 256, !23, i64 260, !23, i64 264}
!27 = !{!"_ZTSN3JPH11ConvexShapeE", !28, i64 0, !21, i64 32, !23, i64 40}
!28 = !{!"_ZTSN3JPH5ShapeE", !29, i64 8, !18, i64 16, !30, i64 24, !31, i64 25}
!29 = !{!"_ZTSN3JPH9RefTargetINS_5ShapeEEE", !14, i64 0}
!30 = !{!"_ZTSN3JPH10EShapeTypeE", !17, i64 0}
!31 = !{!"_ZTSN3JPH13EShapeSubTypeE", !17, i64 0}
!32 = !{!"_ZTSN3JPH4Vec3E", !17, i64 0}
!33 = !{!"_ZTSN3JPH5Mat44E", !17, i64 0}
!34 = !{!"_ZTSN3JPH5AABoxE", !32, i64 0, !32, i64 16}
!35 = !{!"_ZTSN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!36 = !{!"_ZTSN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!37 = !{!"_ZTSN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!38 = !{!"_ZTSN3JPH5ArrayIhNS_12STLAllocatorIhEEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!39 = !{!26, !23, i64 264}
!40 = !{!22, !22, i64 0}
!41 = !{!9, !23, i64 112}
!42 = !{!23, !23, i64 0}
!43 = !{!16, !16, i64 0}
!44 = !{!45, !22, i64 56}
!45 = !{!"_ZTSN3JPH17ConvexHullBuilder4FaceE", !32, i64 0, !32, i64 16, !46, i64 32, !22, i64 56, !23, i64 64, !47, i64 68}
!46 = !{!"_ZTSN3JPH5ArrayIiNS_12STLAllocatorIiEEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!47 = !{!"bool", !17, i64 0}
!48 = !{!49, !16, i64 24}
!49 = !{!"_ZTSN3JPH17ConvexHullBuilder4EdgeE", !22, i64 0, !22, i64 8, !22, i64 16, !16, i64 24}
!50 = !{!17, !17, i64 0}
!51 = !{!49, !22, i64 8}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}
!54 = !{i64 0, i64 64, !50}
!55 = !{i64 2157814455}
!56 = !{!57, !17, i64 4}
!57 = !{!"_ZTSSt4pairIKihE", !16, i64 0, !17, i64 4}
!58 = !{i64 2157814815}
!59 = !{i64 2157815183}
!60 = distinct !{!60, !53}
!61 = !{!62, !63, i64 0}
!62 = !{!"_ZTSN3JPH15ConvexHullShape4FaceE", !63, i64 0, !63, i64 2}
!63 = !{!"short", !17, i64 0}
!64 = !{!62, !63, i64 2}
!65 = distinct !{!65, !53}
!66 = distinct !{!66, !53}
!67 = distinct !{!67, !53}
!68 = distinct !{!68, !53}
!69 = distinct !{!69, !53}
!70 = !{!71, !16, i64 16}
!71 = !{!"_ZTSN3JPH15ConvexHullShape5PointE", !32, i64 0, !16, i64 16, !17, i64 20}
!72 = distinct !{!72, !53}
!73 = distinct !{!73, !53}
!74 = !{i64 0, i64 16, !50}
!75 = !{i64 2157815567}
!76 = !{i64 2157815909}
!77 = !{!9, !23, i64 108}


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