; LLVM IR from jrouwe/JoltPhysics :: 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.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator" = type { %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::IteratorBase.base" = type <{ ptr, i32 }>
%"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 { [38 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 [101 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.JPH::UnorderedMap", 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 %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator", align 8
  %64 = alloca %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::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, 288) ({ [38 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 %1652

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 %1673

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 %1672

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 %1650

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 %1671

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 %1670

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 %1669

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 %1649 [
    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 %1669

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 %1668

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 %1667

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 %1667

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 %526

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 %526

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 %526

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 %526

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 %526

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 %526

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 32, ptr %52) #11
  call void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %52) #11
  %508 = load ptr, ptr %5, align 8, !tbaa !5
  %509 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %508, i32 0, i32 2
  %510 = invoke noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %509)
          to label %511 unwind label %530

511:                                              ; preds = %506
  %512 = trunc i64 %510 to i32
  invoke void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE7reserveEj(ptr noundef nonnull align 8 dereferenceable(28) %52, i32 noundef %512)
          to label %513 unwind label %530

513:                                              ; preds = %511
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  %514 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %514, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %515 = load ptr, ptr %53, align 8, !tbaa !5
  %516 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %515)
          to label %517 unwind label %534

517:                                              ; preds = %513
  store ptr %516, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  %518 = load ptr, ptr %53, align 8, !tbaa !5
  %519 = invoke noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %518)
          to label %520 unwind label %538

520:                                              ; preds = %517
  store ptr %519, ptr %55, align 8, !tbaa !5
  br label %521

521:                                              ; preds = %731, %520
  %522 = load ptr, ptr %54, align 8, !tbaa !5
  %523 = load ptr, ptr %55, align 8, !tbaa !5
  %524 = icmp ne ptr %522, %523
  br i1 %524, label %542, label %525

525:                                              ; preds = %521
  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 %748

526:                                              ; preds = %505, %502, %498, %495, %493, %492
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %7, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 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 %1667

530:                                              ; preds = %748, %511, %506
  %531 = landingpad { ptr, i32 }
          cleanup
  %532 = extractvalue { ptr, i32 } %531, 0
  store ptr %532, ptr %7, align 8
  %533 = extractvalue { ptr, i32 } %531, 1
  store i32 %533, ptr %8, align 4
  br label %1666

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

538:                                              ; preds = %517
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %7, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %8, align 4
  br label %746

542:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  %543 = load ptr, ptr %54, align 8, !tbaa !5
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  store ptr %544, ptr %56, align 8, !tbaa !5
  br label %545

545:                                              ; preds = %542
  %546 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %547 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %546)
          to label %548 unwind label %554

548:                                              ; preds = %545
  %549 = icmp ule i64 %547, 65535
  br i1 %549, label %558, label %550

550:                                              ; preds = %548
  %551 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 132)
          to label %552 unwind label %554

552:                                              ; preds = %550
  br i1 %551, label %553, label %558

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

554:                                              ; preds = %550, %545
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %7, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %8, align 4
  br label %745

558:                                              ; preds = %553, %552, %548
  br label %559

559:                                              ; preds = %558
  br label %560

560:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 2, ptr %58) #11
  %561 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %562 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %561)
          to label %563 unwind label %581

563:                                              ; preds = %560
  %564 = trunc i64 %562 to i16
  store i16 %564, 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
  %565 = load ptr, ptr %56, align 8, !tbaa !5
  %566 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %565, i32 0, i32 3
  %567 = load ptr, ptr %566, align 8, !tbaa !46
  store ptr %567, ptr %60, align 8, !tbaa !5
  br label %568

568:                                              ; preds = %674, %563
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %569 = load ptr, ptr %60, align 8, !tbaa !5
  %570 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %569, i32 0, i32 3
  %571 = load i32, ptr %570, align 8, !tbaa !50
  store i32 %571, ptr %62, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #11
  invoke void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEE4findERKi(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8 %63, ptr noundef nonnull align 8 dereferenceable(28) %52, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %572 unwind label %585

572:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #11
  invoke void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE3endEv(ptr dead_on_unwind writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8 %64, ptr noundef nonnull align 8 dereferenceable(28) %52)
          to label %573 unwind label %589

573:                                              ; preds = %572
  %574 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE12IteratorBaseIS9_NS9_8iteratorEEneERKSB_(ptr noundef nonnull align 8 dereferenceable(12) %63, ptr noundef nonnull align 8 dereferenceable(12) %64)
          to label %575 unwind label %589

575:                                              ; preds = %573
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #11
  br i1 %574, label %576, label %593

576:                                              ; preds = %575
  %577 = invoke noundef ptr @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %63)
          to label %578 unwind label %585

578:                                              ; preds = %576
  %579 = getelementptr inbounds %"struct.std::pair", ptr %577, i32 0, i32 1
  %580 = load i8, ptr %579, align 4, !tbaa !61
  store i8 %580, ptr %61, align 1, !tbaa !53
  br label %654

581:                                              ; preds = %560
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %7, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %8, align 4
  br label %744

585:                                              ; preds = %666, %660, %655, %576, %568
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %7, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %8, align 4
  br label %734

589:                                              ; preds = %573, %572
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %7, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #11
  br label %734

593:                                              ; preds = %575
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #11
  %594 = load ptr, ptr %5, align 8, !tbaa !5
  %595 = getelementptr inbounds %"class.JPH::ConvexHullShapeSettings", ptr %594, i32 0, i32 2
  %596 = load i32, ptr %62, align 4, !tbaa !45
  %597 = sext i32 %596 to i64
  %598 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %595, i64 noundef %597)
          to label %599 unwind label %628

599:                                              ; preds = %593
  %600 = 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 %600, i64 16, i1 false), !tbaa.struct !52
  %601 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %602 = load double, ptr %601, align 16
  %603 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %604 = load double, ptr %603, align 8
  %605 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %598, double %602, double %604)
          to label %606 unwind label %628

606:                                              ; preds = %599
  %607 = getelementptr inbounds %"class.JPH::Vec3", ptr %65, i32 0, i32 0
  %608 = getelementptr inbounds %union.anon.6, ptr %607, i32 0, i32 0
  %609 = getelementptr inbounds { double, double }, ptr %608, i32 0, i32 0
  %610 = extractvalue { double, double } %605, 0
  store double %610, ptr %609, align 16
  %611 = getelementptr inbounds { double, double }, ptr %608, i32 0, i32 1
  %612 = extractvalue { double, double } %605, 1
  store double %612, ptr %611, align 8
  %613 = 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
  %614 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 0
  %615 = load double, ptr %614, align 16
  %616 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 1
  %617 = load double, ptr %616, align 8
  invoke void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %613, double %615, double %617)
          to label %618 unwind label %628

618:                                              ; preds = %606
  br label %619

619:                                              ; preds = %618
  %620 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %621 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %620)
          to label %622 unwind label %628

622:                                              ; preds = %619
  %623 = icmp ule i64 %621, 255
  br i1 %623, label %632, label %624

624:                                              ; preds = %622
  %625 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 159)
          to label %626 unwind label %628

626:                                              ; preds = %624
  br i1 %625, label %627, label %632

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

628:                                              ; preds = %645, %634, %624, %619, %606, %599, %593
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %7, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %8, align 4
  br label %653

632:                                              ; preds = %627, %626, %622
  br label %633

633:                                              ; preds = %632
  br label %634

634:                                              ; preds = %633
  %635 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %636 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %635)
          to label %637 unwind label %628

637:                                              ; preds = %634
  %638 = trunc i64 %636 to i8
  store i8 %638, ptr %61, align 1, !tbaa !53
  %639 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #11
  %640 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %640, ptr align 16 %65, i64 16, i1 false), !tbaa.struct !52
  %641 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 1
  store i32 0, ptr %641, align 16, !tbaa !64
  %642 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %69, i32 0, i32 2
  store i32 -1, ptr %642, align 4, !tbaa !45
  %643 = getelementptr inbounds i32, ptr %642, i64 1
  store i32 -1, ptr %643, align 4, !tbaa !45
  %644 = getelementptr inbounds i32, ptr %642, i64 2
  store i32 -1, ptr %644, align 4, !tbaa !45
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %639, ptr noundef nonnull align 16 dereferenceable(32) %69)
          to label %645 unwind label %649

645:                                              ; preds = %637
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #11
  %646 = load i8, ptr %61, align 1, !tbaa !53
  %647 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEixERKi(ptr noundef nonnull align 8 dereferenceable(28) %52, ptr noundef nonnull align 4 dereferenceable(4) %62)
          to label %648 unwind label %628

648:                                              ; preds = %645
  store i8 %646, ptr %647, align 1, !tbaa !53
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  br label %654

649:                                              ; preds = %637
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %7, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #11
  br label %653

653:                                              ; preds = %649, %628
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #11
  br label %734

654:                                              ; preds = %648, %578
  br label %655

655:                                              ; preds = %654
  %656 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %657 = invoke noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %656)
          to label %658 unwind label %585

658:                                              ; preds = %655
  %659 = icmp ult i64 %657, 65535
  br i1 %659, label %664, label %660

660:                                              ; preds = %658
  %661 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.6, ptr noundef @.str.4, i32 noundef 166)
          to label %662 unwind label %585

662:                                              ; preds = %660
  br i1 %661, label %663, label %664

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

664:                                              ; preds = %663, %662, %658
  br label %665

665:                                              ; preds = %664
  br label %666

666:                                              ; preds = %665
  %667 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  invoke void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE9push_backERKh(ptr noundef nonnull align 8 dereferenceable(24) %667, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %668 unwind label %585

668:                                              ; preds = %666
  %669 = load i16, ptr %59, align 2, !tbaa !59
  %670 = add i16 %669, 1
  store i16 %670, ptr %59, align 2, !tbaa !59
  %671 = load ptr, ptr %60, align 8, !tbaa !5
  %672 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %671, i32 0, i32 1
  %673 = load ptr, ptr %672, align 8, !tbaa !54
  store ptr %673, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 16, 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 %674

674:                                              ; preds = %668
  %675 = load ptr, ptr %60, align 8, !tbaa !5
  %676 = load ptr, ptr %56, align 8, !tbaa !5
  %677 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %676, i32 0, i32 3
  %678 = load ptr, ptr %677, align 8, !tbaa !46
  %679 = icmp ne ptr %675, %678
  br i1 %679, label %568, label %680, !llvm.loop !67

680:                                              ; preds = %674
  %681 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #11
  %682 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %71, i32 0, i32 0
  %683 = load i16, ptr %58, align 2, !tbaa !59
  store i16 %683, ptr %682, align 2, !tbaa !68
  %684 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %71, i32 0, i32 1
  %685 = load i16, ptr %59, align 2, !tbaa !59
  store i16 %685, ptr %684, align 2, !tbaa !70
  invoke void @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %681, ptr noundef nonnull align 2 dereferenceable(4) %71)
          to label %686 unwind label %735

686:                                              ; preds = %680
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #11
  %687 = load ptr, ptr %56, align 8, !tbaa !5
  %688 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %687, i32 0, i32 1
  %689 = 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 %689, i64 16, i1 false), !tbaa.struct !52
  %690 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 0
  %691 = load double, ptr %690, align 16
  %692 = getelementptr inbounds { double, double }, ptr %74, i32 0, i32 1
  %693 = load double, ptr %692, align 8
  %694 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %688, double %691, double %693)
          to label %695 unwind label %739

695:                                              ; preds = %686
  %696 = getelementptr inbounds %"class.JPH::Vec3", ptr %73, i32 0, i32 0
  %697 = getelementptr inbounds %union.anon.6, ptr %696, i32 0, i32 0
  %698 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 0
  %699 = extractvalue { double, double } %694, 0
  store double %699, ptr %698, align 16
  %700 = getelementptr inbounds { double, double }, ptr %697, i32 0, i32 1
  %701 = extractvalue { double, double } %694, 1
  store double %701, ptr %700, align 8
  %702 = load ptr, ptr %56, align 8, !tbaa !5
  %703 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %702, i32 0, i32 0
  %704 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %703)
          to label %705 unwind label %739

705:                                              ; preds = %695
  %706 = getelementptr inbounds %"class.JPH::Vec3", ptr %75, i32 0, i32 0
  %707 = getelementptr inbounds %union.anon.6, ptr %706, i32 0, i32 0
  %708 = getelementptr inbounds { double, double }, ptr %707, i32 0, i32 0
  %709 = extractvalue { double, double } %704, 0
  store double %709, ptr %708, align 16
  %710 = getelementptr inbounds { double, double }, ptr %707, i32 0, i32 1
  %711 = extractvalue { double, double } %704, 1
  store double %711, ptr %710, align 8
  %712 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %713 = load double, ptr %712, align 16
  %714 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %715 = load double, ptr %714, align 8
  %716 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 0
  %717 = load double, ptr %716, align 16
  %718 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 1
  %719 = load double, ptr %718, align 8
  %720 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %713, double %715, double %717, double %719)
          to label %721 unwind label %739

721:                                              ; preds = %705
  %722 = getelementptr inbounds %"class.JPH::Plane", ptr %72, i32 0, i32 0
  %723 = getelementptr inbounds %"class.JPH::Vec4", ptr %722, i32 0, i32 0
  %724 = getelementptr inbounds %union.anon.7, ptr %723, i32 0, i32 0
  %725 = getelementptr inbounds { double, double }, ptr %724, i32 0, i32 0
  %726 = extractvalue { double, double } %720, 0
  store double %726, ptr %725, align 16
  %727 = getelementptr inbounds { double, double }, ptr %724, i32 0, i32 1
  %728 = extractvalue { double, double } %720, 1
  store double %728, ptr %727, align 8
  %729 = 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) %729, ptr noundef nonnull align 16 dereferenceable(16) %72)
          to label %730 unwind label %739

730:                                              ; preds = %721
  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 %731

731:                                              ; preds = %730
  %732 = load ptr, ptr %54, align 8, !tbaa !5
  %733 = getelementptr inbounds ptr, ptr %732, i32 1
  store ptr %733, ptr %54, align 8, !tbaa !5
  br label %521

734:                                              ; preds = %653, %589, %585
  call void @llvm.lifetime.end.p0(i64 16, 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 %743

735:                                              ; preds = %680
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %7, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  br label %743

739:                                              ; preds = %721, %705, %695, %686
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %7, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #11
  br label %743

743:                                              ; preds = %739, %735, %734
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 2, ptr %59) #11
  br label %744

744:                                              ; preds = %743, %581
  call void @llvm.lifetime.end.p0(i64 2, ptr %58) #11
  br label %745

745:                                              ; preds = %744, %554
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %746

746:                                              ; preds = %745, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %747

747:                                              ; preds = %746, %534
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %1666

748:                                              ; preds = %525
  %749 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %750 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %749)
          to label %751 unwind label %530

751:                                              ; preds = %748
  %752 = icmp ugt i64 %750, 256
  br i1 %752, label %753, label %770

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

757:                                              ; preds = %753
  %758 = trunc i64 %756 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 %758, i32 noundef 256)
          to label %759 unwind label %761

759:                                              ; preds = %757
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEONSt7__cxx1112basic_stringIcSt11char_traitsIcENS_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(33) %754, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %760 unwind label %765

760:                                              ; preds = %759
  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 %1648

761:                                              ; preds = %757, %753
  %762 = landingpad { ptr, i32 }
          cleanup
  %763 = extractvalue { ptr, i32 } %762, 0
  store ptr %763, ptr %7, align 8
  %764 = extractvalue { ptr, i32 } %762, 1
  store i32 %764, ptr %8, align 4
  br label %769

765:                                              ; preds = %759
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %7, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %8, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #11
  br label %769

769:                                              ; preds = %765, %761
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #11
  br label %1666

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

771:                                              ; preds = %1176, %770
  %772 = load i32, ptr %77, align 4, !tbaa !45
  %773 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %774 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %773)
          to label %775 unwind label %779

775:                                              ; preds = %771
  %776 = trunc i64 %774 to i32
  %777 = icmp slt i32 %772, %776
  br i1 %777, label %783, label %778

778:                                              ; preds = %775
  store i32 17, ptr %12, align 4
  br label %1183

779:                                              ; preds = %771
  %780 = landingpad { ptr, i32 }
          cleanup
  %781 = extractvalue { ptr, i32 } %780, 0
  store ptr %781, ptr %7, align 8
  %782 = extractvalue { ptr, i32 } %780, 1
  store i32 %782, ptr %8, align 4
  br label %1185

783:                                              ; preds = %775
  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 %784

784:                                              ; preds = %841, %783
  %785 = load i32, ptr %79, align 4, !tbaa !45
  %786 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  %787 = invoke noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %786)
          to label %788 unwind label %792

788:                                              ; preds = %784
  %789 = trunc i64 %787 to i32
  %790 = icmp slt i32 %785, %789
  br i1 %790, label %796, label %791

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

792:                                              ; preds = %784
  %793 = landingpad { ptr, i32 }
          cleanup
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %7, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %8, align 4
  br label %845

796:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #11
  %797 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 6
  %798 = load i32, ptr %79, align 4, !tbaa !45
  %799 = sext i32 %798 to i64
  %800 = invoke noundef nonnull align 2 dereferenceable(4) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %797, i64 noundef %799)
          to label %801 unwind label %810

801:                                              ; preds = %796
  store ptr %800, 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 %802

802:                                              ; preds = %836, %801
  %803 = load i32, ptr %81, align 4, !tbaa !45
  %804 = load ptr, ptr %80, align 8, !tbaa !5
  %805 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %804, i32 0, i32 1
  %806 = load i16, ptr %805, align 2, !tbaa !70
  %807 = zext i16 %806 to i32
  %808 = icmp slt i32 %803, %807
  br i1 %808, label %814, label %809

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

810:                                              ; preds = %796
  %811 = landingpad { ptr, i32 }
          cleanup
  %812 = extractvalue { ptr, i32 } %811, 0
  store ptr %812, ptr %7, align 8
  %813 = extractvalue { ptr, i32 } %811, 1
  store i32 %813, ptr %8, align 4
  br label %844

814:                                              ; preds = %802
  %815 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 8
  %816 = load ptr, ptr %80, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Face", ptr %816, i32 0, i32 0
  %818 = load i16, ptr %817, align 2, !tbaa !68
  %819 = zext i16 %818 to i32
  %820 = load i32, ptr %81, align 4, !tbaa !45
  %821 = add nsw i32 %819, %820
  %822 = sext i32 %821 to i64
  %823 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %815, i64 noundef %822)
          to label %824 unwind label %831

824:                                              ; preds = %814
  %825 = load i8, ptr %823, align 1, !tbaa !53
  %826 = zext i8 %825 to i32
  %827 = load i32, ptr %77, align 4, !tbaa !45
  %828 = icmp eq i32 %826, %827
  br i1 %828, label %829, label %835

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

830:                                              ; preds = %829
  store i32 23, ptr %12, align 4
  br label %839

831:                                              ; preds = %829, %814
  %832 = landingpad { ptr, i32 }
          cleanup
  %833 = extractvalue { ptr, i32 } %832, 0
  store ptr %833, ptr %7, align 8
  %834 = extractvalue { ptr, i32 } %832, 1
  store i32 %834, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  br label %844

835:                                              ; preds = %824
  br label %836

836:                                              ; preds = %835
  %837 = load i32, ptr %81, align 4, !tbaa !45
  %838 = add nsw i32 %837, 1
  store i32 %838, ptr %81, align 4, !tbaa !45
  br label %802, !llvm.loop !71

839:                                              ; preds = %830, %809
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  br label %840

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

841:                                              ; preds = %840
  %842 = load i32, ptr %79, align 4, !tbaa !45
  %843 = add nsw i32 %842, 1
  store i32 %843, ptr %79, align 4, !tbaa !45
  br label %784, !llvm.loop !72

844:                                              ; preds = %831, %810
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  br label %845

845:                                              ; preds = %844, %792
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  br label %1182

846:                                              ; preds = %791
  %847 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %848 unwind label %853

848:                                              ; preds = %846
  %849 = icmp ult i64 %847, 2
  br i1 %849, label %850, label %857

850:                                              ; preds = %848
  %851 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE8SetErrorEPKc(ptr noundef nonnull align 8 dereferenceable(33) %851, ptr noundef @.str.8)
          to label %852 unwind label %853

852:                                              ; preds = %850
  store i32 1, ptr %12, align 4
  br label %1173

853:                                              ; preds = %850, %846
  %854 = landingpad { ptr, i32 }
          cleanup
  %855 = extractvalue { ptr, i32 } %854, 0
  store ptr %855, ptr %7, align 8
  %856 = extractvalue { ptr, i32 } %854, 1
  store i32 %856, ptr %8, align 4
  br label %1182

857:                                              ; preds = %848
  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
  %858 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.000000e+00)
          to label %859 unwind label %869

859:                                              ; preds = %857
  %860 = invoke noundef float @_ZN3JPH3CosEf(float noundef %858)
          to label %861 unwind label %869

861:                                              ; preds = %859
  store float %860, 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 %862

862:                                              ; preds = %1063, %861
  %863 = load i32, ptr %86, align 4, !tbaa !45
  %864 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %865 unwind label %873

865:                                              ; preds = %862
  %866 = trunc i64 %864 to i32
  %867 = icmp slt i32 %863, %866
  br i1 %867, label %877, label %868

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

869:                                              ; preds = %859, %857
  %870 = landingpad { ptr, i32 }
          cleanup
  %871 = extractvalue { ptr, i32 } %870, 0
  store ptr %871, ptr %7, align 8
  %872 = extractvalue { ptr, i32 } %870, 1
  store i32 %872, ptr %8, align 4
  br label %1181

873:                                              ; preds = %862
  %874 = landingpad { ptr, i32 }
          cleanup
  %875 = extractvalue { ptr, i32 } %874, 0
  store ptr %875, ptr %7, align 8
  %876 = extractvalue { ptr, i32 } %874, 1
  store i32 %876, ptr %8, align 4
  br label %1067

877:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 16, ptr %87) #11
  %878 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %879 = load i32, ptr %86, align 4, !tbaa !45
  %880 = sext i32 %879 to i64
  %881 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %880)
          to label %882 unwind label %904

882:                                              ; preds = %877
  %883 = load i32, ptr %881, align 4, !tbaa !45
  %884 = sext i32 %883 to i64
  %885 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %878, i64 noundef %884)
          to label %886 unwind label %904

886:                                              ; preds = %882
  %887 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %885)
          to label %888 unwind label %904

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

897:                                              ; preds = %1055, %888
  %898 = load i32, ptr %88, align 4, !tbaa !45
  %899 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %900 unwind label %908

900:                                              ; preds = %897
  %901 = trunc i64 %899 to i32
  %902 = icmp slt i32 %898, %901
  br i1 %902, label %912, label %903

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

904:                                              ; preds = %886, %882, %877
  %905 = landingpad { ptr, i32 }
          cleanup
  %906 = extractvalue { ptr, i32 } %905, 0
  store ptr %906, ptr %7, align 8
  %907 = extractvalue { ptr, i32 } %905, 1
  store i32 %907, ptr %8, align 4
  br label %1066

908:                                              ; preds = %897
  %909 = landingpad { ptr, i32 }
          cleanup
  %910 = extractvalue { ptr, i32 } %909, 0
  store ptr %910, ptr %7, align 8
  %911 = extractvalue { ptr, i32 } %909, 1
  store i32 %911, ptr %8, align 4
  br label %1061

912:                                              ; preds = %900
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #11
  %913 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %914 = load i32, ptr %88, align 4, !tbaa !45
  %915 = sext i32 %914 to i64
  %916 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %915)
          to label %917 unwind label %965

917:                                              ; preds = %912
  %918 = load i32, ptr %916, align 4, !tbaa !45
  %919 = sext i32 %918 to i64
  %920 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %913, i64 noundef %919)
          to label %921 unwind label %965

921:                                              ; preds = %917
  %922 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %920)
          to label %923 unwind label %965

923:                                              ; preds = %921
  %924 = getelementptr inbounds %"class.JPH::Vec3", ptr %89, i32 0, i32 0
  %925 = getelementptr inbounds %union.anon.6, ptr %924, i32 0, i32 0
  %926 = getelementptr inbounds { double, double }, ptr %925, i32 0, i32 0
  %927 = extractvalue { double, double } %922, 0
  store double %927, ptr %926, align 16
  %928 = getelementptr inbounds { double, double }, ptr %925, i32 0, i32 1
  %929 = extractvalue { double, double } %922, 1
  store double %929, ptr %928, 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
  %930 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 0
  %931 = load double, ptr %930, align 16
  %932 = getelementptr inbounds { double, double }, ptr %91, i32 0, i32 1
  %933 = load double, ptr %932, align 8
  %934 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %87, double %931, double %933)
          to label %935 unwind label %969

935:                                              ; preds = %923
  %936 = getelementptr inbounds %"class.JPH::Vec3", ptr %90, i32 0, i32 0
  %937 = getelementptr inbounds %union.anon.6, ptr %936, i32 0, i32 0
  %938 = getelementptr inbounds { double, double }, ptr %937, i32 0, i32 0
  %939 = extractvalue { double, double } %934, 0
  store double %939, ptr %938, align 16
  %940 = getelementptr inbounds { double, double }, ptr %937, i32 0, i32 1
  %941 = extractvalue { double, double } %934, 1
  store double %941, ptr %940, 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
  %942 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 0
  %943 = load double, ptr %942, align 16
  %944 = getelementptr inbounds { double, double }, ptr %93, i32 0, i32 1
  %945 = load double, ptr %944, align 8
  %946 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %87, double %943, double %945)
          to label %947 unwind label %973

947:                                              ; preds = %935
  store float %946, ptr %92, align 4, !tbaa !44
  %948 = load float, ptr %92, align 4, !tbaa !44
  %949 = load float, ptr %84, align 4, !tbaa !44
  %950 = fcmp olt float %948, %949
  br i1 %950, label %951, label %977

951:                                              ; preds = %947
  %952 = load float, ptr %92, align 4, !tbaa !44
  store float %952, ptr %84, align 4, !tbaa !44
  %953 = load i32, ptr %86, align 4, !tbaa !45
  %954 = sext i32 %953 to i64
  %955 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %954)
          to label %956 unwind label %973

956:                                              ; preds = %951
  %957 = load i32, ptr %955, align 4, !tbaa !45
  %958 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 0
  store i32 %957, ptr %958, align 4, !tbaa !45
  %959 = load i32, ptr %88, align 4, !tbaa !45
  %960 = sext i32 %959 to i64
  %961 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %960)
          to label %962 unwind label %973

962:                                              ; preds = %956
  %963 = load i32, ptr %961, align 4, !tbaa !45
  %964 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 1
  store i32 %963, ptr %964, align 4, !tbaa !45
  br label %977

965:                                              ; preds = %921, %917, %912
  %966 = landingpad { ptr, i32 }
          cleanup
  %967 = extractvalue { ptr, i32 } %966, 0
  store ptr %967, ptr %7, align 8
  %968 = extractvalue { ptr, i32 } %966, 1
  store i32 %968, ptr %8, align 4
  br label %1060

969:                                              ; preds = %923
  %970 = landingpad { ptr, i32 }
          cleanup
  %971 = extractvalue { ptr, i32 } %970, 0
  store ptr %971, ptr %7, align 8
  %972 = extractvalue { ptr, i32 } %970, 1
  store i32 %972, ptr %8, align 4
  br label %1059

973:                                              ; preds = %956, %951, %935
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %7, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %8, align 4
  br label %1058

977:                                              ; preds = %962, %947
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #11
  %978 = load i32, ptr %88, align 4, !tbaa !45
  %979 = add nsw i32 %978, 1
  store i32 %979, ptr %94, align 4, !tbaa !45
  br label %980

980:                                              ; preds = %1049, %977
  %981 = load i32, ptr %94, align 4, !tbaa !45
  %982 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %983 unwind label %987

983:                                              ; preds = %980
  %984 = trunc i64 %982 to i32
  %985 = icmp slt i32 %981, %984
  br i1 %985, label %991, label %986

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

987:                                              ; preds = %980
  %988 = landingpad { ptr, i32 }
          cleanup
  %989 = extractvalue { ptr, i32 } %988, 0
  store ptr %989, ptr %7, align 8
  %990 = extractvalue { ptr, i32 } %988, 1
  store i32 %990, ptr %8, align 4
  br label %1053

991:                                              ; preds = %983
  call void @llvm.lifetime.start.p0(i64 16, ptr %95) #11
  %992 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %993 = load i32, ptr %94, align 4, !tbaa !45
  %994 = sext i32 %993 to i64
  %995 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %994)
          to label %996 unwind label %1040

996:                                              ; preds = %991
  %997 = load i32, ptr %995, align 4, !tbaa !45
  %998 = sext i32 %997 to i64
  %999 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %992, i64 noundef %998)
          to label %1000 unwind label %1040

1000:                                             ; preds = %996
  %1001 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %999)
          to label %1002 unwind label %1040

1002:                                             ; preds = %1000
  %1003 = getelementptr inbounds %"class.JPH::Vec3", ptr %95, i32 0, i32 0
  %1004 = getelementptr inbounds %union.anon.6, ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds { double, double }, ptr %1004, i32 0, i32 0
  %1006 = extractvalue { double, double } %1001, 0
  store double %1006, ptr %1005, align 16
  %1007 = getelementptr inbounds { double, double }, ptr %1004, i32 0, i32 1
  %1008 = extractvalue { double, double } %1001, 1
  store double %1008, ptr %1007, 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
  %1009 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 0
  %1010 = load double, ptr %1009, align 16
  %1011 = getelementptr inbounds { double, double }, ptr %97, i32 0, i32 1
  %1012 = load double, ptr %1011, align 8
  %1013 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %90, double %1010, double %1012)
          to label %1014 unwind label %1044

1014:                                             ; preds = %1002
  %1015 = invoke noundef float @_ZSt3absf(float noundef %1013)
          to label %1016 unwind label %1044

1016:                                             ; preds = %1014
  store float %1015, ptr %96, align 4, !tbaa !44
  %1017 = load float, ptr %96, align 4, !tbaa !44
  %1018 = load float, ptr %82, align 4, !tbaa !44
  %1019 = fcmp ogt float %1017, %1018
  br i1 %1019, label %1020, label %1048

1020:                                             ; preds = %1016
  %1021 = load float, ptr %96, align 4, !tbaa !44
  store float %1021, ptr %82, align 4, !tbaa !44
  %1022 = load i32, ptr %86, align 4, !tbaa !45
  %1023 = sext i32 %1022 to i64
  %1024 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1023)
          to label %1025 unwind label %1044

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

1031:                                             ; preds = %1025
  %1032 = load i32, ptr %1030, align 4, !tbaa !45
  %1033 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 1
  store i32 %1032, ptr %1033, align 4, !tbaa !45
  %1034 = load i32, ptr %94, align 4, !tbaa !45
  %1035 = sext i32 %1034 to i64
  %1036 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1035)
          to label %1037 unwind label %1044

1037:                                             ; preds = %1031
  %1038 = load i32, ptr %1036, align 4, !tbaa !45
  %1039 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 2
  store i32 %1038, ptr %1039, align 4, !tbaa !45
  br label %1048

1040:                                             ; preds = %1000, %996, %991
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %7, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %8, align 4
  br label %1052

1044:                                             ; preds = %1031, %1025, %1020, %1014, %1002
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %7, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  br label %1052

1048:                                             ; preds = %1037, %1016
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #11
  br label %1049

1049:                                             ; preds = %1048
  %1050 = load i32, ptr %94, align 4, !tbaa !45
  %1051 = add nsw i32 %1050, 1
  store i32 %1051, ptr %94, align 4, !tbaa !45
  br label %980, !llvm.loop !73

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

1053:                                             ; preds = %1052, %987
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #11
  br label %1058

1054:                                             ; preds = %986
  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 %1055

1055:                                             ; preds = %1054
  %1056 = load i32, ptr %88, align 4, !tbaa !45
  %1057 = add nsw i32 %1056, 1
  store i32 %1057, ptr %88, align 4, !tbaa !45
  br label %897, !llvm.loop !74

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

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

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

1061:                                             ; preds = %1060, %908
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  br label %1066

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

1063:                                             ; preds = %1062
  %1064 = load i32, ptr %86, align 4, !tbaa !45
  %1065 = add nsw i32 %1064, 1
  store i32 %1065, ptr %86, align 4, !tbaa !45
  br label %862, !llvm.loop !75

1066:                                             ; preds = %1061, %904
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #11
  br label %1067

1067:                                             ; preds = %1066, %873
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  br label %1180

1068:                                             ; preds = %868
  %1069 = getelementptr inbounds [3 x i32], ptr %83, i64 0, i64 0
  %1070 = load i32, ptr %1069, align 4, !tbaa !45
  %1071 = icmp ne i32 %1070, -1
  br i1 %1071, label %1072, label %1093

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

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

1089:                                             ; preds = %1072
  %1090 = landingpad { ptr, i32 }
          cleanup
  %1091 = extractvalue { ptr, i32 } %1090, 0
  store ptr %1091, ptr %7, align 8
  %1092 = extractvalue { ptr, i32 } %1090, 1
  store i32 %1092, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %99) #11
  br label %1180

1093:                                             ; preds = %1068
  %1094 = getelementptr inbounds [2 x i32], ptr %85, i64 0, i64 0
  %1095 = load i32, ptr %1094, align 4, !tbaa !45
  %1096 = icmp ne i32 %1095, -1
  br i1 %1096, label %1097, label %1115

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

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

1111:                                             ; preds = %1097
  %1112 = landingpad { ptr, i32 }
          cleanup
  %1113 = extractvalue { ptr, i32 } %1112, 0
  store ptr %1113, ptr %7, align 8
  %1114 = extractvalue { ptr, i32 } %1112, 1
  store i32 %1114, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  br label %1180

1115:                                             ; preds = %1093
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #11
  %1116 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef 0)
          to label %1117 unwind label %1127

1117:                                             ; preds = %1115
  %1118 = load i32, ptr %1116, align 4, !tbaa !45
  store i32 %1118, ptr %103, align 4, !tbaa !45
  %1119 = getelementptr inbounds %"class.std::initializer_list", ptr %102, i32 0, i32 0
  store ptr %103, ptr %1119, align 8, !tbaa !76
  %1120 = getelementptr inbounds %"class.std::initializer_list", ptr %102, i32 0, i32 1
  store i64 1, ptr %1120, align 8, !tbaa !78
  %1121 = getelementptr inbounds { ptr, i64 }, ptr %102, i32 0, i32 0
  %1122 = load ptr, ptr %1121, align 8
  %1123 = getelementptr inbounds { ptr, i64 }, ptr %102, i32 0, i32 1
  %1124 = load i64, ptr %1123, align 8
  %1125 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEaSESt16initializer_listIiE(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr %1122, i64 %1124)
          to label %1126 unwind label %1127

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

1127:                                             ; preds = %1117, %1115
  %1128 = landingpad { ptr, i32 }
          cleanup
  %1129 = extractvalue { ptr, i32 } %1128, 0
  store ptr %1129, ptr %7, align 8
  %1130 = extractvalue { ptr, i32 } %1128, 1
  store i32 %1130, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #11
  br label %1180

1131:                                             ; preds = %1126, %1110
  br label %1132

1132:                                             ; preds = %1131, %1088
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #11
  %1133 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  %1134 = load i32, ptr %77, align 4, !tbaa !45
  %1135 = sext i32 %1134 to i64
  %1136 = invoke noundef nonnull align 16 dereferenceable(32) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1133, i64 noundef %1135)
          to label %1137 unwind label %1150

1137:                                             ; preds = %1132
  store ptr %1136, ptr %104, align 8, !tbaa !5
  %1138 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %1139 unwind label %1150

1139:                                             ; preds = %1137
  %1140 = trunc i64 %1138 to i32
  %1141 = load ptr, ptr %104, align 8, !tbaa !5
  %1142 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1141, i32 0, i32 1
  store i32 %1140, ptr %1142, 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 %1143

1143:                                             ; preds = %1169, %1139
  %1144 = load i32, ptr %105, align 4, !tbaa !45
  %1145 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %1146 unwind label %1154

1146:                                             ; preds = %1143
  %1147 = trunc i64 %1145 to i32
  %1148 = icmp slt i32 %1144, %1147
  br i1 %1148, label %1158, label %1149

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

1150:                                             ; preds = %1137, %1132
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %7, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %8, align 4
  br label %1179

1154:                                             ; preds = %1158, %1143
  %1155 = landingpad { ptr, i32 }
          cleanup
  %1156 = extractvalue { ptr, i32 } %1155, 0
  store ptr %1156, ptr %7, align 8
  %1157 = extractvalue { ptr, i32 } %1155, 1
  store i32 %1157, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #11
  br label %1179

1158:                                             ; preds = %1146
  %1159 = load i32, ptr %105, align 4, !tbaa !45
  %1160 = sext i32 %1159 to i64
  %1161 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %1160)
          to label %1162 unwind label %1154

1162:                                             ; preds = %1158
  %1163 = load i32, ptr %1161, align 4, !tbaa !45
  %1164 = load ptr, ptr %104, align 8, !tbaa !5
  %1165 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1164, i32 0, i32 2
  %1166 = load i32, ptr %105, align 4, !tbaa !45
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds [3 x i32], ptr %1165, i64 0, i64 %1167
  store i32 %1163, ptr %1168, align 4, !tbaa !45
  br label %1169

1169:                                             ; preds = %1162
  %1170 = load i32, ptr %105, align 4, !tbaa !45
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %105, align 4, !tbaa !45
  br label %1143, !llvm.loop !79

1172:                                             ; preds = %1149
  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 %1173

1173:                                             ; preds = %1172, %852
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %78) #11
  %1174 = load i32, ptr %12, align 4
  switch i32 %1174, label %1183 [
    i32 0, label %1175
  ]

1175:                                             ; preds = %1173
  br label %1176

1176:                                             ; preds = %1175
  %1177 = load i32, ptr %77, align 4, !tbaa !45
  %1178 = add nsw i32 %1177, 1
  store i32 %1178, ptr %77, align 4, !tbaa !45
  br label %771, !llvm.loop !80

1179:                                             ; preds = %1154, %1150
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  br label %1180

1180:                                             ; preds = %1179, %1127, %1111, %1089, %1067
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #11
  br label %1181

1181:                                             ; preds = %1180, %869
  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 %1182

1182:                                             ; preds = %1181, %853, %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
  br label %1185

1183:                                             ; preds = %1173, %778
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  %1184 = load i32, ptr %12, align 4
  switch i32 %1184, label %1648 [
    i32 17, label %1186
  ]

1185:                                             ; preds = %1182, %779
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  br label %1666

1186:                                             ; preds = %1183
  %1187 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %1188 = load float, ptr %1187, align 16, !tbaa !26
  %1189 = fcmp ogt float %1188, 0.000000e+00
  br i1 %1189, label %1190, label %1287

1190:                                             ; preds = %1186
  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
  %1191 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  store ptr %1191, ptr %107, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #11
  %1192 = load ptr, ptr %107, align 8, !tbaa !5
  %1193 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1192)
          to label %1194 unwind label %1203

1194:                                             ; preds = %1190
  store ptr %1193, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #11
  %1195 = load ptr, ptr %107, align 8, !tbaa !5
  %1196 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1195)
          to label %1197 unwind label %1207

1197:                                             ; preds = %1194
  store ptr %1196, ptr %109, align 8, !tbaa !5
  br label %1198

1198:                                             ; preds = %1264, %1197
  %1199 = load ptr, ptr %108, align 8, !tbaa !5
  %1200 = load ptr, ptr %109, align 8, !tbaa !5
  %1201 = icmp ne ptr %1199, %1200
  br i1 %1201, label %1211, label %1202

1202:                                             ; preds = %1198
  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 %1274

1203:                                             ; preds = %1190
  %1204 = landingpad { ptr, i32 }
          cleanup
  %1205 = extractvalue { ptr, i32 } %1204, 0
  store ptr %1205, ptr %7, align 8
  %1206 = extractvalue { ptr, i32 } %1204, 1
  store i32 %1206, ptr %8, align 4
  br label %1273

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

1211:                                             ; preds = %1198
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #11
  %1212 = load ptr, ptr %108, align 8, !tbaa !5
  store ptr %1212, 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
  %1213 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 5
  store ptr %1213, ptr %112, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #11
  %1214 = load ptr, ptr %112, align 8, !tbaa !5
  %1215 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1214)
          to label %1216 unwind label %1225

1216:                                             ; preds = %1211
  store ptr %1215, ptr %113, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #11
  %1217 = load ptr, ptr %112, align 8, !tbaa !5
  %1218 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1217)
          to label %1219 unwind label %1229

1219:                                             ; preds = %1216
  store ptr %1218, ptr %114, align 8, !tbaa !5
  br label %1220

1220:                                             ; preds = %1255, %1219
  %1221 = load ptr, ptr %113, align 8, !tbaa !5
  %1222 = load ptr, ptr %114, align 8, !tbaa !5
  %1223 = icmp ne ptr %1221, %1222
  br i1 %1223, label %1233, label %1224

1224:                                             ; preds = %1220
  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 %1260

1225:                                             ; preds = %1211
  %1226 = landingpad { ptr, i32 }
          cleanup
  %1227 = extractvalue { ptr, i32 } %1226, 0
  store ptr %1227, ptr %7, align 8
  %1228 = extractvalue { ptr, i32 } %1226, 1
  store i32 %1228, ptr %8, align 4
  br label %1259

1229:                                             ; preds = %1216
  %1230 = landingpad { ptr, i32 }
          cleanup
  %1231 = extractvalue { ptr, i32 } %1230, 0
  store ptr %1231, ptr %7, align 8
  %1232 = extractvalue { ptr, i32 } %1230, 1
  store i32 %1232, ptr %8, align 4
  br label %1258

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

1243:                                             ; preds = %1233
  %1244 = fneg float %1242
  store float %1244, ptr %116, align 4, !tbaa !44
  %1245 = load float, ptr %116, align 4, !tbaa !44
  %1246 = load float, ptr %111, align 4, !tbaa !44
  %1247 = fcmp ogt float %1245, %1246
  br i1 %1247, label %1248, label %1254

1248:                                             ; preds = %1243
  %1249 = load float, ptr %116, align 4, !tbaa !44
  store float %1249, ptr %111, align 4, !tbaa !44
  br label %1254

1250:                                             ; preds = %1233
  %1251 = landingpad { ptr, i32 }
          cleanup
  %1252 = extractvalue { ptr, i32 } %1251, 0
  store ptr %1252, ptr %7, align 8
  %1253 = extractvalue { ptr, i32 } %1251, 1
  store i32 %1253, 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 %1258

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

1255:                                             ; preds = %1254
  %1256 = load ptr, ptr %113, align 8, !tbaa !5
  %1257 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1256, i32 1
  store ptr %1257, ptr %113, align 8, !tbaa !5
  br label %1220

1258:                                             ; preds = %1250, %1229
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #11
  br label %1259

1259:                                             ; preds = %1258, %1225
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1271

1260:                                             ; preds = %1224
  %1261 = 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 %1262 unwind label %1267

1262:                                             ; preds = %1260
  %1263 = load float, ptr %1261, align 4, !tbaa !44
  store float %1263, 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 %1264

1264:                                             ; preds = %1262
  %1265 = load ptr, ptr %108, align 8, !tbaa !5
  %1266 = getelementptr inbounds %"class.JPH::Plane", ptr %1265, i32 1
  store ptr %1266, ptr %108, align 8, !tbaa !5
  br label %1198

1267:                                             ; preds = %1260
  %1268 = landingpad { ptr, i32 }
          cleanup
  %1269 = extractvalue { ptr, i32 } %1268, 0
  store ptr %1269, ptr %7, align 8
  %1270 = extractvalue { ptr, i32 } %1268, 1
  store i32 %1270, ptr %8, align 4
  br label %1271

1271:                                             ; preds = %1267, %1259
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #11
  br label %1272

1272:                                             ; preds = %1271, %1207
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #11
  br label %1273

1273:                                             ; preds = %1272, %1203
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #11
  br label %1286

1274:                                             ; preds = %1202
  %1275 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #11
  %1276 = load float, ptr %106, align 4, !tbaa !44
  %1277 = fmul float 5.000000e-01, %1276
  store float %1277, ptr %118, align 4, !tbaa !44
  %1278 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1275, ptr noundef nonnull align 4 dereferenceable(4) %118)
          to label %1279 unwind label %1282

1279:                                             ; preds = %1274
  %1280 = load float, ptr %1278, align 4, !tbaa !44
  %1281 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  store float %1280, ptr %1281, 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 %1287

1282:                                             ; preds = %1274
  %1283 = landingpad { ptr, i32 }
          cleanup
  %1284 = extractvalue { ptr, i32 } %1283, 0
  store ptr %1284, ptr %7, align 8
  %1285 = extractvalue { ptr, i32 } %1283, 1
  store i32 %1285, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #11
  br label %1286

1286:                                             ; preds = %1282, %1273
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #11
  br label %1666

1287:                                             ; preds = %1279, %1186
  %1288 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  %1289 = load float, ptr %1288, align 16, !tbaa !26
  %1290 = fcmp ogt float %1289, 0.000000e+00
  br i1 %1290, label %1291, label %1597

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

1295:                                             ; preds = %1291
  store ptr %1294, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #11
  %1296 = load ptr, ptr %119, align 8, !tbaa !5
  %1297 = invoke noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1296)
          to label %1298 unwind label %1308

1298:                                             ; preds = %1295
  store ptr %1297, ptr %121, align 8, !tbaa !5
  br label %1299

1299:                                             ; preds = %1590, %1298
  %1300 = load ptr, ptr %120, align 8, !tbaa !5
  %1301 = load ptr, ptr %121, align 8, !tbaa !5
  %1302 = icmp ne ptr %1300, %1301
  br i1 %1302, label %1312, label %1303

1303:                                             ; preds = %1299
  store i32 42, ptr %12, align 4
  br label %1593

1304:                                             ; preds = %1291
  %1305 = landingpad { ptr, i32 }
          cleanup
  %1306 = extractvalue { ptr, i32 } %1305, 0
  store ptr %1306, ptr %7, align 8
  %1307 = extractvalue { ptr, i32 } %1305, 1
  store i32 %1307, ptr %8, align 4
  br label %1595

1308:                                             ; preds = %1295
  %1309 = landingpad { ptr, i32 }
          cleanup
  %1310 = extractvalue { ptr, i32 } %1309, 0
  store ptr %1310, ptr %7, align 8
  %1311 = extractvalue { ptr, i32 } %1309, 1
  store i32 %1311, ptr %8, align 4
  br label %1594

1312:                                             ; preds = %1299
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #11
  %1313 = load ptr, ptr %120, align 8, !tbaa !5
  store ptr %1313, ptr %122, align 8, !tbaa !5
  %1314 = load ptr, ptr %122, align 8, !tbaa !5
  %1315 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1314, i32 0, i32 1
  %1316 = load i32, ptr %1315, align 16, !tbaa !64
  %1317 = icmp ne i32 %1316, 1
  br i1 %1317, label %1318, label %1586

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

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

1334:                                             ; preds = %1326
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %124, ptr align 16 %1333, 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
  %1335 = load ptr, ptr %122, align 8, !tbaa !5
  %1336 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1335, i32 0, i32 1
  %1337 = load i32, ptr %1336, align 16, !tbaa !64
  %1338 = icmp eq i32 %1337, 3
  br i1 %1338, label %1339, label %1372

1339:                                             ; preds = %1334
  %1340 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  %1341 = load ptr, ptr %122, align 8, !tbaa !5
  %1342 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1341, i32 0, i32 2
  %1343 = getelementptr inbounds [3 x i32], ptr %1342, i64 0, i64 2
  %1344 = load i32, ptr %1343, align 4, !tbaa !45
  %1345 = sext i32 %1344 to i64
  %1346 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1340, i64 noundef %1345)
          to label %1347 unwind label %1364

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

1349:                                             ; preds = %1347
  %1350 = getelementptr inbounds %"class.JPH::Vec3", ptr %127, i32 0, i32 0
  %1351 = getelementptr inbounds %union.anon.6, ptr %1350, i32 0, i32 0
  %1352 = getelementptr inbounds { double, double }, ptr %1351, i32 0, i32 0
  %1353 = extractvalue { double, double } %1348, 0
  store double %1353, ptr %1352, align 16
  %1354 = getelementptr inbounds { double, double }, ptr %1351, i32 0, i32 1
  %1355 = extractvalue { double, double } %1348, 1
  store double %1355, ptr %1354, 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 %1441

1356:                                             ; preds = %1318
  %1357 = landingpad { ptr, i32 }
          cleanup
  %1358 = extractvalue { ptr, i32 } %1357, 0
  store ptr %1358, ptr %7, align 8
  %1359 = extractvalue { ptr, i32 } %1357, 1
  store i32 %1359, ptr %8, align 4
  br label %1585

1360:                                             ; preds = %1326
  %1361 = landingpad { ptr, i32 }
          cleanup
  %1362 = extractvalue { ptr, i32 } %1361, 0
  store ptr %1362, ptr %7, align 8
  %1363 = extractvalue { ptr, i32 } %1361, 1
  store i32 %1363, ptr %8, align 4
  br label %1584

1364:                                             ; preds = %1378, %1339
  %1365 = landingpad { ptr, i32 }
          cleanup
  %1366 = extractvalue { ptr, i32 } %1365, 0
  store ptr %1366, ptr %7, align 8
  %1367 = extractvalue { ptr, i32 } %1365, 1
  store i32 %1367, ptr %8, align 4
  br label %1583

1368:                                             ; preds = %1347
  %1369 = landingpad { ptr, i32 }
          cleanup
  %1370 = extractvalue { ptr, i32 } %1369, 0
  store ptr %1370, ptr %7, align 8
  %1371 = extractvalue { ptr, i32 } %1369, 1
  store i32 %1371, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %127) #11
  br label %1583

1372:                                             ; preds = %1334
  br label %1373

1373:                                             ; preds = %1372
  %1374 = load ptr, ptr %122, align 8, !tbaa !5
  %1375 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1374, i32 0, i32 1
  %1376 = load i32, ptr %1375, align 16, !tbaa !64
  %1377 = icmp eq i32 %1376, 2
  br i1 %1377, label %1382, label %1378

1378:                                             ; preds = %1373
  %1379 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.4, i32 noundef 313)
          to label %1380 unwind label %1364

1380:                                             ; preds = %1378
  br i1 %1379, label %1381, label %1382

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

1382:                                             ; preds = %1381, %1380, %1373
  br label %1383

1383:                                             ; preds = %1382
  br label %1384

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

1388:                                             ; preds = %1384
  %1389 = getelementptr inbounds %"class.JPH::Vec3", ptr %132, i32 0, i32 0
  %1390 = getelementptr inbounds %union.anon.6, ptr %1389, i32 0, i32 0
  %1391 = getelementptr inbounds { double, double }, ptr %1390, i32 0, i32 0
  %1392 = extractvalue { double, double } %1387, 0
  store double %1392, ptr %1391, align 16
  %1393 = getelementptr inbounds { double, double }, ptr %1390, i32 0, i32 1
  %1394 = extractvalue { double, double } %1387, 1
  store double %1394, ptr %1393, align 8
  %1395 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %124)
          to label %1396 unwind label %1433

1396:                                             ; preds = %1388
  %1397 = getelementptr inbounds %"class.JPH::Vec3", ptr %133, i32 0, i32 0
  %1398 = getelementptr inbounds %union.anon.6, ptr %1397, i32 0, i32 0
  %1399 = getelementptr inbounds { double, double }, ptr %1398, i32 0, i32 0
  %1400 = extractvalue { double, double } %1395, 0
  store double %1400, ptr %1399, align 16
  %1401 = getelementptr inbounds { double, double }, ptr %1398, i32 0, i32 1
  %1402 = extractvalue { double, double } %1395, 1
  store double %1402, ptr %1401, align 8
  %1403 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 0
  %1404 = load double, ptr %1403, align 16
  %1405 = getelementptr inbounds { double, double }, ptr %133, i32 0, i32 1
  %1406 = load double, ptr %1405, align 8
  %1407 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %132, double %1404, double %1406)
          to label %1408 unwind label %1433

1408:                                             ; preds = %1396
  %1409 = getelementptr inbounds %"class.JPH::Vec3", ptr %131, i32 0, i32 0
  %1410 = getelementptr inbounds %union.anon.6, ptr %1409, i32 0, i32 0
  %1411 = getelementptr inbounds { double, double }, ptr %1410, i32 0, i32 0
  %1412 = extractvalue { double, double } %1407, 0
  store double %1412, ptr %1411, align 16
  %1413 = getelementptr inbounds { double, double }, ptr %1410, i32 0, i32 1
  %1414 = extractvalue { double, double } %1407, 1
  store double %1414, ptr %1413, align 8
  %1415 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 0
  %1416 = load double, ptr %1415, align 16
  %1417 = getelementptr inbounds { double, double }, ptr %130, i32 0, i32 1
  %1418 = load double, ptr %1417, align 8
  %1419 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 0
  %1420 = load double, ptr %1419, align 16
  %1421 = getelementptr inbounds { double, double }, ptr %131, i32 0, i32 1
  %1422 = load double, ptr %1421, align 8
  %1423 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %1416, double %1418, double %1420, double %1422)
          to label %1424 unwind label %1433

1424:                                             ; preds = %1408
  %1425 = getelementptr inbounds %"class.JPH::Plane", ptr %129, i32 0, i32 0
  %1426 = getelementptr inbounds %"class.JPH::Vec4", ptr %1425, i32 0, i32 0
  %1427 = getelementptr inbounds %union.anon.7, ptr %1426, i32 0, i32 0
  %1428 = getelementptr inbounds { double, double }, ptr %1427, i32 0, i32 0
  %1429 = extractvalue { double, double } %1423, 0
  store double %1429, ptr %1428, align 16
  %1430 = getelementptr inbounds { double, double }, ptr %1427, i32 0, i32 1
  %1431 = extractvalue { double, double } %1423, 1
  store double %1431, ptr %1430, 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 %1432 unwind label %1437

1432:                                             ; preds = %1424
  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 %1441

1433:                                             ; preds = %1408, %1396, %1388, %1384
  %1434 = landingpad { ptr, i32 }
          cleanup
  %1435 = extractvalue { ptr, i32 } %1434, 0
  store ptr %1435, ptr %7, align 8
  %1436 = extractvalue { ptr, i32 } %1434, 1
  store i32 %1436, 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 %1583

1437:                                             ; preds = %1424
  %1438 = landingpad { ptr, i32 }
          cleanup
  %1439 = extractvalue { ptr, i32 } %1438, 0
  store ptr %1439, ptr %7, align 8
  %1440 = extractvalue { ptr, i32 } %1438, 1
  store i32 %1440, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #11
  br label %1583

1441:                                             ; preds = %1432, %1349
  call void @llvm.lifetime.start.p0(i64 64, ptr %135) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr %136) #11
  %1442 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %123)
          to label %1443 unwind label %1506

1443:                                             ; preds = %1441
  %1444 = getelementptr inbounds %"class.JPH::Vec3", ptr %138, i32 0, i32 0
  %1445 = getelementptr inbounds %union.anon.6, ptr %1444, i32 0, i32 0
  %1446 = getelementptr inbounds { double, double }, ptr %1445, i32 0, i32 0
  %1447 = extractvalue { double, double } %1442, 0
  store double %1447, ptr %1446, align 16
  %1448 = getelementptr inbounds { double, double }, ptr %1445, i32 0, i32 1
  %1449 = extractvalue { double, double } %1442, 1
  store double %1449, ptr %1448, align 8
  %1450 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 0
  %1451 = load double, ptr %1450, align 16
  %1452 = getelementptr inbounds { double, double }, ptr %138, i32 0, i32 1
  %1453 = load double, ptr %1452, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %137, double %1451, double %1453, float noundef 0.000000e+00)
          to label %1454 unwind label %1506

1454:                                             ; preds = %1443
  %1455 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %124)
          to label %1456 unwind label %1506

1456:                                             ; preds = %1454
  %1457 = getelementptr inbounds %"class.JPH::Vec3", ptr %140, i32 0, i32 0
  %1458 = getelementptr inbounds %union.anon.6, ptr %1457, i32 0, i32 0
  %1459 = getelementptr inbounds { double, double }, ptr %1458, i32 0, i32 0
  %1460 = extractvalue { double, double } %1455, 0
  store double %1460, ptr %1459, align 16
  %1461 = getelementptr inbounds { double, double }, ptr %1458, i32 0, i32 1
  %1462 = extractvalue { double, double } %1455, 1
  store double %1462, ptr %1461, align 8
  %1463 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 0
  %1464 = load double, ptr %1463, align 16
  %1465 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 1
  %1466 = load double, ptr %1465, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %139, double %1464, double %1466, float noundef 0.000000e+00)
          to label %1467 unwind label %1506

1467:                                             ; preds = %1456
  %1468 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %125)
          to label %1469 unwind label %1506

1469:                                             ; preds = %1467
  %1470 = getelementptr inbounds %"class.JPH::Vec3", ptr %142, i32 0, i32 0
  %1471 = getelementptr inbounds %union.anon.6, ptr %1470, i32 0, i32 0
  %1472 = getelementptr inbounds { double, double }, ptr %1471, i32 0, i32 0
  %1473 = extractvalue { double, double } %1468, 0
  store double %1473, ptr %1472, align 16
  %1474 = getelementptr inbounds { double, double }, ptr %1471, i32 0, i32 1
  %1475 = extractvalue { double, double } %1468, 1
  store double %1475, ptr %1474, align 8
  %1476 = getelementptr inbounds { double, double }, ptr %142, i32 0, i32 0
  %1477 = load double, ptr %1476, align 16
  %1478 = getelementptr inbounds { double, double }, ptr %142, i32 0, i32 1
  %1479 = load double, ptr %1478, align 8
  invoke void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %141, double %1477, double %1479, float noundef 0.000000e+00)
          to label %1480 unwind label %1506

1480:                                             ; preds = %1469
  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 %1481 unwind label %1506

1481:                                             ; preds = %1480
  %1482 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 0
  %1483 = load double, ptr %1482, align 16
  %1484 = getelementptr inbounds { double, double }, ptr %137, i32 0, i32 1
  %1485 = load double, ptr %1484, align 8
  %1486 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 0
  %1487 = load double, ptr %1486, align 16
  %1488 = getelementptr inbounds { double, double }, ptr %139, i32 0, i32 1
  %1489 = load double, ptr %1488, align 8
  %1490 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 0
  %1491 = load double, ptr %1490, align 16
  %1492 = getelementptr inbounds { double, double }, ptr %141, i32 0, i32 1
  %1493 = load double, ptr %1492, align 8
  %1494 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 0
  %1495 = load double, ptr %1494, align 16
  %1496 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 1
  %1497 = load double, ptr %1496, align 8
  invoke void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %136, double %1483, double %1485, double %1487, double %1489, double %1491, double %1493, double %1495, double %1497)
          to label %1498 unwind label %1506

1498:                                             ; preds = %1481
  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 %1499 unwind label %1506

1499:                                             ; preds = %1498
  call void @llvm.lifetime.end.p0(i64 64, ptr %136) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #11
  %1500 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %135)
          to label %1501 unwind label %1510

1501:                                             ; preds = %1499
  store float %1500, ptr %144, align 4, !tbaa !44
  %1502 = load float, ptr %144, align 4, !tbaa !44
  %1503 = fcmp oeq float %1502, 0.000000e+00
  br i1 %1503, label %1504, label %1514

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

1506:                                             ; preds = %1498, %1481, %1480, %1469, %1467, %1456, %1454, %1443, %1441
  %1507 = landingpad { ptr, i32 }
          cleanup
  %1508 = extractvalue { ptr, i32 } %1507, 0
  store ptr %1508, ptr %7, align 8
  %1509 = extractvalue { ptr, i32 } %1507, 1
  store i32 %1509, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %136) #11
  br label %1582

1510:                                             ; preds = %1499
  %1511 = landingpad { ptr, i32 }
          cleanup
  %1512 = extractvalue { ptr, i32 } %1511, 0
  store ptr %1512, ptr %7, align 8
  %1513 = extractvalue { ptr, i32 } %1511, 1
  store i32 %1513, ptr %8, align 4
  br label %1581

1514:                                             ; preds = %1501
  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 %1515 unwind label %1546

1515:                                             ; preds = %1514
  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
  %1516 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 0
  %1517 = load double, ptr %1516, align 16
  %1518 = getelementptr inbounds { double, double }, ptr %149, i32 0, i32 1
  %1519 = load double, ptr %1518, align 8
  %1520 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %145, double %1517, double %1519)
          to label %1521 unwind label %1550

1521:                                             ; preds = %1515
  %1522 = getelementptr inbounds %"class.JPH::Vec3", ptr %148, i32 0, i32 0
  %1523 = getelementptr inbounds %union.anon.6, ptr %1522, i32 0, i32 0
  %1524 = getelementptr inbounds { double, double }, ptr %1523, i32 0, i32 0
  %1525 = extractvalue { double, double } %1520, 0
  store double %1525, ptr %1524, align 16
  %1526 = getelementptr inbounds { double, double }, ptr %1523, i32 0, i32 1
  %1527 = extractvalue { double, double } %1520, 1
  store double %1527, ptr %1526, align 8
  %1528 = load float, ptr %144, align 4, !tbaa !44
  %1529 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %148, float noundef %1528)
          to label %1530 unwind label %1550

1530:                                             ; preds = %1521
  %1531 = getelementptr inbounds %"class.JPH::Vec3", ptr %147, i32 0, i32 0
  %1532 = getelementptr inbounds %union.anon.6, ptr %1531, i32 0, i32 0
  %1533 = getelementptr inbounds { double, double }, ptr %1532, i32 0, i32 0
  %1534 = extractvalue { double, double } %1529, 0
  store double %1534, ptr %1533, align 16
  %1535 = getelementptr inbounds { double, double }, ptr %1532, i32 0, i32 1
  %1536 = extractvalue { double, double } %1529, 1
  store double %1536, ptr %1535, align 8
  %1537 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %147)
          to label %1538 unwind label %1550

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

1539:                                             ; preds = %1538
  %1540 = load float, ptr %146, align 4, !tbaa !44
  %1541 = fcmp ogt float %1540, 1.000000e+00
  br i1 %1541, label %1558, label %1542

1542:                                             ; preds = %1539
  %1543 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 341)
          to label %1544 unwind label %1554

1544:                                             ; preds = %1542
  br i1 %1543, label %1545, label %1558

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

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

1550:                                             ; preds = %1530, %1521, %1515
  %1551 = landingpad { ptr, i32 }
          cleanup
  %1552 = extractvalue { ptr, i32 } %1551, 0
  store ptr %1552, ptr %7, align 8
  %1553 = extractvalue { ptr, i32 } %1551, 1
  store i32 %1553, 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 %1579

1554:                                             ; preds = %1542
  %1555 = landingpad { ptr, i32 }
          cleanup
  %1556 = extractvalue { ptr, i32 } %1555, 0
  store ptr %1556, ptr %7, align 8
  %1557 = extractvalue { ptr, i32 } %1555, 1
  store i32 %1557, ptr %8, align 4
  br label %1579

1558:                                             ; preds = %1545, %1544, %1539
  br label %1559

1559:                                             ; preds = %1558
  br label %1560

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

1569:                                             ; preds = %1560
  %1570 = load float, ptr %1568, align 4, !tbaa !44
  %1571 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 9
  store float %1570, ptr %1571, 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 %1572

1572:                                             ; preds = %1569, %1504
  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
  %1573 = load i32, ptr %12, align 4
  switch i32 %1573, label %1587 [
    i32 0, label %1574
  ]

1574:                                             ; preds = %1572
  br label %1586

1575:                                             ; preds = %1560
  %1576 = landingpad { ptr, i32 }
          cleanup
  %1577 = extractvalue { ptr, i32 } %1576, 0
  store ptr %1577, ptr %7, align 8
  %1578 = extractvalue { ptr, i32 } %1576, 1
  store i32 %1578, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  br label %1579

1579:                                             ; preds = %1575, %1554, %1550
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  br label %1580

1580:                                             ; preds = %1579, %1546
  call void @llvm.lifetime.end.p0(i64 64, ptr %145) #11
  br label %1581

1581:                                             ; preds = %1580, %1510
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #11
  br label %1582

1582:                                             ; preds = %1581, %1506
  call void @llvm.lifetime.end.p0(i64 64, ptr %135) #11
  br label %1583

1583:                                             ; preds = %1582, %1437, %1433, %1368, %1364
  call void @llvm.lifetime.end.p0(i64 16, ptr %126) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %125) #11
  br label %1584

1584:                                             ; preds = %1583, %1360
  call void @llvm.lifetime.end.p0(i64 16, ptr %124) #11
  br label %1585

1585:                                             ; preds = %1584, %1356
  call void @llvm.lifetime.end.p0(i64 16, ptr %123) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #11
  br label %1594

1586:                                             ; preds = %1574, %1312
  store i32 0, ptr %12, align 4
  br label %1587

1587:                                             ; preds = %1586, %1572
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #11
  %1588 = load i32, ptr %12, align 4
  switch i32 %1588, label %1593 [
    i32 0, label %1589
  ]

1589:                                             ; preds = %1587
  br label %1590

1590:                                             ; preds = %1589
  %1591 = load ptr, ptr %120, align 8, !tbaa !5
  %1592 = getelementptr inbounds %"struct.JPH::ConvexHullShape::Point", ptr %1591, i32 1
  store ptr %1592, ptr %120, align 8, !tbaa !5
  br label %1299

1593:                                             ; preds = %1587, %1303
  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 %1596

1594:                                             ; preds = %1585, %1308
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #11
  br label %1595

1595:                                             ; preds = %1594, %1304
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  br label %1666

1596:                                             ; preds = %1593
  br label %1597

1597:                                             ; preds = %1596, %1287
  %1598 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float 0x47EFFFFFE0000000, ptr %1598, align 8, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #11
  %1599 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 7
  store ptr %1599, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #11
  %1600 = load ptr, ptr %152, align 8, !tbaa !5
  %1601 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1600)
          to label %1602 unwind label %1611

1602:                                             ; preds = %1597
  store ptr %1601, ptr %153, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #11
  %1603 = load ptr, ptr %152, align 8, !tbaa !5
  %1604 = invoke noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1603)
          to label %1605 unwind label %1615

1605:                                             ; preds = %1602
  store ptr %1604, ptr %154, align 8, !tbaa !5
  br label %1606

1606:                                             ; preds = %1630, %1605
  %1607 = load ptr, ptr %153, align 8, !tbaa !5
  %1608 = load ptr, ptr %154, align 8, !tbaa !5
  %1609 = icmp ne ptr %1607, %1608
  br i1 %1609, label %1619, label %1610

1610:                                             ; preds = %1606
  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 %1639

1611:                                             ; preds = %1597
  %1612 = landingpad { ptr, i32 }
          cleanup
  %1613 = extractvalue { ptr, i32 } %1612, 0
  store ptr %1613, ptr %7, align 8
  %1614 = extractvalue { ptr, i32 } %1612, 1
  store i32 %1614, ptr %8, align 4
  br label %1638

1615:                                             ; preds = %1602
  %1616 = landingpad { ptr, i32 }
          cleanup
  %1617 = extractvalue { ptr, i32 } %1616, 0
  store ptr %1617, ptr %7, align 8
  %1618 = extractvalue { ptr, i32 } %1616, 1
  store i32 %1618, ptr %8, align 4
  br label %1637

1619:                                             ; preds = %1606
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #11
  %1620 = load ptr, ptr %153, align 8, !tbaa !5
  store ptr %1620, ptr %155, align 8, !tbaa !5
  %1621 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #11
  %1622 = load ptr, ptr %155, align 8, !tbaa !5
  %1623 = invoke noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16) %1622)
          to label %1624 unwind label %1633

1624:                                             ; preds = %1619
  %1625 = fneg float %1623
  store float %1625, ptr %156, align 4, !tbaa !44
  %1626 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1621, ptr noundef nonnull align 4 dereferenceable(4) %156)
          to label %1627 unwind label %1633

1627:                                             ; preds = %1624
  %1628 = load float, ptr %1626, align 4, !tbaa !44
  %1629 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float %1628, ptr %1629, 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 %1630

1630:                                             ; preds = %1627
  %1631 = load ptr, ptr %153, align 8, !tbaa !5
  %1632 = getelementptr inbounds %"class.JPH::Plane", ptr %1631, i32 1
  store ptr %1632, ptr %153, align 8, !tbaa !5
  br label %1606

1633:                                             ; preds = %1624, %1619
  %1634 = landingpad { ptr, i32 }
          cleanup
  %1635 = extractvalue { ptr, i32 } %1634, 0
  store ptr %1635, ptr %7, align 8
  %1636 = extractvalue { ptr, i32 } %1634, 1
  store i32 %1636, 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 %1637

1637:                                             ; preds = %1633, %1615
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #11
  br label %1638

1638:                                             ; preds = %1637, %1611
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #11
  br label %1666

1639:                                             ; preds = %1610
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #11
  store float 0.000000e+00, ptr %157, align 4, !tbaa !44
  %1640 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  %1641 = 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) %1640)
          to label %1642 unwind label %1653

1642:                                             ; preds = %1639
  %1643 = load float, ptr %1641, align 4, !tbaa !44
  %1644 = getelementptr inbounds %"class.JPH::ConvexHullShape", ptr %159, i32 0, i32 11
  store float %1643, ptr %1644, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #11
  %1645 = 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 %1646 unwind label %1657

1646:                                             ; preds = %1642
  invoke void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEE3SetEOS3_(ptr noundef nonnull align 8 dereferenceable(33) %1645, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %1647 unwind label %1661

1647:                                             ; preds = %1646
  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 %1648

1648:                                             ; preds = %1647, %1183, %760
  call void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %52) #11
  call void @llvm.lifetime.end.p0(i64 32, 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 %1649

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

1650:                                             ; preds = %1649, %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
  %1651 = load i32, ptr %12, align 4
  switch i32 %1651, label %1679 [
    i32 0, label %1652
    i32 1, label %1652
  ]

1652:                                             ; preds = %1650, %1650, %180
  ret void

1653:                                             ; preds = %1639
  %1654 = landingpad { ptr, i32 }
          cleanup
  %1655 = extractvalue { ptr, i32 } %1654, 0
  store ptr %1655, ptr %7, align 8
  %1656 = extractvalue { ptr, i32 } %1654, 1
  store i32 %1656, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #11
  br label %1666

1657:                                             ; preds = %1642
  %1658 = landingpad { ptr, i32 }
          cleanup
  %1659 = extractvalue { ptr, i32 } %1658, 0
  store ptr %1659, ptr %7, align 8
  %1660 = extractvalue { ptr, i32 } %1658, 1
  store i32 %1660, ptr %8, align 4
  br label %1665

1661:                                             ; preds = %1646
  %1662 = landingpad { ptr, i32 }
          cleanup
  %1663 = extractvalue { ptr, i32 } %1662, 0
  store ptr %1663, ptr %7, align 8
  %1664 = extractvalue { ptr, i32 } %1662, 1
  store i32 %1664, ptr %8, align 4
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %158) #11
  br label %1665

1665:                                             ; preds = %1661, %1657
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #11
  br label %1666

1666:                                             ; preds = %1665, %1653, %1638, %1595, %1286, %1185, %769, %747, %530
  call void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %52) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #11
  br label %1667

1667:                                             ; preds = %1666, %526, %491, %307
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #11
  br label %1668

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

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

1670:                                             ; preds = %1669, %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 %1671

1671:                                             ; preds = %1670, %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 %1672

1672:                                             ; preds = %1671, %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 %1673

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

1674:                                             ; preds = %1673
  %1675 = load ptr, ptr %7, align 8
  %1676 = load i32, ptr %8, align 4
  %1677 = insertvalue { ptr, i32 } poison, ptr %1675, 0
  %1678 = insertvalue { ptr, i32 } %1677, i32 %1676, 1
  resume { ptr, i32 } %1678

1679:                                             ; preds = %1650
  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: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 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 void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEE4findERKi(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE12IteratorBaseIS9_NS9_8iteratorEEneERKSB_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12)) #3 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 @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEixERKi(ptr noundef nonnull align 8 dereferenceable(28), 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: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #4 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 2158001319}
!59 = !{!60, !60, i64 0}
!60 = !{!"short", !7, i64 0}
!61 = !{!62, !7, i64 4}
!62 = !{!"_ZTSSt4pairIihE", !19, i64 0, !7, i64 4}
!63 = !{i64 2158001672}
!64 = !{!65, !19, i64 16}
!65 = !{!"_ZTSN3JPH15ConvexHullShape5PointE", !33, i64 0, !19, i64 16, !7, i64 20}
!66 = !{i64 2158002033}
!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 2158002410}
!82 = !{i64 2158002745}
!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.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator" = type { %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::IteratorBase.base", [4 x i8] }
%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::IteratorBase.base" = type <{ ptr, i32 }>
%"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 { [38 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 [101 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.JPH::UnorderedMap", align 8
  %30 = alloca i8, align 1
  %31 = alloca i32, align 4
  %32 = alloca %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator", align 8
  %33 = alloca %"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::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, 288) (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 %710 unwind label %80

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

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

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 %709 unwind label %93

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

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

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 %709

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

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 %716

.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)
  %.not434 = icmp eq ptr %141, %142
  br i1 %.not434, label %._crit_edge438, label %.lr.ph437

.lr.ph437:                                        ; 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_edge438:                                   ; 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 %254

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

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

151:                                              ; preds = %.lr.ph437, %._crit_edge
  %.0257435 = phi ptr [ %141, %.lr.ph437 ], [ %221, %._crit_edge ]
  %152 = load ptr, ptr %.0257435, 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
  %.0258.in428 = getelementptr inbounds i8, ptr %165, i64 8
  %.0258429 = load ptr, ptr %.0258.in428, align 8, !tbaa !51
  %173 = load ptr, ptr %153, align 8, !tbaa !44
  %.not324430 = icmp eq ptr %.0258429, %173
  br i1 %.not324430, 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
  %.0258433 = phi ptr [ %.0258, %200 ], [ %.0258429, %.lr.ph.preheader ]
  %.sroa.6162.0432 = phi double [ %184, %200 ], [ %174, %.lr.ph.preheader ]
  %.sroa.0161.0431 = phi double [ %183, %200 ], [ %175, %.lr.ph.preheader ]
  %176 = getelementptr inbounds i8, ptr %.0258433, 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.0431, double %.sroa.6162.0432, 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
  %.0258.in = getelementptr inbounds i8, ptr %.0258433, i64 8
  %.0258 = load ptr, ptr %.0258.in, align 8, !tbaa !51
  %201 = load ptr, ptr %153, align 8, !tbaa !44
  %.not324 = icmp eq ptr %.0258, %201
  br i1 %.not324, label %._crit_edge, label %.lr.ph, !llvm.loop !52

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

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

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

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
  %.pn325 = 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
  %.pn327 = phi { ptr, i32 } [ %218, %217 ], [ %.pn325, %216 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #11
  br label %220

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

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

222:                                              ; preds = %._crit_edge438
  %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 %254

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 %254

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 %254

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 %254

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 %254

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 32, ptr nonnull %29) #11
  call void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %29) #11
  %237 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %83)
  %238 = trunc i64 %237 to i32
  invoke void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE7reserveEj(ptr noundef nonnull align 8 dereferenceable(28) %29, i32 noundef %238)
          to label %239 unwind label %256

239:                                              ; preds = %235
  %240 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %241 = call noundef ptr @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %96)
  %.not285439 = icmp eq ptr %240, %241
  br i1 %.not285439, label %._crit_edge443, label %.lr.ph442

.lr.ph442:                                        ; preds = %239
  %.sroa.2129.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.6131.0..sroa_idx = getelementptr inbounds i8, ptr %34, i64 8
  %242 = getelementptr inbounds i8, ptr %34, i64 16
  %243 = getelementptr inbounds i8, ptr %35, i64 2
  %244 = getelementptr inbounds i8, ptr %36, i64 8
  br label %258

._crit_edge443:                                   ; preds = %344, %239
  %245 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %246 = icmp ugt i64 %245, 256
  br i1 %246, label %351, label %.preheader353.split

.preheader353.split:                              ; preds = %._crit_edge443
  %247 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %248 = trunc i64 %247 to i32
  %.not298498 = icmp sgt i32 %248, 0
  br i1 %.not298498, label %.lr.ph500, label %.critedge345

.lr.ph500:                                        ; preds = %.preheader353.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
  %249 = getelementptr inbounds i8, ptr %40, i64 8
  %250 = getelementptr inbounds i8, ptr %41, i64 8
  %251 = getelementptr inbounds i8, ptr %42, i64 4
  %252 = getelementptr inbounds i8, ptr %42, i64 8
  %253 = getelementptr inbounds i8, ptr %43, i64 4
  br label %357

254:                                              ; preds = %234, %230, %227, %224, %222, %._crit_edge438
  %255 = 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 %714

256:                                              ; preds = %235
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %713

258:                                              ; preds = %.lr.ph442, %344
  %.0259440 = phi ptr [ %240, %.lr.ph442 ], [ %345, %344 ]
  %259 = load ptr, ptr %.0259440, align 8, !tbaa !40
  %260 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %261 = icmp ult i64 %260, 65536
  br i1 %261, label %268, label %262

262:                                              ; preds = %258
  %263 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 132)
          to label %264 unwind label %266

264:                                              ; preds = %262
  br i1 %263, label %265, label %268

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

266:                                              ; preds = %262
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %713

268:                                              ; preds = %265, %264, %258
  %269 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %270 = trunc i64 %269 to i16
  %271 = getelementptr inbounds i8, ptr %259, i64 56
  %272 = load ptr, ptr %271, align 8, !tbaa !44
  br label %273

273:                                              ; preds = %324, %268
  %.0261 = phi ptr [ %272, %268 ], [ %327, %324 ]
  %.0260 = phi i16 [ 0, %268 ], [ %325, %324 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #11
  %274 = getelementptr inbounds i8, ptr %.0261, i64 24
  %275 = load i32, ptr %274, align 8, !tbaa !48
  store i32 %275, ptr %31, align 4, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #11
  invoke void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEE4findERKi(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8 %32, ptr noundef nonnull align 8 dereferenceable(28) %29, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %276 unwind label %285

276:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #11
  invoke void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE3endEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8 %33, ptr noundef nonnull align 8 dereferenceable(28) %29)
          to label %277 unwind label %287

277:                                              ; preds = %276
  %278 = invoke noundef zeroext i1 @_ZNK3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE12IteratorBaseIS9_NS9_8iteratorEEneERKSB_(ptr noundef nonnull align 8 dereferenceable(12) %32, ptr noundef nonnull align 8 dereferenceable(12) %33)
          to label %279 unwind label %287

279:                                              ; preds = %277
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #11
  br i1 %278, label %280, label %289

280:                                              ; preds = %279
  %281 = invoke noundef ptr @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12) %32)
          to label %282 unwind label %285

282:                                              ; preds = %280
  %283 = getelementptr inbounds i8, ptr %281, i64 4
  %284 = load i8, ptr %283, align 4, !tbaa !56
  store i8 %284, ptr %30, align 1, !tbaa !50
  br label %316

285:                                              ; preds = %323, %319, %280, %273
  %286 = landingpad { ptr, i32 }
          cleanup
  br label %346

287:                                              ; preds = %277, %276
  %288 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #11
  br label %346

289:                                              ; preds = %279
  %290 = load i32, ptr %31, align 4, !tbaa !43
  %291 = sext i32 %290 to i64
  %292 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %291)
          to label %293 unwind label %305

293:                                              ; preds = %289
  %.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
  %294 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %292, double %.sroa.0128.0.copyload, double %.sroa.2129.0.copyload)
          to label %295 unwind label %305

295:                                              ; preds = %293
  %296 = extractvalue { double, double } %294, 0
  %297 = extractvalue { double, double } %294, 1
  invoke void @_ZN3JPH5AABox11EncapsulateENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %66, double %296, double %297)
          to label %298 unwind label %305

298:                                              ; preds = %295
  %299 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %300 = icmp ult i64 %299, 256
  br i1 %300, label %307, label %301

301:                                              ; preds = %298
  %302 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 159)
          to label %303 unwind label %305

303:                                              ; preds = %301
  br i1 %302, label %304, label %307

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

305:                                              ; preds = %310, %301, %295, %293, %289
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %346

307:                                              ; preds = %304, %303, %298
  %308 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %309 = trunc i64 %308 to i8
  store i8 %309, ptr %30, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #11
  store double %296, ptr %34, align 16
  store double %297, ptr %.sroa.6131.0..sroa_idx, align 8, !tbaa !50
  store <4 x i32> <i32 0, i32 -1, i32 -1, i32 -1>, ptr %242, 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 %310 unwind label %314

310:                                              ; preds = %307
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #11
  %311 = load i8, ptr %30, align 1, !tbaa !50
  %312 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEixERKi(ptr noundef nonnull align 8 dereferenceable(28) %29, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %313 unwind label %305

313:                                              ; preds = %310
  store i8 %311, ptr %312, align 1, !tbaa !50
  br label %316

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

316:                                              ; preds = %282, %313
  %317 = call noundef i64 @_ZNK3JPH5ArrayIhNS_12STLAllocatorIhEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71)
  %318 = icmp ult i64 %317, 65535
  br i1 %318, label %323, label %319

319:                                              ; preds = %316
  %320 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.4, i32 noundef 166)
          to label %321 unwind label %285

321:                                              ; preds = %319
  br i1 %320, label %322, label %323

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

323:                                              ; preds = %322, %321, %316
  invoke void @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEE9push_backERKh(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %324 unwind label %285

324:                                              ; preds = %323
  %325 = add i16 %.0260, 1
  %326 = getelementptr inbounds i8, ptr %.0261, i64 8
  %327 = load ptr, ptr %326, align 8, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 16, 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
  %328 = load ptr, ptr %271, align 8, !tbaa !44
  %.not319 = icmp eq ptr %327, %328
  br i1 %.not319, label %329, label %273, !llvm.loop !60

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #11
  store i16 %270, ptr %35, align 2, !tbaa !61
  store i16 %325, ptr %243, 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 %330 unwind label %347

330:                                              ; preds = %329
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %36) #11
  %331 = getelementptr inbounds i8, ptr %259, 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
  %332 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %331, double %.sroa.0122.0.copyload, double %.sroa.2123.0.copyload)
          to label %333 unwind label %349

333:                                              ; preds = %330
  %334 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %259)
          to label %335 unwind label %349

335:                                              ; preds = %333
  %336 = extractvalue { double, double } %332, 1
  %337 = extractvalue { double, double } %332, 0
  %338 = extractvalue { double, double } %334, 0
  %339 = extractvalue { double, double } %334, 1
  %340 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %337, double %336, double %338, double %339)
          to label %341 unwind label %349

341:                                              ; preds = %335
  %342 = extractvalue { double, double } %340, 0
  store double %342, ptr %36, align 16
  %343 = extractvalue { double, double } %340, 1
  store double %343, ptr %244, 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 %344 unwind label %349

344:                                              ; preds = %341
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #11
  %345 = getelementptr inbounds i8, ptr %.0259440, i64 8
  %.not285 = icmp eq ptr %345, %241
  br i1 %.not285, label %._crit_edge443, label %258

346:                                              ; preds = %305, %314, %287, %285
  %.pn317 = phi { ptr, i32 } [ %286, %285 ], [ %288, %287 ], [ %306, %305 ], [ %315, %314 ]
  call void @llvm.lifetime.end.p0(i64 16, 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 %713

347:                                              ; preds = %329
  %348 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  br label %713

349:                                              ; preds = %341, %335, %333, %330
  %350 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %36) #11
  br label %713

351:                                              ; preds = %._crit_edge443
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #11
  %352 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %353 = trunc i64 %352 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 %353, i32 noundef 256)
          to label %354 unwind label %355

354:                                              ; preds = %351
  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 %708

355:                                              ; preds = %351
  %356 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #11
  br label %713

357:                                              ; preds = %.lr.ph500, %._crit_edge497
  %indvars.iv543 = phi i64 [ 0, %.lr.ph500 ], [ %indvars.iv.next544, %._crit_edge497 ]
  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
  %358 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69)
  %359 = trunc i64 %358 to i32
  %360 = icmp sgt i32 %359, 0
  br i1 %360, label %.lr.ph447, label %._crit_edge448

._crit_edge448:                                   ; preds = %.loopexit351, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #11
  %361 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %362 = icmp ugt i64 %361, 1
  br i1 %362, label %394, label %391

.lr.ph447:                                        ; preds = %357, %.loopexit351
  %363 = load i32, ptr %39, align 4, !tbaa !43
  %364 = sext i32 %363 to i64
  %365 = invoke noundef nonnull align 2 dereferenceable(4) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %69, i64 noundef %364)
          to label %.preheader unwind label %373

.preheader:                                       ; preds = %.lr.ph447
  %366 = getelementptr inbounds i8, ptr %365, i64 2
  %367 = load i16, ptr %366, align 2, !tbaa !64
  %.not520 = icmp eq i16 %367, 0
  br i1 %.not520, label %.loopexit351, label %.lr.ph445

368:                                              ; preds = %380
  %369 = add nuw nsw i32 %.0263444, 1
  %370 = load i16, ptr %366, align 2, !tbaa !64
  %371 = zext i16 %370 to i32
  %372 = icmp ult i32 %369, %371
  br i1 %372, label %.lr.ph445, label %.loopexit351, !llvm.loop !65

373:                                              ; preds = %.lr.ph447
  %374 = landingpad { ptr, i32 }
          cleanup
  br label %390

.lr.ph445:                                        ; preds = %.preheader, %368
  %.0263444 = phi i32 [ %369, %368 ], [ 0, %.preheader ]
  %375 = load i16, ptr %365, align 2, !tbaa !61
  %376 = zext i16 %375 to i32
  %377 = add nuw nsw i32 %.0263444, %376
  %378 = zext nneg i32 %377 to i64
  %379 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3JPH5ArrayIhNS_12STLAllocatorIhEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %378)
          to label %380 unwind label %.loopexit352

380:                                              ; preds = %.lr.ph445
  %381 = load i8, ptr %379, align 1, !tbaa !50
  %382 = zext i8 %381 to i64
  %383 = icmp eq i64 %indvars.iv543, %382
  br i1 %383, label %384, label %368

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

.loopexit352:                                     ; preds = %.lr.ph445
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %390

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

.loopexit351:                                     ; preds = %368, %.preheader, %384
  %385 = load i32, ptr %39, align 4, !tbaa !43
  %386 = add nsw i32 %385, 1
  store i32 %386, ptr %39, align 4, !tbaa !43
  %387 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape4FaceENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69)
  %388 = trunc i64 %387 to i32
  %389 = icmp slt i32 %386, %388
  br i1 %389, label %.lr.ph447, label %._crit_edge448, !llvm.loop !66

390:                                              ; preds = %.loopexit352, %.loopexit.split-lp, %373
  %.pn312 = phi { ptr, i32 } [ %374, %373 ], [ %lpad.loopexit, %.loopexit352 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #11
  br label %535

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

.thread:                                          ; preds = %391
  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 %708

392:                                              ; preds = %391
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %535

394:                                              ; preds = %._crit_edge448
  %395 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 1.000000e+00)
  %396 = invoke noundef float @_ZN3JPH3CosEf(float noundef %395)
          to label %397 unwind label %401

397:                                              ; preds = %394
  %398 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %399 = trunc i64 %398 to i32
  %400 = icmp sgt i32 %399, 0
  br i1 %400, label %.lr.ph487, label %._crit_edge488

._crit_edge488:                                   ; preds = %._crit_edge470, %397
  %.sroa.0104.0.lcssa = phi i32 [ %.sroa.0104.0.copyload, %397 ], [ %.sroa.0104.1.lcssa, %._crit_edge470 ]
  %.sroa.7.0.lcssa = phi i32 [ %.sroa.7.0.copyload, %397 ], [ %.sroa.7.1.lcssa, %._crit_edge470 ]
  %.sroa.0107.0.lcssa = phi i32 [ %.sroa.0107.0.copyload, %397 ], [ %.sroa.0107.1.lcssa, %._crit_edge470 ]
  %.sroa.7109.0.lcssa = phi i32 [ %.sroa.7109.0.copyload, %397 ], [ %.sroa.7109.1.lcssa, %._crit_edge470 ]
  %.sroa.9.0.lcssa = phi i32 [ %.sroa.9.0.copyload, %397 ], [ %.sroa.9.1.lcssa, %._crit_edge470 ]
  %.not286 = icmp eq i32 %.sroa.0107.0.lcssa, -1
  br i1 %.not286, label %497, label %492

401:                                              ; preds = %394
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %535

.lr.ph487:                                        ; preds = %397, %._crit_edge470
  %indvars.iv537 = phi i64 [ %indvars.iv.next538, %._crit_edge470 ], [ 0, %397 ]
  %indvars.iv532 = phi i64 [ %indvars.iv.next533, %._crit_edge470 ], [ 1, %397 ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge470 ], [ 2, %397 ]
  %.0264485 = phi float [ %.1265.lcssa, %._crit_edge470 ], [ 0x3FA99999A0000000, %397 ]
  %.sroa.9.0484 = phi i32 [ %.sroa.9.1.lcssa, %._crit_edge470 ], [ %.sroa.9.0.copyload, %397 ]
  %.sroa.7109.0483 = phi i32 [ %.sroa.7109.1.lcssa, %._crit_edge470 ], [ %.sroa.7109.0.copyload, %397 ]
  %.sroa.0107.0482 = phi i32 [ %.sroa.0107.1.lcssa, %._crit_edge470 ], [ %.sroa.0107.0.copyload, %397 ]
  %.0268481 = phi float [ %.1269.lcssa, %._crit_edge470 ], [ %396, %397 ]
  %.sroa.7.0480 = phi i32 [ %.sroa.7.1.lcssa, %._crit_edge470 ], [ %.sroa.7.0.copyload, %397 ]
  %.sroa.0104.0479 = phi i32 [ %.sroa.0104.1.lcssa, %._crit_edge470 ], [ %.sroa.0104.0.copyload, %397 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %40) #11
  %403 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv537)
          to label %404 unwind label %419

404:                                              ; preds = %.lr.ph487
  %405 = load i32, ptr %403, align 4, !tbaa !43
  %406 = sext i32 %405 to i64
  %407 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %406)
          to label %408 unwind label %419

408:                                              ; preds = %404
  %409 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %407)
          to label %410 unwind label %419

410:                                              ; preds = %408
  %411 = extractvalue { double, double } %409, 0
  store double %411, ptr %40, align 16
  %412 = extractvalue { double, double } %409, 1
  store double %412, ptr %249, align 8
  %indvars.iv.next538 = add nuw nsw i64 %indvars.iv537, 1
  %413 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext = shl i64 %413, 32
  %414 = ashr exact i64 %sext, 32
  %415 = icmp slt i64 %indvars.iv.next538, %414
  br i1 %415, label %.lr.ph469, label %._crit_edge470

._crit_edge470:                                   ; preds = %._crit_edge456, %410
  %.sroa.0104.1.lcssa = phi i32 [ %.sroa.0104.0479, %410 ], [ %.sroa.0104.2, %._crit_edge456 ]
  %.sroa.7.1.lcssa = phi i32 [ %.sroa.7.0480, %410 ], [ %.sroa.7.2, %._crit_edge456 ]
  %.1269.lcssa = phi float [ %.0268481, %410 ], [ %.2270, %._crit_edge456 ]
  %.sroa.0107.1.lcssa = phi i32 [ %.sroa.0107.0482, %410 ], [ %.sroa.0107.2.lcssa, %._crit_edge456 ]
  %.sroa.7109.1.lcssa = phi i32 [ %.sroa.7109.0483, %410 ], [ %.sroa.7109.2.lcssa, %._crit_edge456 ]
  %.sroa.9.1.lcssa = phi i32 [ %.sroa.9.0484, %410 ], [ %.sroa.9.2.lcssa, %._crit_edge456 ]
  %.1265.lcssa = phi float [ %.0264485, %410 ], [ %.2266.lcssa, %._crit_edge456 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #11
  %416 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext546 = shl i64 %416, 32
  %417 = ashr exact i64 %sext546, 32
  %418 = icmp slt i64 %indvars.iv.next538, %417
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %indvars.iv.next533 = add nuw nsw i64 %indvars.iv532, 1
  br i1 %418, label %.lr.ph487, label %._crit_edge488, !llvm.loop !67

419:                                              ; preds = %408, %404, %.lr.ph487
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %491

.lr.ph469:                                        ; preds = %410, %._crit_edge456
  %indvars.iv534 = phi i64 [ %indvars.iv.next535, %._crit_edge456 ], [ %indvars.iv532, %410 ]
  %indvars.iv527 = phi i64 [ %indvars.iv.next528, %._crit_edge456 ], [ %indvars.iv, %410 ]
  %.1265467 = phi float [ %.2266.lcssa, %._crit_edge456 ], [ %.0264485, %410 ]
  %.sroa.9.1466 = phi i32 [ %.sroa.9.2.lcssa, %._crit_edge456 ], [ %.sroa.9.0484, %410 ]
  %.sroa.7109.1465 = phi i32 [ %.sroa.7109.2.lcssa, %._crit_edge456 ], [ %.sroa.7109.0483, %410 ]
  %.sroa.0107.1464 = phi i32 [ %.sroa.0107.2.lcssa, %._crit_edge456 ], [ %.sroa.0107.0482, %410 ]
  %.1269463 = phi float [ %.2270, %._crit_edge456 ], [ %.0268481, %410 ]
  %.sroa.7.1462 = phi i32 [ %.sroa.7.2, %._crit_edge456 ], [ %.sroa.7.0480, %410 ]
  %.sroa.0104.1461 = phi i32 [ %.sroa.0104.2, %._crit_edge456 ], [ %.sroa.0104.0479, %410 ]
  %421 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv534)
          to label %422 unwind label %444

422:                                              ; preds = %.lr.ph469
  %423 = load i32, ptr %421, align 4, !tbaa !43
  %424 = sext i32 %423 to i64
  %425 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %424)
          to label %426 unwind label %444

426:                                              ; preds = %422
  %427 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %425)
          to label %428 unwind label %444

428:                                              ; preds = %426
  %429 = extractvalue { double, double } %427, 0
  %430 = extractvalue { double, double } %427, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #11
  %431 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %40, double %429, double %430)
          to label %432 unwind label %446

432:                                              ; preds = %428
  %433 = extractvalue { double, double } %431, 0
  store double %433, ptr %41, align 16
  %434 = extractvalue { double, double } %431, 1
  store double %434, ptr %250, align 8
  %435 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %40, double %429, double %430)
  %436 = fcmp olt float %435, %.1269463
  br i1 %436, label %437, label %450

437:                                              ; preds = %432
  %438 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv537)
          to label %439 unwind label %448

439:                                              ; preds = %437
  %440 = load i32, ptr %438, align 4, !tbaa !43
  %441 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv534)
          to label %442 unwind label %448

442:                                              ; preds = %439
  %443 = load i32, ptr %441, align 4, !tbaa !43
  br label %450

444:                                              ; preds = %426, %422, %.lr.ph469
  %445 = landingpad { ptr, i32 }
          cleanup
  br label %491

446:                                              ; preds = %428
  %447 = landingpad { ptr, i32 }
          cleanup
  br label %490

448:                                              ; preds = %439, %437
  %449 = landingpad { ptr, i32 }
          cleanup
  br label %490

450:                                              ; preds = %442, %432
  %.sroa.0104.2 = phi i32 [ %440, %442 ], [ %.sroa.0104.1461, %432 ]
  %.sroa.7.2 = phi i32 [ %443, %442 ], [ %.sroa.7.1462, %432 ]
  %.2270 = phi float [ %435, %442 ], [ %.1269463, %432 ]
  %indvars.iv.next535 = add nuw nsw i64 %indvars.iv534, 1
  %451 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %452 = trunc i64 %451 to i32
  %453 = trunc nuw i64 %indvars.iv.next535 to i32
  %454 = icmp slt i32 %453, %452
  br i1 %454, label %.lr.ph455, label %._crit_edge456

._crit_edge456:                                   ; preds = %485, %450
  %.sroa.0107.2.lcssa = phi i32 [ %.sroa.0107.1464, %450 ], [ %.sroa.0107.3, %485 ]
  %.sroa.7109.2.lcssa = phi i32 [ %.sroa.7109.1465, %450 ], [ %.sroa.7109.3, %485 ]
  %.sroa.9.2.lcssa = phi i32 [ %.sroa.9.1466, %450 ], [ %.sroa.9.3, %485 ]
  %.2266.lcssa = phi float [ %.1265467, %450 ], [ %.3267, %485 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #11
  %455 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %456 = trunc i64 %455 to i32
  %457 = icmp slt i32 %453, %456
  %indvars.iv.next528 = add nuw nsw i64 %indvars.iv527, 1
  br i1 %457, label %.lr.ph469, label %._crit_edge470, !llvm.loop !68

.lr.ph455:                                        ; preds = %450, %485
  %indvars.iv529 = phi i64 [ %indvars.iv.next530, %485 ], [ %indvars.iv527, %450 ]
  %.2266453 = phi float [ %.3267, %485 ], [ %.1265467, %450 ]
  %.sroa.9.2452 = phi i32 [ %.sroa.9.3, %485 ], [ %.sroa.9.1466, %450 ]
  %.sroa.7109.2451 = phi i32 [ %.sroa.7109.3, %485 ], [ %.sroa.7109.1465, %450 ]
  %.sroa.0107.2450 = phi i32 [ %.sroa.0107.3, %485 ], [ %.sroa.0107.1464, %450 ]
  %458 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv529)
          to label %459 unwind label %481

459:                                              ; preds = %.lr.ph455
  %460 = load i32, ptr %458, align 4, !tbaa !43
  %461 = sext i32 %460 to i64
  %462 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %461)
          to label %463 unwind label %481

463:                                              ; preds = %459
  %464 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %462)
          to label %465 unwind label %481

465:                                              ; preds = %463
  %466 = extractvalue { double, double } %464, 0
  %467 = extractvalue { double, double } %464, 1
  %468 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %41, double %466, double %467)
  %469 = call noundef float @_ZSt3absf(float noundef %468)
  %470 = fcmp ogt float %469, %.2266453
  br i1 %470, label %471, label %485

471:                                              ; preds = %465
  %472 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv537)
          to label %473 unwind label %483

473:                                              ; preds = %471
  %474 = load i32, ptr %472, align 4, !tbaa !43
  %475 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv534)
          to label %476 unwind label %483

476:                                              ; preds = %473
  %477 = load i32, ptr %475, align 4, !tbaa !43
  %478 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv529)
          to label %479 unwind label %483

479:                                              ; preds = %476
  %480 = load i32, ptr %478, align 4, !tbaa !43
  br label %485

481:                                              ; preds = %463, %459, %.lr.ph455
  %482 = landingpad { ptr, i32 }
          cleanup
  br label %490

483:                                              ; preds = %476, %473, %471
  %484 = landingpad { ptr, i32 }
          cleanup
  br label %490

485:                                              ; preds = %479, %465
  %.sroa.0107.3 = phi i32 [ %474, %479 ], [ %.sroa.0107.2450, %465 ]
  %.sroa.7109.3 = phi i32 [ %477, %479 ], [ %.sroa.7109.2451, %465 ]
  %.sroa.9.3 = phi i32 [ %480, %479 ], [ %.sroa.9.2452, %465 ]
  %.3267 = phi float [ %469, %479 ], [ %.2266453, %465 ]
  %indvars.iv.next530 = add nuw nsw i64 %indvars.iv529, 1
  %486 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %487 = trunc i64 %486 to i32
  %488 = trunc nuw i64 %indvars.iv.next530 to i32
  %489 = icmp slt i32 %488, %487
  br i1 %489, label %.lr.ph455, label %._crit_edge456, !llvm.loop !69

490:                                              ; preds = %448, %483, %481, %446
  %.pn290.pn.pn = phi { ptr, i32 } [ %447, %446 ], [ %449, %448 ], [ %484, %483 ], [ %482, %481 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #11
  br label %491

491:                                              ; preds = %444, %490, %419
  %.pn290.pn.pn.pn.pn = phi { ptr, i32 } [ %420, %419 ], [ %.pn290.pn.pn, %490 ], [ %445, %444 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %40) #11
  br label %535

492:                                              ; preds = %._crit_edge488
  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 %251, align 4, !tbaa !43
  store i32 %.sroa.9.0.lcssa, ptr %252, align 4, !tbaa !43
  %493 = 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 %494 unwind label %495

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

495:                                              ; preds = %492
  %496 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #11
  br label %535

497:                                              ; preds = %._crit_edge488
  %.not287 = icmp eq i32 %.sroa.0104.0.lcssa, -1
  br i1 %.not287, label %503, label %498

498:                                              ; preds = %497
  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 %253, 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 %43, i64 2)
          to label %500 unwind label %501

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

501:                                              ; preds = %498
  %502 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #11
  br label %535

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

505:                                              ; preds = %503
  %506 = load i32, ptr %504, align 4, !tbaa !43
  store i32 %506, ptr %44, align 4, !tbaa !43
  %507 = 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 %508 unwind label %509

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

509:                                              ; preds = %505, %503
  %510 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #11
  br label %535

511:                                              ; preds = %500, %508, %494
  %512 = invoke noundef nonnull align 16 dereferenceable(32) ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %68, i64 noundef %indvars.iv543)
          to label %513 unwind label %521

513:                                              ; preds = %511
  %514 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %515 = trunc i64 %514 to i32
  %516 = getelementptr inbounds i8, ptr %512, i64 16
  store i32 %515, ptr %516, align 16, !tbaa !70
  %517 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %518 = trunc i64 %517 to i32
  %519 = icmp sgt i32 %518, 0
  br i1 %519, label %.lr.ph496, label %._crit_edge497

.lr.ph496:                                        ; preds = %513
  %520 = getelementptr inbounds i8, ptr %512, i64 20
  br label %525

521:                                              ; preds = %511
  %522 = landingpad { ptr, i32 }
          cleanup
  br label %535

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

525:                                              ; preds = %.lr.ph496, %527
  %indvars.iv540 = phi i64 [ 0, %.lr.ph496 ], [ %indvars.iv.next541, %527 ]
  %526 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %indvars.iv540)
          to label %527 unwind label %523

527:                                              ; preds = %525
  %528 = load i32, ptr %526, align 4, !tbaa !43
  %529 = getelementptr inbounds [3 x i32], ptr %520, i64 0, i64 %indvars.iv540
  store i32 %528, ptr %529, align 4, !tbaa !43
  %indvars.iv.next541 = add nuw nsw i64 %indvars.iv540, 1
  %530 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %38)
  %sext547 = shl i64 %530, 32
  %531 = ashr exact i64 %sext547, 32
  %532 = icmp slt i64 %indvars.iv.next541, %531
  br i1 %532, label %525, label %._crit_edge497, !llvm.loop !72

._crit_edge497:                                   ; preds = %527, %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
  %indvars.iv.next544 = add nuw nsw i64 %indvars.iv543, 1
  %533 = call noundef i64 @_ZNK3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %sext548 = shl i64 %533, 32
  %534 = ashr exact i64 %sext548, 32
  %.not298 = icmp slt i64 %indvars.iv.next544, %534
  br i1 %.not298, label %357, label %.critedge345, !llvm.loop !73

535:                                              ; preds = %401, %521, %523, %509, %501, %495, %491, %392, %390
  %.pn312.pn = phi { ptr, i32 } [ %.pn312, %390 ], [ %393, %392 ], [ %402, %401 ], [ %.pn290.pn.pn.pn.pn, %491 ], [ %496, %495 ], [ %502, %501 ], [ %510, %509 ], [ %524, %523 ], [ %522, %521 ]
  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 %713

.critedge345:                                     ; preds = %._crit_edge497, %.preheader353.split
  %536 = load float, ptr %72, align 16, !tbaa !25
  %537 = fcmp ogt float %536, 0.000000e+00
  br i1 %537, label %538, label %560

538:                                              ; preds = %.critedge345
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #11
  store float 0x47EFFFFFE0000000, ptr %45, align 4, !tbaa !42
  %539 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %540 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %.not299506 = icmp eq ptr %539, %540
  br i1 %.not299506, label %.._crit_edge510_crit_edge, label %.lr.ph509

.._crit_edge510_crit_edge:                        ; preds = %538
  %.pre = load float, ptr %45, align 4, !tbaa !42
  br label %._crit_edge510

._crit_edge510:                                   ; preds = %._crit_edge505, %.._crit_edge510_crit_edge
  %541 = phi float [ %.pre, %.._crit_edge510_crit_edge ], [ %548, %._crit_edge505 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #11
  %542 = fmul float %541, 5.000000e-01
  store float %542, ptr %47, align 4, !tbaa !42
  %543 = 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)
  %544 = load float, ptr %543, align 4, !tbaa !42
  store float %544, 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 %560

.lr.ph509:                                        ; preds = %538, %._crit_edge505
  %.0275507 = phi ptr [ %549, %._crit_edge505 ], [ %539, %538 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #11
  store float 0.000000e+00, ptr %46, align 4, !tbaa !42
  %545 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %546 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %.not311501 = icmp eq ptr %545, %546
  br i1 %.not311501, label %._crit_edge505, label %.lr.ph504

._crit_edge505:                                   ; preds = %558, %.lr.ph509
  %547 = 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)
  %548 = load float, ptr %547, align 4, !tbaa !42
  store float %548, ptr %45, align 4, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #11
  %549 = getelementptr inbounds i8, ptr %.0275507, i64 16
  %.not299 = icmp eq ptr %549, %540
  br i1 %.not299, label %._crit_edge510, label %.lr.ph509

.lr.ph504:                                        ; preds = %.lr.ph509, %558
  %.0276502 = phi ptr [ %559, %558 ], [ %545, %.lr.ph509 ]
  %.sroa.045.0.copyload = load double, ptr %.0276502, align 16
  %.sroa.246.0..sroa_idx = getelementptr inbounds i8, ptr %.0276502, i64 8
  %.sroa.246.0.copyload = load double, ptr %.sroa.246.0..sroa_idx, align 8, !tbaa !50
  %550 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %.0275507, double %.sroa.045.0.copyload, double %.sroa.246.0.copyload)
          to label %551 unwind label %556

551:                                              ; preds = %.lr.ph504
  %552 = fneg float %550
  %553 = load float, ptr %46, align 4, !tbaa !42
  %554 = fcmp olt float %553, %552
  br i1 %554, label %555, label %558

555:                                              ; preds = %551
  store float %552, ptr %46, align 4, !tbaa !42
  br label %558

556:                                              ; preds = %.lr.ph504
  %557 = 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 %713

558:                                              ; preds = %555, %551
  %559 = getelementptr inbounds i8, ptr %.0276502, i64 32
  %.not311 = icmp eq ptr %559, %546
  br i1 %.not311, label %._crit_edge505, label %.lr.ph504

560:                                              ; preds = %._crit_edge510, %.critedge345
  %561 = phi float [ %544, %._crit_edge510 ], [ %536, %.critedge345 ]
  %562 = fcmp ogt float %561, 0.000000e+00
  br i1 %562, label %563, label %.loopexit

563:                                              ; preds = %560
  %564 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %565 = call noundef ptr @_ZN3JPH5ArrayINS_15ConvexHullShape5PointENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %68)
  %.not300511 = icmp eq ptr %564, %565
  br i1 %.not300511, label %.loopexit, label %.lr.ph514

.lr.ph514:                                        ; preds = %563
  %566 = 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
  %567 = getelementptr inbounds i8, ptr %55, i64 8
  %568 = getelementptr inbounds i8, ptr %56, i64 8
  %569 = getelementptr inbounds i8, ptr %57, i64 8
  %570 = getelementptr inbounds i8, ptr %58, i64 8
  %571 = getelementptr inbounds i8, ptr %61, i64 8
  %572 = getelementptr inbounds i8, ptr %60, i64 8
  %573 = getelementptr inbounds i8, ptr %1, i64 108
  br label %574

574:                                              ; preds = %.lr.ph514, %693
  %.0277512 = phi ptr [ %564, %.lr.ph514 ], [ %694, %693 ]
  %575 = getelementptr inbounds i8, ptr %.0277512, i64 16
  %576 = load i32, ptr %575, align 16, !tbaa !70
  %.not301 = icmp eq i32 %576, 1
  br i1 %.not301, label %693, label %577

577:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #11
  %578 = getelementptr inbounds i8, ptr %.0277512, i64 20
  %579 = load i32, ptr %578, align 4, !tbaa !43
  %580 = sext i32 %579 to i64
  %581 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %580)
          to label %582 unwind label %599

582:                                              ; preds = %577
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %48, ptr noundef nonnull align 16 dereferenceable(16) %581, i64 16, i1 false), !tbaa.struct !74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #11
  %583 = getelementptr inbounds i8, ptr %.0277512, i64 24
  %584 = load i32, ptr %583, align 4, !tbaa !43
  %585 = sext i32 %584 to i64
  %586 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %585)
          to label %587 unwind label %601

587:                                              ; preds = %582
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %49, ptr noundef nonnull align 16 dereferenceable(16) %586, i64 16, i1 false), !tbaa.struct !74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %50) #11
  %588 = load i32, ptr %575, align 16, !tbaa !70
  switch i32 %588, label %607 [
    i32 3, label %589
    i32 2, label %611
  ]

589:                                              ; preds = %587
  %590 = getelementptr inbounds i8, ptr %.0277512, i64 28
  %591 = load i32, ptr %590, align 4, !tbaa !43
  %592 = sext i32 %591 to i64
  %593 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %592)
          to label %594 unwind label %603

594:                                              ; preds = %589
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %50, ptr noundef nonnull align 16 dereferenceable(16) %593, i64 16, i1 false), !tbaa.struct !74
  %595 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %596 unwind label %605

596:                                              ; preds = %594
  %597 = extractvalue { double, double } %595, 0
  %598 = extractvalue { double, double } %595, 1
  br label %630

599:                                              ; preds = %577
  %600 = landingpad { ptr, i32 }
          cleanup
  br label %691

601:                                              ; preds = %582
  %602 = landingpad { ptr, i32 }
          cleanup
  br label %690

603:                                              ; preds = %607, %589
  %604 = landingpad { ptr, i32 }
          cleanup
  br label %689

605:                                              ; preds = %594
  %606 = landingpad { ptr, i32 }
          cleanup
  br label %689

607:                                              ; preds = %587
  %608 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.4, i32 noundef 313)
          to label %609 unwind label %603

609:                                              ; preds = %607
  br i1 %608, label %610, label %611

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

611:                                              ; preds = %587, %610, %609
  %.sroa.026.0.copyload = load double, ptr %.0277512, align 16
  %.sroa.227.0..sroa_idx = getelementptr inbounds i8, ptr %.0277512, 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
  %612 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %48)
          to label %613 unwind label %628

613:                                              ; preds = %611
  %614 = extractvalue { double, double } %612, 0
  store double %614, ptr %51, align 16
  %615 = extractvalue { double, double } %612, 1
  store double %615, ptr %566, align 8
  %616 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %49)
          to label %617 unwind label %628

617:                                              ; preds = %613
  %618 = extractvalue { double, double } %616, 0
  %619 = extractvalue { double, double } %616, 1
  %620 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %51, double %618, double %619)
          to label %621 unwind label %628

621:                                              ; preds = %617
  %622 = extractvalue { double, double } %620, 0
  %623 = extractvalue { double, double } %620, 1
  %624 = invoke { double, double } @_ZN3JPH5Plane19sFromPointAndNormalENS_4Vec3ES1_(double %.sroa.026.0.copyload, double %.sroa.227.0.copyload, double %622, double %623)
          to label %625 unwind label %628

625:                                              ; preds = %621
  %626 = extractvalue { double, double } %624, 0
  %627 = extractvalue { double, double } %624, 1
  store double %626, ptr %50, align 16
  store double %627, 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 %630

628:                                              ; preds = %621, %617, %613, %611
  %629 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #11
  br label %689

630:                                              ; preds = %625, %596
  %.sroa.6.0 = phi double [ %598, %596 ], [ %.sroa.6.0.copyload, %625 ]
  %.sroa.031.0 = phi double [ %597, %596 ], [ %.sroa.031.0.copyload, %625 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %53) #11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %54) #11
  %631 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %48)
          to label %632 unwind label %655

632:                                              ; preds = %630
  %633 = extractvalue { double, double } %631, 0
  %634 = extractvalue { double, double } %631, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %55, double %633, double %634, float noundef 0.000000e+00)
  %635 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %49)
          to label %636 unwind label %655

636:                                              ; preds = %632
  %637 = extractvalue { double, double } %635, 0
  %638 = extractvalue { double, double } %635, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %56, double %637, double %638, float noundef 0.000000e+00)
  %639 = invoke { double, double } @_ZNK3JPH5Plane9GetNormalEv(ptr noundef nonnull align 16 dereferenceable(16) %50)
          to label %640 unwind label %655

640:                                              ; preds = %636
  %641 = extractvalue { double, double } %639, 0
  %642 = extractvalue { double, double } %639, 1
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %57, double %641, double %642, 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 %643 unwind label %655

643:                                              ; preds = %640
  %644 = load double, ptr %55, align 16
  %645 = load double, ptr %567, align 8
  %646 = load double, ptr %56, align 16
  %647 = load double, ptr %568, align 8
  %648 = load double, ptr %57, align 16
  %649 = load double, ptr %569, align 8
  %650 = load double, ptr %58, align 16
  %651 = load double, ptr %570, align 8
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %54, double %644, double %645, double %646, double %647, double %648, double %649, double %650, double %651)
  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
  %652 = invoke noundef float @_ZNK3JPH5Mat4417GetDeterminant3x3Ev(ptr noundef nonnull align 16 dereferenceable(64) %53)
          to label %653 unwind label %657

653:                                              ; preds = %643
  %654 = fcmp une float %652, 0.000000e+00
  br i1 %654, label %659, label %692

655:                                              ; preds = %640, %636, %632, %630
  %656 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %54) #11
  br label %688

657:                                              ; preds = %643
  %658 = landingpad { ptr, i32 }
          cleanup
  br label %688

659:                                              ; preds = %653
  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 %660 unwind label %676

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

662:                                              ; preds = %660
  %663 = extractvalue { double, double } %661, 0
  store double %663, ptr %61, align 16
  %664 = extractvalue { double, double } %661, 1
  store double %664, ptr %571, align 8
  %665 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %61, float noundef %652)
          to label %666 unwind label %678

666:                                              ; preds = %662
  %667 = extractvalue { double, double } %665, 0
  store double %667, ptr %60, align 16
  %668 = extractvalue { double, double } %665, 1
  store double %668, ptr %572, align 8
  %669 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %60)
          to label %670 unwind label %678

670:                                              ; preds = %666
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %61) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %60) #11
  %671 = fcmp ogt float %669, 1.000000e+00
  br i1 %671, label %.thread346, label %672

672:                                              ; preds = %670
  %673 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 341)
          to label %674 unwind label %680

674:                                              ; preds = %672
  br i1 %673, label %675, label %.thread346

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

676:                                              ; preds = %659
  %677 = landingpad { ptr, i32 }
          cleanup
  br label %687

678:                                              ; preds = %666, %662, %660
  %679 = 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 %687

680:                                              ; preds = %672
  %681 = landingpad { ptr, i32 }
          cleanup
  br label %687

.thread346:                                       ; preds = %670, %674, %675
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #11
  %682 = load float, ptr %573, align 4, !tbaa !77
  %683 = fadd float %669, -1.000000e+00
  %684 = fdiv float %682, %683
  store float %684, ptr %62, align 4, !tbaa !42
  %685 = 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)
  %686 = load float, ptr %685, align 4, !tbaa !42
  store float %686, 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 %693

687:                                              ; preds = %678, %680, %676
  %.pn302.pn = phi { ptr, i32 } [ %677, %676 ], [ %681, %680 ], [ %679, %678 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %59) #11
  br label %688

688:                                              ; preds = %657, %687, %655
  %.pn302.pn.pn.pn = phi { ptr, i32 } [ %656, %655 ], [ %.pn302.pn, %687 ], [ %658, %657 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %53) #11
  br label %689

689:                                              ; preds = %688, %628, %605, %603
  %.pn302.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn302.pn.pn.pn, %688 ], [ %606, %605 ], [ %604, %603 ], [ %629, %628 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %50) #11
  br label %690

690:                                              ; preds = %689, %601
  %.pn302.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn302.pn.pn.pn.pn, %689 ], [ %602, %601 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #11
  br label %691

691:                                              ; preds = %690, %599
  %.pn302.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn302.pn.pn.pn.pn.pn, %690 ], [ %600, %599 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #11
  br label %713

692:                                              ; preds = %653
  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

693:                                              ; preds = %.thread346, %574
  %694 = getelementptr inbounds i8, ptr %.0277512, i64 32
  %.not300 = icmp eq ptr %694, %565
  br i1 %.not300, label %.loopexit, label %574

.loopexit:                                        ; preds = %693, %563, %692, %560
  store float 0x47EFFFFFE0000000, ptr %75, align 8, !tbaa !39
  %695 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %696 = call noundef ptr @_ZN3JPH5ArrayINS_5PlaneENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %.not310515 = icmp eq ptr %695, %696
  br i1 %.not310515, label %._crit_edge519, label %.lr.ph518

._crit_edge519:                                   ; preds = %700, %.loopexit
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %64) #11
  store float 0.000000e+00, ptr %64, align 4, !tbaa !42
  %697 = 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)
  %698 = load float, ptr %697, align 4, !tbaa !42
  store float %698, 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 %707 unwind label %711

.lr.ph518:                                        ; preds = %.loopexit, %700
  %.0251516 = phi ptr [ %704, %700 ], [ %695, %.loopexit ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %63) #11
  %699 = invoke noundef float @_ZNK3JPH5Plane11GetConstantEv(ptr noundef nonnull align 16 dereferenceable(16) %.0251516)
          to label %700 unwind label %705

700:                                              ; preds = %.lr.ph518
  %701 = fneg float %699
  store float %701, ptr %63, align 4, !tbaa !42
  %702 = 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)
  %703 = load float, ptr %702, align 4, !tbaa !42
  store float %703, ptr %75, align 8, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #11
  %704 = getelementptr inbounds i8, ptr %.0251516, i64 16
  %.not310 = icmp eq ptr %704, %696
  br i1 %.not310, label %._crit_edge519, label %.lr.ph518

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

707:                                              ; preds = %._crit_edge519
  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 %708

708:                                              ; preds = %.thread, %707, %354
  call void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %29) #11
  call void @llvm.lifetime.end.p0(i64 32, 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 %709

709:                                              ; preds = %112, %708, %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 %710

710:                                              ; preds = %77, %709
  ret void

711:                                              ; preds = %._crit_edge519
  %712 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #11
  br label %713

713:                                              ; preds = %266, %349, %347, %346, %711, %705, %691, %556, %535, %355, %256
  %.pn320.pn.pn = phi { ptr, i32 } [ %356, %355 ], [ %.pn312.pn, %535 ], [ %557, %556 ], [ %706, %705 ], [ %712, %711 ], [ %.pn302.pn.pn.pn.pn.pn.pn, %691 ], [ %257, %256 ], [ %267, %266 ], [ %350, %349 ], [ %348, %347 ], [ %.pn317, %346 ]
  call void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %29) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #11
  br label %714

714:                                              ; preds = %202, %206, %220, %204, %713, %254, %149
  %.pn327.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn320.pn.pn, %713 ], [ %255, %254 ], [ %150, %149 ], [ %203, %202 ], [ %205, %204 ], [ %.pn327.pn.pn, %220 ], [ %207, %206 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %16) #11
  br label %715

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

716:                                              ; preds = %113, %119, %715, %93
  %.pn338 = phi { ptr, i32 } [ %94, %93 ], [ %.pn327.pn.pn.pn.pn.pn.pn.pn, %715 ], [ %114, %113 ], [ %.pn, %119 ]
  call void @_ZN3JPH17ConvexHullBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %5) #11
  br label %717

717:                                              ; preds = %716, %91
  %.pn338.pn = phi { ptr, i32 } [ %.pn338, %716 ], [ %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 %718

718:                                              ; preds = %717, %80
  %.pn341 = phi { ptr, i32 } [ %81, %80 ], [ %.pn338.pn, %717 ]
  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 %719

719:                                              ; preds = %718, %78
  %.pn341.pn = phi { ptr, i32 } [ %.pn341, %718 ], [ %79, %78 ]
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %0) #11
  resume { ptr, i32 } %.pn341.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: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE7reserveEj(ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 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 void @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEE4findERKi(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE12IteratorBaseIS9_NS9_8iteratorEEneERKSB_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE3endEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::HashTable<int, std::pair<int, unsigned char>, JPH::UnorderedMapDetail<int, unsigned char>, JPH::Hash<int>, std::equal_to<int>>::iterator") align 8, ptr noundef nonnull align 8 dereferenceable(28)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEE8iteratorptEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #3 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 @_ZN3JPH12UnorderedMapIihNS_4HashIiEESt8equal_toIiEEixERKi(ptr noundef nonnull align 8 dereferenceable(28), 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: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH9HashTableIiSt4pairIihENS_18UnorderedMapDetailIihEENS_4HashIiEESt8equal_toIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #4 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 2158001319}
!56 = !{!57, !17, i64 4}
!57 = !{!"_ZTSSt4pairIihE", !16, i64 0, !17, i64 4}
!58 = !{i64 2158001672}
!59 = !{i64 2158002033}
!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 2158002410}
!76 = !{i64 2158002745}
!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