; LLVM IR from jrouwe/JoltPhysics :: Jolt/Geometry/ConvexHullBuilder.ll (ZN3JPH17ConvexHullBuilder10InitializeEifRPKc)

; 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"

%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Array.8" = type { i64, i64, ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::ConvexHullBuilder2D" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.JPH::Array.11" = type { i64, i64, ptr }
%"class.JPH::Array.2" = type { i64, i64, ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::STLAllocator.3" = type { i8 }
%"class.JPH::Array.5" = type { i64, i64, ptr }
%"class.JPH::ConvexHullBuilder" = type { ptr, %"class.JPH::Array.2", %"class.JPH::Array.5" }
%"class.JPH::ConvexHullBuilder::Face" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Array", ptr, float, i8, [11 x i8] }>
%"class.JPH::ConvexHullBuilder::Edge" = type <{ ptr, ptr, ptr, i32, [4 x i8] }>
%"struct.JPH::ConvexHullBuilder::Coplanar" = type { i32, float }

@.str.1 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 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: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder4EdgedlEPv(ptr 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: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder4Face26CalculateNormalAndCentroidEPKNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(69), ptr noundef) #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16)) #1 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) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, ptr noundef nonnull align 8 dereferenceable(24), float noundef) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 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: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH17ConvexHullBuilder25DetermineCoplanarDistanceEv(ptr noundef nonnull align 8 dereferenceable(56)) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH17ConvexHullBuilder18GetNumVerticesUsedEv(ptr noundef nonnull align 8 dereferenceable(56)) #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 ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %1, float noundef %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #3 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca ptr, align 8
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca i32, align 4
  %16 = alloca float, align 4
  %17 = alloca %"struct.JPH::AssertLastParam", align 1
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"struct.JPH::AssertLastParam", align 1
  %24 = alloca i32, align 4
  %25 = alloca float, align 4
  %26 = alloca i32, align 4
  %27 = alloca float, align 4
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"struct.JPH::AssertLastParam", align 1
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca i32, align 4
  %49 = alloca float, align 4
  %50 = alloca i32, align 4
  %51 = alloca float, align 4
  %52 = alloca %"class.JPH::Vec3", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca %"class.JPH::Vec3", align 16
  %58 = alloca %"class.JPH::Array.8", align 8
  %59 = alloca ptr, align 8
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca float, align 4
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca float, align 4
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca float, align 4
  %70 = alloca %"class.JPH::Array", align 8
  %71 = alloca %"class.JPH::ConvexHullBuilder2D", align 8
  %72 = alloca i32, align 4
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %"class.JPH::Array.11", align 8
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca ptr, align 8
  %79 = alloca i32, align 4
  %80 = alloca ptr, align 8
  %81 = alloca %"class.JPH::Array.11", align 8
  %82 = alloca i32, align 4
  %83 = alloca ptr, align 8
  %84 = alloca i64, align 8
  %85 = alloca %"class.JPH::Vec3", align 16
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca %"class.JPH::Array.2", align 8
  %91 = alloca %"class.std::initializer_list", align 8
  %92 = alloca [4 x ptr], align 8
  %93 = alloca %"class.JPH::STLAllocator.3", align 1
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca ptr, align 8
  %97 = alloca float, align 4
  %98 = alloca ptr, align 8
  %99 = alloca ptr, align 8
  %100 = alloca ptr, align 8
  %101 = alloca ptr, align 8
  %102 = alloca i32, align 4
  %103 = alloca %"class.JPH::Array.5", align 8
  %104 = alloca i8, align 1
  %105 = alloca ptr, align 8
  %106 = alloca ptr, align 8
  %107 = alloca ptr, align 8
  %108 = alloca ptr, align 8
  %109 = alloca i64, align 8
  %110 = alloca float, align 4
  %111 = alloca i64, align 8
  %112 = alloca ptr, align 8
  %113 = alloca %"class.JPH::Vec3", align 16
  %114 = alloca %"class.JPH::Array.2", align 8
  %115 = alloca ptr, align 8
  %116 = alloca ptr, align 8
  %117 = alloca ptr, align 8
  %118 = alloca ptr, align 8
  %119 = alloca ptr, align 8
  %120 = alloca ptr, align 8
  %121 = alloca ptr, align 8
  %122 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store float %2, ptr %8, align 4, !tbaa !11
  store ptr %3, ptr %9, align 8, !tbaa !5
  %123 = load ptr, ptr %6, align 8
  call void @_ZN3JPH17ConvexHullBuilder9FreeFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
  %124 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %125 = load ptr, ptr %124, align 8, !tbaa !13
  %126 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %125)
  %127 = icmp ult i64 %126, 3
  br i1 %127, label %128, label %130

128:                                              ; preds = %4
  %129 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr @.str.3, ptr %129, align 8, !tbaa !5
  store i32 2, ptr %5, align 4
  br label %1316

130:                                              ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  %131 = call noundef float @_ZNK3JPH17ConvexHullBuilder25DetermineCoplanarDistanceEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
  %132 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %131)
  store float %132, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %133 = load float, ptr %8, align 4, !tbaa !11
  %134 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %133)
  store float %134, ptr %12, align 4, !tbaa !11
  %135 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %136 = load float, ptr %135, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  store float %136, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  store i32 -1, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  store float -1.000000e+00, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %137

137:                                              ; preds = %159, %130
  %138 = load i32, ptr %15, align 4, !tbaa !9
  %139 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %140 = load ptr, ptr %139, align 8, !tbaa !13
  %141 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %140)
  %142 = trunc i64 %141 to i32
  %143 = icmp slt i32 %138, %142
  br i1 %143, label %145, label %144

144:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  br label %162

145:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #11
  %146 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %147 = load ptr, ptr %146, align 8, !tbaa !13
  %148 = load i32, ptr %15, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %147, i64 noundef %149)
  %151 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %150)
  store float %151, ptr %16, align 4, !tbaa !11
  %152 = load float, ptr %16, align 4, !tbaa !11
  %153 = load float, ptr %14, align 4, !tbaa !11
  %154 = fcmp ogt float %152, %153
  br i1 %154, label %155, label %158

155:                                              ; preds = %145
  %156 = load float, ptr %16, align 4, !tbaa !11
  store float %156, ptr %14, align 4, !tbaa !11
  %157 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %157, ptr %13, align 4, !tbaa !9
  br label %158

158:                                              ; preds = %155, %145
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #11
  br label %159

159:                                              ; preds = %158
  %160 = load i32, ptr %15, align 4, !tbaa !9
  %161 = add nsw i32 %160, 1
  store i32 %161, ptr %15, align 4, !tbaa !9
  br label %137, !llvm.loop !18

162:                                              ; preds = %144
  br label %163

163:                                              ; preds = %162
  %164 = load i32, ptr %13, align 4, !tbaa !9
  %165 = icmp sge i32 %164, 0
  br i1 %165, label %169, label %166

166:                                              ; preds = %163
  %167 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 331)
  br i1 %167, label %168, label %169

168:                                              ; preds = %166
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !20
  br label %169

169:                                              ; preds = %168, %166, %163
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  store i32 -1, ptr %18, align 4, !tbaa !9
  store float -1.000000e+00, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #11
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %215, %171
  %173 = load i32, ptr %19, align 4, !tbaa !9
  %174 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %175 = load ptr, ptr %174, align 8, !tbaa !13
  %176 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %175)
  %177 = trunc i64 %176 to i32
  %178 = icmp slt i32 %173, %177
  br i1 %178, label %180, label %179

179:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #11
  br label %218

180:                                              ; preds = %172
  %181 = load i32, ptr %19, align 4, !tbaa !9
  %182 = load i32, ptr %13, align 4, !tbaa !9
  %183 = icmp ne i32 %181, %182
  br i1 %183, label %184, label %214

184:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #11
  %185 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %186 = load ptr, ptr %185, align 8, !tbaa !13
  %187 = load i32, ptr %19, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %186, i64 noundef %188)
  %190 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %191 = load ptr, ptr %190, align 8, !tbaa !13
  %192 = load i32, ptr %13, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %191, i64 noundef %193)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %194, i64 16, i1 false), !tbaa.struct !21
  %195 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %196 = load double, ptr %195, align 16
  %197 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %198 = load double, ptr %197, align 8
  %199 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %189, double %196, double %198)
  %200 = getelementptr inbounds %"class.JPH::Vec3", ptr %21, i32 0, i32 0
  %201 = getelementptr inbounds %union.anon, ptr %200, i32 0, i32 0
  %202 = getelementptr inbounds { double, double }, ptr %201, i32 0, i32 0
  %203 = extractvalue { double, double } %199, 0
  store double %203, ptr %202, align 16
  %204 = getelementptr inbounds { double, double }, ptr %201, i32 0, i32 1
  %205 = extractvalue { double, double } %199, 1
  store double %205, ptr %204, align 8
  %206 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %21)
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #11
  store float %206, ptr %20, align 4, !tbaa !11
  %207 = load float, ptr %20, align 4, !tbaa !11
  %208 = load float, ptr %14, align 4, !tbaa !11
  %209 = fcmp ogt float %207, %208
  br i1 %209, label %210, label %213

210:                                              ; preds = %184
  %211 = load float, ptr %20, align 4, !tbaa !11
  store float %211, ptr %14, align 4, !tbaa !11
  %212 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %212, ptr %18, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %210, %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  br label %214

214:                                              ; preds = %213, %180
  br label %215

215:                                              ; preds = %214
  %216 = load i32, ptr %19, align 4, !tbaa !9
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %19, align 4, !tbaa !9
  br label %172, !llvm.loop !23

218:                                              ; preds = %179
  br label %219

219:                                              ; preds = %218
  %220 = load i32, ptr %18, align 4, !tbaa !9
  %221 = icmp sge i32 %220, 0
  br i1 %221, label %225, label %222

222:                                              ; preds = %219
  %223 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 346)
  br i1 %223, label %224, label %225

224:                                              ; preds = %222
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !24
  br label %225

225:                                              ; preds = %224, %222, %219
  br label %226

226:                                              ; preds = %225
  br label %227

227:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  store i32 -1, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store float -1.000000e+00, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %307, %227
  %229 = load i32, ptr %26, align 4, !tbaa !9
  %230 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %231 = load ptr, ptr %230, align 8, !tbaa !13
  %232 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %231)
  %233 = trunc i64 %232 to i32
  %234 = icmp slt i32 %229, %233
  br i1 %234, label %236, label %235

235:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  br label %310

236:                                              ; preds = %228
  %237 = load i32, ptr %26, align 4, !tbaa !9
  %238 = load i32, ptr %13, align 4, !tbaa !9
  %239 = icmp ne i32 %237, %238
  br i1 %239, label %240, label %306

240:                                              ; preds = %236
  %241 = load i32, ptr %26, align 4, !tbaa !9
  %242 = load i32, ptr %18, align 4, !tbaa !9
  %243 = icmp ne i32 %241, %242
  br i1 %243, label %244, label %306

244:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #11
  %245 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %246 = load ptr, ptr %245, align 8, !tbaa !13
  %247 = load i32, ptr %13, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %246, i64 noundef %248)
  %250 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !13
  %252 = load i32, ptr %26, align 4, !tbaa !9
  %253 = sext i32 %252 to i64
  %254 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %251, i64 noundef %253)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %30, ptr align 16 %254, i64 16, i1 false), !tbaa.struct !21
  %255 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %256 = load double, ptr %255, align 16
  %257 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %258 = load double, ptr %257, align 8
  %259 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %249, double %256, double %258)
  %260 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %261 = getelementptr inbounds %union.anon, ptr %260, i32 0, i32 0
  %262 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 0
  %263 = extractvalue { double, double } %259, 0
  store double %263, ptr %262, align 16
  %264 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 1
  %265 = extractvalue { double, double } %259, 1
  store double %265, ptr %264, align 8
  %266 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !13
  %268 = load i32, ptr %18, align 4, !tbaa !9
  %269 = sext i32 %268 to i64
  %270 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %267, i64 noundef %269)
  %271 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8, !tbaa !13
  %273 = load i32, ptr %26, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %272, i64 noundef %274)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %275, i64 16, i1 false), !tbaa.struct !21
  %276 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %277 = load double, ptr %276, align 16
  %278 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %279 = load double, ptr %278, align 8
  %280 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %270, double %277, double %279)
  %281 = getelementptr inbounds %"class.JPH::Vec3", ptr %31, i32 0, i32 0
  %282 = getelementptr inbounds %union.anon, ptr %281, i32 0, i32 0
  %283 = getelementptr inbounds { double, double }, ptr %282, i32 0, i32 0
  %284 = extractvalue { double, double } %280, 0
  store double %284, ptr %283, align 16
  %285 = getelementptr inbounds { double, double }, ptr %282, i32 0, i32 1
  %286 = extractvalue { double, double } %280, 1
  store double %286, ptr %285, align 8
  %287 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %288 = load double, ptr %287, align 16
  %289 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %290 = load double, ptr %289, align 8
  %291 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %29, double %288, double %290)
  %292 = getelementptr inbounds %"class.JPH::Vec3", ptr %28, i32 0, i32 0
  %293 = getelementptr inbounds %union.anon, ptr %292, i32 0, i32 0
  %294 = getelementptr inbounds { double, double }, ptr %293, i32 0, i32 0
  %295 = extractvalue { double, double } %291, 0
  store double %295, ptr %294, align 16
  %296 = getelementptr inbounds { double, double }, ptr %293, i32 0, i32 1
  %297 = extractvalue { double, double } %291, 1
  store double %297, ptr %296, align 8
  %298 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %28)
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #11
  store float %298, ptr %27, align 4, !tbaa !11
  %299 = load float, ptr %27, align 4, !tbaa !11
  %300 = load float, ptr %25, align 4, !tbaa !11
  %301 = fcmp ogt float %299, %300
  br i1 %301, label %302, label %305

302:                                              ; preds = %244
  %303 = load float, ptr %27, align 4, !tbaa !11
  store float %303, ptr %25, align 4, !tbaa !11
  %304 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %304, ptr %24, align 4, !tbaa !9
  br label %305

305:                                              ; preds = %302, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  br label %306

306:                                              ; preds = %305, %240, %236
  br label %307

307:                                              ; preds = %306
  %308 = load i32, ptr %26, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %26, align 4, !tbaa !9
  br label %228, !llvm.loop !25

310:                                              ; preds = %235
  br label %311

311:                                              ; preds = %310
  %312 = load i32, ptr %24, align 4, !tbaa !9
  %313 = icmp sge i32 %312, 0
  br i1 %313, label %317, label %314

314:                                              ; preds = %311
  %315 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 361)
  br i1 %315, label %316, label %317

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

317:                                              ; preds = %316, %314, %311
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318
  %320 = load float, ptr %25, align 4, !tbaa !11
  %321 = fcmp olt float %320, 0x3D71979980000000
  br i1 %321, label %322, label %324

322:                                              ; preds = %319
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr @.str.7, ptr %323, align 8, !tbaa !5
  store i32 4, ptr %5, align 4
  store i32 1, ptr %34, align 4
  br label %1315

324:                                              ; preds = %319
  %325 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !13
  %327 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %326)
  %328 = icmp eq i64 %327, 3
  br i1 %328, label %329, label %368

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %330 = load i32, ptr %13, align 4, !tbaa !9
  %331 = load i32, ptr %18, align 4, !tbaa !9
  %332 = load i32, ptr %24, align 4, !tbaa !9
  %333 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %330, i32 noundef %331, i32 noundef %332)
  store ptr %333, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %334 = load i32, ptr %13, align 4, !tbaa !9
  %335 = load i32, ptr %24, align 4, !tbaa !9
  %336 = load i32, ptr %18, align 4, !tbaa !9
  %337 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %334, i32 noundef %335, i32 noundef %336)
  store ptr %337, ptr %36, align 8, !tbaa !5
  %338 = load ptr, ptr %35, align 8, !tbaa !5
  %339 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %338, i32 0, i32 3
  %340 = load ptr, ptr %339, align 8, !tbaa !27
  %341 = load ptr, ptr %36, align 8, !tbaa !5
  %342 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %341, i32 0, i32 3
  %343 = load ptr, ptr %342, align 8, !tbaa !27
  %344 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %343, i32 0, i32 1
  %345 = load ptr, ptr %344, align 8, !tbaa !32
  %346 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %345, i32 0, i32 1
  %347 = load ptr, ptr %346, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %340, ptr noundef %347)
  %348 = load ptr, ptr %35, align 8, !tbaa !5
  %349 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %348, i32 0, i32 3
  %350 = load ptr, ptr %349, align 8, !tbaa !27
  %351 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %350, i32 0, i32 1
  %352 = load ptr, ptr %351, align 8, !tbaa !32
  %353 = load ptr, ptr %36, align 8, !tbaa !5
  %354 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %353, i32 0, i32 3
  %355 = load ptr, ptr %354, align 8, !tbaa !27
  %356 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %355, i32 0, i32 1
  %357 = load ptr, ptr %356, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %352, ptr noundef %357)
  %358 = load ptr, ptr %35, align 8, !tbaa !5
  %359 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %358, i32 0, i32 3
  %360 = load ptr, ptr %359, align 8, !tbaa !27
  %361 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %360, i32 0, i32 1
  %362 = load ptr, ptr %361, align 8, !tbaa !32
  %363 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %362, i32 0, i32 1
  %364 = load ptr, ptr %363, align 8, !tbaa !32
  %365 = load ptr, ptr %36, align 8, !tbaa !5
  %366 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %365, i32 0, i32 3
  %367 = load ptr, ptr %366, align 8, !tbaa !27
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %364, ptr noundef %367)
  store i32 0, ptr %5, align 4
  store i32 1, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  br label %1315

368:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #11
  %369 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %370 = load ptr, ptr %369, align 8, !tbaa !13
  %371 = load i32, ptr %18, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %370, i64 noundef %372)
  %374 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %375 = load ptr, ptr %374, align 8, !tbaa !13
  %376 = load i32, ptr %13, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %375, i64 noundef %377)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %378, i64 16, i1 false), !tbaa.struct !21
  %379 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %380 = load double, ptr %379, align 16
  %381 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %382 = load double, ptr %381, align 8
  %383 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %373, double %380, double %382)
  %384 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %385 = getelementptr inbounds %union.anon, ptr %384, i32 0, i32 0
  %386 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 0
  %387 = extractvalue { double, double } %383, 0
  store double %387, ptr %386, align 16
  %388 = getelementptr inbounds { double, double }, ptr %385, i32 0, i32 1
  %389 = extractvalue { double, double } %383, 1
  store double %389, ptr %388, align 8
  %390 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %391 = load ptr, ptr %390, align 8, !tbaa !13
  %392 = load i32, ptr %24, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %391, i64 noundef %393)
  %395 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %396 = load ptr, ptr %395, align 8, !tbaa !13
  %397 = load i32, ptr %13, align 4, !tbaa !9
  %398 = sext i32 %397 to i64
  %399 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %396, i64 noundef %398)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %399, i64 16, i1 false), !tbaa.struct !21
  %400 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %401 = load double, ptr %400, align 16
  %402 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %403 = load double, ptr %402, align 8
  %404 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %394, double %401, double %403)
  %405 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %406 = getelementptr inbounds %union.anon, ptr %405, i32 0, i32 0
  %407 = getelementptr inbounds { double, double }, ptr %406, i32 0, i32 0
  %408 = extractvalue { double, double } %404, 0
  store double %408, ptr %407, align 16
  %409 = getelementptr inbounds { double, double }, ptr %406, i32 0, i32 1
  %410 = extractvalue { double, double } %404, 1
  store double %410, ptr %409, align 8
  %411 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %412 = load double, ptr %411, align 16
  %413 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %414 = load double, ptr %413, align 8
  %415 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %39, double %412, double %414)
  %416 = getelementptr inbounds %"class.JPH::Vec3", ptr %38, i32 0, i32 0
  %417 = getelementptr inbounds %union.anon, ptr %416, i32 0, i32 0
  %418 = getelementptr inbounds { double, double }, ptr %417, i32 0, i32 0
  %419 = extractvalue { double, double } %415, 0
  store double %419, ptr %418, align 16
  %420 = getelementptr inbounds { double, double }, ptr %417, i32 0, i32 1
  %421 = extractvalue { double, double } %415, 1
  store double %421, ptr %420, align 8
  %422 = call { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %38)
  %423 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %424 = getelementptr inbounds %union.anon, ptr %423, i32 0, i32 0
  %425 = getelementptr inbounds { double, double }, ptr %424, i32 0, i32 0
  %426 = extractvalue { double, double } %422, 0
  store double %426, ptr %425, align 16
  %427 = getelementptr inbounds { double, double }, ptr %424, i32 0, i32 1
  %428 = extractvalue { double, double } %422, 1
  store double %428, ptr %427, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #11
  %429 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %430 = load ptr, ptr %429, align 8, !tbaa !13
  %431 = load i32, ptr %13, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %430, i64 noundef %432)
  %434 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %435 = load ptr, ptr %434, align 8, !tbaa !13
  %436 = load i32, ptr %18, align 4, !tbaa !9
  %437 = sext i32 %436 to i64
  %438 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %435, i64 noundef %437)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %46, ptr align 16 %438, i64 16, i1 false), !tbaa.struct !21
  %439 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %440 = load double, ptr %439, align 16
  %441 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %442 = load double, ptr %441, align 8
  %443 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %433, double %440, double %442)
  %444 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %445 = getelementptr inbounds %union.anon, ptr %444, i32 0, i32 0
  %446 = getelementptr inbounds { double, double }, ptr %445, i32 0, i32 0
  %447 = extractvalue { double, double } %443, 0
  store double %447, ptr %446, align 16
  %448 = getelementptr inbounds { double, double }, ptr %445, i32 0, i32 1
  %449 = extractvalue { double, double } %443, 1
  store double %449, ptr %448, align 8
  %450 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %451 = load ptr, ptr %450, align 8, !tbaa !13
  %452 = load i32, ptr %24, align 4, !tbaa !9
  %453 = sext i32 %452 to i64
  %454 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %451, i64 noundef %453)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %454, i64 16, i1 false), !tbaa.struct !21
  %455 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %456 = load double, ptr %455, align 16
  %457 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %458 = load double, ptr %457, align 8
  %459 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %45, double %456, double %458)
  %460 = getelementptr inbounds %"class.JPH::Vec3", ptr %44, i32 0, i32 0
  %461 = getelementptr inbounds %union.anon, ptr %460, i32 0, i32 0
  %462 = getelementptr inbounds { double, double }, ptr %461, i32 0, i32 0
  %463 = extractvalue { double, double } %459, 0
  store double %463, ptr %462, align 16
  %464 = getelementptr inbounds { double, double }, ptr %461, i32 0, i32 1
  %465 = extractvalue { double, double } %459, 1
  store double %465, ptr %464, align 8
  %466 = call { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %44, float noundef 3.000000e+00)
  %467 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %468 = getelementptr inbounds %union.anon, ptr %467, i32 0, i32 0
  %469 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 0
  %470 = extractvalue { double, double } %466, 0
  store double %470, ptr %469, align 16
  %471 = getelementptr inbounds { double, double }, ptr %468, i32 0, i32 1
  %472 = extractvalue { double, double } %466, 1
  store double %472, ptr %471, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #11
  store i32 -1, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #11
  store float 0.000000e+00, ptr %49, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #11
  store i32 0, ptr %50, align 4, !tbaa !9
  br label %473

473:                                              ; preds = %525, %368
  %474 = load i32, ptr %50, align 4, !tbaa !9
  %475 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %476 = load ptr, ptr %475, align 8, !tbaa !13
  %477 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %476)
  %478 = trunc i64 %477 to i32
  %479 = icmp slt i32 %474, %478
  br i1 %479, label %481, label %480

480:                                              ; preds = %473
  store i32 17, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #11
  br label %528

481:                                              ; preds = %473
  %482 = load i32, ptr %50, align 4, !tbaa !9
  %483 = load i32, ptr %13, align 4, !tbaa !9
  %484 = icmp ne i32 %482, %483
  br i1 %484, label %485, label %524

485:                                              ; preds = %481
  %486 = load i32, ptr %50, align 4, !tbaa !9
  %487 = load i32, ptr %18, align 4, !tbaa !9
  %488 = icmp ne i32 %486, %487
  br i1 %488, label %489, label %524

489:                                              ; preds = %485
  %490 = load i32, ptr %50, align 4, !tbaa !9
  %491 = load i32, ptr %24, align 4, !tbaa !9
  %492 = icmp ne i32 %490, %491
  br i1 %492, label %493, label %524

493:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #11
  %494 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !13
  %496 = load i32, ptr %50, align 4, !tbaa !9
  %497 = sext i32 %496 to i64
  %498 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %495, i64 noundef %497)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 %43, i64 16, i1 false), !tbaa.struct !21
  %499 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %500 = load double, ptr %499, align 16
  %501 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %502 = load double, ptr %501, align 8
  %503 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %498, double %500, double %502)
  %504 = getelementptr inbounds %"class.JPH::Vec3", ptr %52, i32 0, i32 0
  %505 = getelementptr inbounds %union.anon, ptr %504, i32 0, i32 0
  %506 = getelementptr inbounds { double, double }, ptr %505, i32 0, i32 0
  %507 = extractvalue { double, double } %503, 0
  store double %507, ptr %506, align 16
  %508 = getelementptr inbounds { double, double }, ptr %505, i32 0, i32 1
  %509 = extractvalue { double, double } %503, 1
  store double %509, ptr %508, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %37, i64 16, i1 false), !tbaa.struct !21
  %510 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %511 = load double, ptr %510, align 16
  %512 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %513 = load double, ptr %512, align 8
  %514 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %52, double %511, double %513)
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #11
  store float %514, ptr %51, align 4, !tbaa !11
  %515 = load float, ptr %51, align 4, !tbaa !11
  %516 = call noundef float @_ZSt3absf(float noundef %515)
  %517 = load float, ptr %49, align 4, !tbaa !11
  %518 = call noundef float @_ZSt3absf(float noundef %517)
  %519 = fcmp ogt float %516, %518
  br i1 %519, label %520, label %523

520:                                              ; preds = %493
  %521 = load float, ptr %51, align 4, !tbaa !11
  store float %521, ptr %49, align 4, !tbaa !11
  %522 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %522, ptr %48, align 4, !tbaa !9
  br label %523

523:                                              ; preds = %520, %493
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  br label %524

524:                                              ; preds = %523, %489, %485, %481
  br label %525

525:                                              ; preds = %524
  %526 = load i32, ptr %50, align 4, !tbaa !9
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr %50, align 4, !tbaa !9
  br label %473, !llvm.loop !34

528:                                              ; preds = %480
  %529 = load float, ptr %49, align 4, !tbaa !11
  %530 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %529)
  %531 = load float, ptr %10, align 4, !tbaa !11
  %532 = fmul float 2.500000e+01, %531
  %533 = fcmp ole float %530, %532
  br i1 %533, label %534, label %850

534:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #11
  %535 = call { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %37)
  %536 = getelementptr inbounds %"class.JPH::Vec3", ptr %55, i32 0, i32 0
  %537 = getelementptr inbounds %union.anon, ptr %536, i32 0, i32 0
  %538 = getelementptr inbounds { double, double }, ptr %537, i32 0, i32 0
  %539 = extractvalue { double, double } %535, 0
  store double %539, ptr %538, align 16
  %540 = getelementptr inbounds { double, double }, ptr %537, i32 0, i32 1
  %541 = extractvalue { double, double } %535, 1
  store double %541, ptr %540, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %57, ptr align 16 %55, i64 16, i1 false), !tbaa.struct !21
  %542 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %543 = load double, ptr %542, align 16
  %544 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %545 = load double, ptr %544, align 8
  %546 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %37, double %543, double %545)
  %547 = getelementptr inbounds %"class.JPH::Vec3", ptr %56, i32 0, i32 0
  %548 = getelementptr inbounds %union.anon, ptr %547, i32 0, i32 0
  %549 = getelementptr inbounds { double, double }, ptr %548, i32 0, i32 0
  %550 = extractvalue { double, double } %546, 0
  store double %550, ptr %549, align 16
  %551 = getelementptr inbounds { double, double }, ptr %548, i32 0, i32 1
  %552 = extractvalue { double, double } %546, 1
  store double %552, ptr %551, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %58) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #11
  %553 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %554 = load ptr, ptr %553, align 8, !tbaa !13
  %555 = invoke noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %554)
          to label %556 unwind label %571

556:                                              ; preds = %534
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %555)
          to label %557 unwind label %571

557:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #11
  %558 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %559 = load ptr, ptr %558, align 8, !tbaa !13
  store ptr %559, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #11
  %560 = load ptr, ptr %61, align 8, !tbaa !5
  %561 = invoke noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %560)
          to label %562 unwind label %575

562:                                              ; preds = %557
  store ptr %561, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #11
  %563 = load ptr, ptr %61, align 8, !tbaa !5
  %564 = invoke noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %563)
          to label %565 unwind label %579

565:                                              ; preds = %562
  store ptr %564, ptr %63, align 8, !tbaa !5
  br label %566

566:                                              ; preds = %599, %565
  %567 = load ptr, ptr %62, align 8, !tbaa !5
  %568 = load ptr, ptr %63, align 8, !tbaa !5
  %569 = icmp ne ptr %567, %568
  br i1 %569, label %583, label %570

570:                                              ; preds = %566
  store i32 20, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  br label %618

571:                                              ; preds = %556, %534
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %59, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %60, align 4
  br label %849

575:                                              ; preds = %557
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %59, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %60, align 4
  br label %617

579:                                              ; preds = %562
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %59, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %60, align 4
  br label %616

583:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #11
  %584 = load ptr, ptr %62, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %64, ptr align 16 %584, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %66, ptr align 16 %64, i64 16, i1 false), !tbaa.struct !21
  %585 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %586 = load double, ptr %585, align 16
  %587 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %588 = load double, ptr %587, align 8
  %589 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %55, double %586, double %588)
          to label %590 unwind label %602

590:                                              ; preds = %583
  store float %589, ptr %65, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %68, ptr align 16 %64, i64 16, i1 false), !tbaa.struct !21
  %591 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %592 = load double, ptr %591, align 16
  %593 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %594 = load double, ptr %593, align 8
  %595 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %56, double %592, double %594)
          to label %596 unwind label %606

596:                                              ; preds = %590
  store float %595, ptr %67, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #11
  store float 0.000000e+00, ptr %69, align 4, !tbaa !11
  %597 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE12emplace_backIJfffEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 4 dereferenceable(4) %65, ptr noundef nonnull align 4 dereferenceable(4) %67, ptr noundef nonnull align 4 dereferenceable(4) %69)
          to label %598 unwind label %610

598:                                              ; preds = %596
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #11
  br label %599

599:                                              ; preds = %598
  %600 = load ptr, ptr %62, align 8, !tbaa !5
  %601 = getelementptr inbounds %"class.JPH::Vec3", ptr %600, i32 1
  store ptr %601, ptr %62, align 8, !tbaa !5
  br label %566

602:                                              ; preds = %583
  %603 = landingpad { ptr, i32 }
          cleanup
  %604 = extractvalue { ptr, i32 } %603, 0
  store ptr %604, ptr %59, align 8
  %605 = extractvalue { ptr, i32 } %603, 1
  store i32 %605, ptr %60, align 4
  br label %615

606:                                              ; preds = %590
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %59, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %60, align 4
  br label %614

610:                                              ; preds = %596
  %611 = landingpad { ptr, i32 }
          cleanup
  %612 = extractvalue { ptr, i32 } %611, 0
  store ptr %612, ptr %59, align 8
  %613 = extractvalue { ptr, i32 } %611, 1
  store i32 %613, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  br label %614

614:                                              ; preds = %610, %606
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #11
  br label %615

615:                                              ; preds = %614, %602
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #11
  br label %616

616:                                              ; preds = %615, %579
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  br label %617

617:                                              ; preds = %616, %575
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  br label %849

618:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 24, ptr %70) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %71) #11
  invoke void @_ZN3JPH19ConvexHullBuilder2DC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(20) %71, ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %619 unwind label %645

619:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #11
  %620 = load i32, ptr %13, align 4, !tbaa !9
  %621 = load i32, ptr %18, align 4, !tbaa !9
  %622 = load i32, ptr %24, align 4, !tbaa !9
  %623 = load i32, ptr %7, align 4, !tbaa !9
  %624 = load float, ptr %8, align 4, !tbaa !11
  %625 = invoke noundef i32 @_ZN3JPH19ConvexHullBuilder2D10InitializeEiiiifRNS_5ArrayIiNS_12STLAllocatorIiEEEE(ptr noundef nonnull align 8 dereferenceable(20) %71, i32 noundef %620, i32 noundef %621, i32 noundef %622, i32 noundef %623, float noundef %624, ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %626 unwind label %649

626:                                              ; preds = %619
  store i32 %625, ptr %72, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #11
  %627 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder10CreateFaceEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
          to label %628 unwind label %653

628:                                              ; preds = %626
  store ptr %627, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #11
  %629 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder10CreateFaceEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
          to label %630 unwind label %657

630:                                              ; preds = %628
  store ptr %629, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %75) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #11
  %631 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %632 unwind label %661

632:                                              ; preds = %630
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %75, i64 noundef %631)
          to label %633 unwind label %661

633:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #11
  store ptr %70, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #11
  %634 = load ptr, ptr %76, align 8, !tbaa !5
  %635 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %634)
          to label %636 unwind label %665

636:                                              ; preds = %633
  store ptr %635, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #11
  %637 = load ptr, ptr %76, align 8, !tbaa !5
  %638 = invoke noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %637)
          to label %639 unwind label %669

639:                                              ; preds = %636
  store ptr %638, ptr %78, align 8, !tbaa !5
  br label %640

640:                                              ; preds = %703, %639
  %641 = load ptr, ptr %77, align 8, !tbaa !5
  %642 = load ptr, ptr %78, align 8, !tbaa !5
  %643 = icmp ne ptr %641, %642
  br i1 %643, label %673, label %644

644:                                              ; preds = %640
  store i32 22, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  br label %709

645:                                              ; preds = %618
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %59, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %60, align 4
  br label %848

649:                                              ; preds = %619
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %59, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %60, align 4
  br label %847

653:                                              ; preds = %626
  %654 = landingpad { ptr, i32 }
          cleanup
  %655 = extractvalue { ptr, i32 } %654, 0
  store ptr %655, ptr %59, align 8
  %656 = extractvalue { ptr, i32 } %654, 1
  store i32 %656, ptr %60, align 4
  br label %846

657:                                              ; preds = %628
  %658 = landingpad { ptr, i32 }
          cleanup
  %659 = extractvalue { ptr, i32 } %658, 0
  store ptr %659, ptr %59, align 8
  %660 = extractvalue { ptr, i32 } %658, 1
  store i32 %660, ptr %60, align 4
  br label %845

661:                                              ; preds = %709, %632, %630
  %662 = landingpad { ptr, i32 }
          cleanup
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %59, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %60, align 4
  br label %844

665:                                              ; preds = %633
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %59, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %60, align 4
  br label %708

669:                                              ; preds = %636
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %59, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %60, align 4
  br label %707

673:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #11
  %674 = load ptr, ptr %77, align 8, !tbaa !5
  %675 = load i32, ptr %674, align 4, !tbaa !9
  store i32 %675, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #11
  %676 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder4EdgenwEm(i64 noundef 32)
          to label %677 unwind label %687

677:                                              ; preds = %673
  %678 = load ptr, ptr %73, align 8, !tbaa !5
  %679 = load i32, ptr %79, align 4, !tbaa !9
  invoke void @_ZN3JPH17ConvexHullBuilder4EdgeC2EPNS0_4FaceEi(ptr noundef nonnull align 8 dereferenceable(28) %676, ptr noundef %678, i32 noundef %679)
          to label %680 unwind label %691

680:                                              ; preds = %677
  store ptr %676, ptr %80, align 8, !tbaa !5
  %681 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %75)
          to label %682 unwind label %687

682:                                              ; preds = %680
  br i1 %681, label %683, label %695

683:                                              ; preds = %682
  %684 = load ptr, ptr %80, align 8, !tbaa !5
  %685 = load ptr, ptr %73, align 8, !tbaa !5
  %686 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %685, i32 0, i32 3
  store ptr %684, ptr %686, align 8, !tbaa !27
  br label %701

687:                                              ; preds = %701, %695, %680, %673
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %59, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %60, align 4
  br label %706

691:                                              ; preds = %677
  %692 = landingpad { ptr, i32 }
          cleanup
  %693 = extractvalue { ptr, i32 } %692, 0
  store ptr %693, ptr %59, align 8
  %694 = extractvalue { ptr, i32 } %692, 1
  store i32 %694, ptr %60, align 4
  call void @_ZN3JPH17ConvexHullBuilder4EdgedlEPv(ptr noundef %676) #11
  br label %706

695:                                              ; preds = %682
  %696 = load ptr, ptr %80, align 8, !tbaa !5
  %697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %75)
          to label %698 unwind label %687

698:                                              ; preds = %695
  %699 = load ptr, ptr %697, align 8, !tbaa !5
  %700 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %699, i32 0, i32 1
  store ptr %696, ptr %700, align 8, !tbaa !32
  br label %701

701:                                              ; preds = %698, %683
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %75, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %702 unwind label %687

702:                                              ; preds = %701
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  br label %703

703:                                              ; preds = %702
  %704 = load ptr, ptr %77, align 8, !tbaa !5
  %705 = getelementptr inbounds i32, ptr %704, i32 1
  store ptr %705, ptr %77, align 8, !tbaa !5
  br label %640

706:                                              ; preds = %691, %687
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #11
  br label %707

707:                                              ; preds = %706, %669
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  br label %708

708:                                              ; preds = %707, %665
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #11
  br label %844

709:                                              ; preds = %644
  %710 = load ptr, ptr %73, align 8, !tbaa !5
  %711 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %710, i32 0, i32 3
  %712 = load ptr, ptr %711, align 8, !tbaa !27
  %713 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %75)
          to label %714 unwind label %661

714:                                              ; preds = %709
  %715 = load ptr, ptr %713, align 8, !tbaa !5
  %716 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %715, i32 0, i32 1
  store ptr %712, ptr %716, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 24, ptr %81) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %81) #11
  %717 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %718 unwind label %728

718:                                              ; preds = %714
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %717)
          to label %719 unwind label %728

719:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #11
  %720 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %721 unwind label %732

721:                                              ; preds = %719
  %722 = trunc i64 %720 to i32
  %723 = sub nsw i32 %722, 1
  store i32 %723, ptr %82, align 4, !tbaa !9
  br label %724

724:                                              ; preds = %768, %721
  %725 = load i32, ptr %82, align 4, !tbaa !9
  %726 = icmp sge i32 %725, 0
  br i1 %726, label %736, label %727

727:                                              ; preds = %724
  store i32 24, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  br label %773

728:                                              ; preds = %817, %812, %773, %718, %714
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %59, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %60, align 4
  br label %843

732:                                              ; preds = %719
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %59, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %60, align 4
  br label %772

736:                                              ; preds = %724
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #11
  %737 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder4EdgenwEm(i64 noundef 32)
          to label %738 unwind label %752

738:                                              ; preds = %736
  %739 = load ptr, ptr %74, align 8, !tbaa !5
  %740 = load i32, ptr %82, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  %742 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %70, i64 noundef %741)
          to label %743 unwind label %756

743:                                              ; preds = %738
  %744 = load i32, ptr %742, align 4, !tbaa !9
  invoke void @_ZN3JPH17ConvexHullBuilder4EdgeC2EPNS0_4FaceEi(ptr noundef nonnull align 8 dereferenceable(28) %737, ptr noundef %739, i32 noundef %744)
          to label %745 unwind label %756

745:                                              ; preds = %743
  store ptr %737, ptr %83, align 8, !tbaa !5
  %746 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
          to label %747 unwind label %752

747:                                              ; preds = %745
  br i1 %746, label %748, label %760

748:                                              ; preds = %747
  %749 = load ptr, ptr %83, align 8, !tbaa !5
  %750 = load ptr, ptr %74, align 8, !tbaa !5
  %751 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %750, i32 0, i32 3
  store ptr %749, ptr %751, align 8, !tbaa !27
  br label %766

752:                                              ; preds = %766, %760, %745, %736
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %59, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %60, align 4
  br label %771

756:                                              ; preds = %743, %738
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %59, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %60, align 4
  call void @_ZN3JPH17ConvexHullBuilder4EdgedlEPv(ptr noundef %737) #11
  br label %771

760:                                              ; preds = %747
  %761 = load ptr, ptr %83, align 8, !tbaa !5
  %762 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
          to label %763 unwind label %752

763:                                              ; preds = %760
  %764 = load ptr, ptr %762, align 8, !tbaa !5
  %765 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %764, i32 0, i32 1
  store ptr %761, ptr %765, align 8, !tbaa !32
  br label %766

766:                                              ; preds = %763, %748
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %81, ptr noundef nonnull align 8 dereferenceable(8) %83)
          to label %767 unwind label %752

767:                                              ; preds = %766
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  br label %768

768:                                              ; preds = %767
  %769 = load i32, ptr %82, align 4, !tbaa !9
  %770 = add nsw i32 %769, -1
  store i32 %770, ptr %82, align 4, !tbaa !9
  br label %724, !llvm.loop !37

771:                                              ; preds = %756, %752
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  br label %772

772:                                              ; preds = %771, %732
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  br label %843

773:                                              ; preds = %727
  %774 = load ptr, ptr %74, align 8, !tbaa !5
  %775 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %774, i32 0, i32 3
  %776 = load ptr, ptr %775, align 8, !tbaa !27
  %777 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
          to label %778 unwind label %728

778:                                              ; preds = %773
  %779 = load ptr, ptr %777, align 8, !tbaa !5
  %780 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %779, i32 0, i32 1
  store ptr %776, ptr %780, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #11
  store i64 0, ptr %84, align 8, !tbaa !38
  br label %781

781:                                              ; preds = %809, %778
  %782 = load i64, ptr %84, align 8, !tbaa !38
  %783 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %784 unwind label %787

784:                                              ; preds = %781
  %785 = icmp ult i64 %782, %783
  br i1 %785, label %791, label %786

786:                                              ; preds = %784
  store i32 27, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #11
  br label %812

787:                                              ; preds = %806, %803, %797, %794, %791, %781
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %59, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #11
  br label %843

791:                                              ; preds = %784
  %792 = load i64, ptr %84, align 8, !tbaa !38
  %793 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %75, i64 noundef %792)
          to label %794 unwind label %787

794:                                              ; preds = %791
  %795 = load ptr, ptr %793, align 8, !tbaa !5
  %796 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %797 unwind label %787

797:                                              ; preds = %794
  %798 = mul i64 2, %796
  %799 = sub i64 %798, 2
  %800 = load i64, ptr %84, align 8, !tbaa !38
  %801 = sub i64 %799, %800
  %802 = invoke noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %803 unwind label %787

803:                                              ; preds = %797
  %804 = urem i64 %801, %802
  %805 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %804)
          to label %806 unwind label %787

806:                                              ; preds = %803
  %807 = load ptr, ptr %805, align 8, !tbaa !5
  invoke void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %795, ptr noundef %807)
          to label %808 unwind label %787

808:                                              ; preds = %806
  br label %809

809:                                              ; preds = %808
  %810 = load i64, ptr %84, align 8, !tbaa !38
  %811 = add i64 %810, 1
  store i64 %811, ptr %84, align 8, !tbaa !38
  br label %781, !llvm.loop !39

812:                                              ; preds = %786
  %813 = load ptr, ptr %73, align 8, !tbaa !5
  %814 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %815 = load ptr, ptr %814, align 8, !tbaa !13
  %816 = invoke noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %815)
          to label %817 unwind label %728

817:                                              ; preds = %812
  invoke void @_ZN3JPH17ConvexHullBuilder4Face26CalculateNormalAndCentroidEPKNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(69) %813, ptr noundef %816)
          to label %818 unwind label %728

818:                                              ; preds = %817
  call void @llvm.lifetime.start.p0(i64 16, ptr %85) #11
  %819 = load ptr, ptr %73, align 8, !tbaa !5
  %820 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %819, i32 0, i32 0
  %821 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %820)
          to label %822 unwind label %839

822:                                              ; preds = %818
  %823 = getelementptr inbounds %"class.JPH::Vec3", ptr %85, i32 0, i32 0
  %824 = getelementptr inbounds %union.anon, ptr %823, i32 0, i32 0
  %825 = getelementptr inbounds { double, double }, ptr %824, i32 0, i32 0
  %826 = extractvalue { double, double } %821, 0
  store double %826, ptr %825, align 16
  %827 = getelementptr inbounds { double, double }, ptr %824, i32 0, i32 1
  %828 = extractvalue { double, double } %821, 1
  store double %828, ptr %827, align 8
  %829 = load ptr, ptr %74, align 8, !tbaa !5
  %830 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %829, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %830, ptr align 16 %85, i64 16, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 16, ptr %85) #11
  %831 = load ptr, ptr %73, align 8, !tbaa !5
  %832 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %831, i32 0, i32 1
  %833 = load ptr, ptr %74, align 8, !tbaa !5
  %834 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %833, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %834, ptr align 16 %832, i64 16, i1 false), !tbaa.struct !21
  %835 = load i32, ptr %72, align 4, !tbaa !35
  %836 = icmp eq i32 %835, 1
  %837 = zext i1 %836 to i64
  %838 = select i1 %836, i32 1, i32 0
  store i32 %838, ptr %5, align 4
  store i32 1, ptr %34, align 4
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %81) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %81) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %71) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %71) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #11
  br label %1313

839:                                              ; preds = %818
  %840 = landingpad { ptr, i32 }
          cleanup
  %841 = extractvalue { ptr, i32 } %840, 0
  store ptr %841, ptr %59, align 8
  %842 = extractvalue { ptr, i32 } %840, 1
  store i32 %842, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %85) #11
  br label %843

843:                                              ; preds = %839, %787, %772, %728
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %81) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %81) #11
  br label %844

844:                                              ; preds = %843, %708, %661
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #11
  br label %845

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

846:                                              ; preds = %845, %653
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #11
  br label %847

847:                                              ; preds = %846, %649
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %71) #11
  br label %848

848:                                              ; preds = %847, %645
  call void @llvm.lifetime.end.p0(i64 24, ptr %71) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #11
  br label %849

849:                                              ; preds = %848, %617, %571
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #11
  br label %1314

850:                                              ; preds = %528
  %851 = load float, ptr %49, align 4, !tbaa !11
  %852 = fcmp olt float %851, 0.000000e+00
  br i1 %852, label %853, label %854

853:                                              ; preds = %850
  call void @_ZSt4swapIiENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %24) #11
  br label %854

854:                                              ; preds = %853, %850
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #11
  %855 = load i32, ptr %13, align 4, !tbaa !9
  %856 = load i32, ptr %18, align 4, !tbaa !9
  %857 = load i32, ptr %48, align 4, !tbaa !9
  %858 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %855, i32 noundef %856, i32 noundef %857)
  store ptr %858, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #11
  %859 = load i32, ptr %18, align 4, !tbaa !9
  %860 = load i32, ptr %24, align 4, !tbaa !9
  %861 = load i32, ptr %48, align 4, !tbaa !9
  %862 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %859, i32 noundef %860, i32 noundef %861)
  store ptr %862, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #11
  %863 = load i32, ptr %24, align 4, !tbaa !9
  %864 = load i32, ptr %13, align 4, !tbaa !9
  %865 = load i32, ptr %48, align 4, !tbaa !9
  %866 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %863, i32 noundef %864, i32 noundef %865)
  store ptr %866, ptr %88, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #11
  %867 = load i32, ptr %13, align 4, !tbaa !9
  %868 = load i32, ptr %24, align 4, !tbaa !9
  %869 = load i32, ptr %18, align 4, !tbaa !9
  %870 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %867, i32 noundef %868, i32 noundef %869)
  store ptr %870, ptr %89, align 8, !tbaa !5
  %871 = load ptr, ptr %86, align 8, !tbaa !5
  %872 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %871, i32 0, i32 3
  %873 = load ptr, ptr %872, align 8, !tbaa !27
  %874 = load ptr, ptr %89, align 8, !tbaa !5
  %875 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %874, i32 0, i32 3
  %876 = load ptr, ptr %875, align 8, !tbaa !27
  %877 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %876, i32 0, i32 1
  %878 = load ptr, ptr %877, align 8, !tbaa !32
  %879 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %878, i32 0, i32 1
  %880 = load ptr, ptr %879, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %873, ptr noundef %880)
  %881 = load ptr, ptr %86, align 8, !tbaa !5
  %882 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %881, i32 0, i32 3
  %883 = load ptr, ptr %882, align 8, !tbaa !27
  %884 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %883, i32 0, i32 1
  %885 = load ptr, ptr %884, align 8, !tbaa !32
  %886 = load ptr, ptr %87, align 8, !tbaa !5
  %887 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %886, i32 0, i32 3
  %888 = load ptr, ptr %887, align 8, !tbaa !27
  %889 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %888, i32 0, i32 1
  %890 = load ptr, ptr %889, align 8, !tbaa !32
  %891 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %890, i32 0, i32 1
  %892 = load ptr, ptr %891, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %885, ptr noundef %892)
  %893 = load ptr, ptr %86, align 8, !tbaa !5
  %894 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %893, i32 0, i32 3
  %895 = load ptr, ptr %894, align 8, !tbaa !27
  %896 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %895, i32 0, i32 1
  %897 = load ptr, ptr %896, align 8, !tbaa !32
  %898 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %897, i32 0, i32 1
  %899 = load ptr, ptr %898, align 8, !tbaa !32
  %900 = load ptr, ptr %88, align 8, !tbaa !5
  %901 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %900, i32 0, i32 3
  %902 = load ptr, ptr %901, align 8, !tbaa !27
  %903 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %902, i32 0, i32 1
  %904 = load ptr, ptr %903, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %899, ptr noundef %904)
  %905 = load ptr, ptr %87, align 8, !tbaa !5
  %906 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %905, i32 0, i32 3
  %907 = load ptr, ptr %906, align 8, !tbaa !27
  %908 = load ptr, ptr %89, align 8, !tbaa !5
  %909 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %908, i32 0, i32 3
  %910 = load ptr, ptr %909, align 8, !tbaa !27
  %911 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %910, i32 0, i32 1
  %912 = load ptr, ptr %911, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %907, ptr noundef %912)
  %913 = load ptr, ptr %87, align 8, !tbaa !5
  %914 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %913, i32 0, i32 3
  %915 = load ptr, ptr %914, align 8, !tbaa !27
  %916 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %915, i32 0, i32 1
  %917 = load ptr, ptr %916, align 8, !tbaa !32
  %918 = load ptr, ptr %88, align 8, !tbaa !5
  %919 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %918, i32 0, i32 3
  %920 = load ptr, ptr %919, align 8, !tbaa !27
  %921 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %920, i32 0, i32 1
  %922 = load ptr, ptr %921, align 8, !tbaa !32
  %923 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Edge", ptr %922, i32 0, i32 1
  %924 = load ptr, ptr %923, align 8, !tbaa !32
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %917, ptr noundef %924)
  %925 = load ptr, ptr %88, align 8, !tbaa !5
  %926 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %925, i32 0, i32 3
  %927 = load ptr, ptr %926, align 8, !tbaa !27
  %928 = load ptr, ptr %89, align 8, !tbaa !5
  %929 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %928, i32 0, i32 3
  %930 = load ptr, ptr %929, align 8, !tbaa !27
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %927, ptr noundef %930)
  call void @llvm.lifetime.start.p0(i64 24, ptr %90) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #11
  %931 = load ptr, ptr %86, align 8, !tbaa !5
  store ptr %931, ptr %92, align 8, !tbaa !5
  %932 = getelementptr inbounds ptr, ptr %92, i64 1
  %933 = load ptr, ptr %87, align 8, !tbaa !5
  store ptr %933, ptr %932, align 8, !tbaa !5
  %934 = getelementptr inbounds ptr, ptr %92, i64 2
  %935 = load ptr, ptr %88, align 8, !tbaa !5
  store ptr %935, ptr %934, align 8, !tbaa !5
  %936 = getelementptr inbounds ptr, ptr %92, i64 3
  %937 = load ptr, ptr %89, align 8, !tbaa !5
  store ptr %937, ptr %936, align 8, !tbaa !5
  %938 = getelementptr inbounds %"class.std::initializer_list", ptr %91, i32 0, i32 0
  store ptr %92, ptr %938, align 8, !tbaa !40
  %939 = getelementptr inbounds %"class.std::initializer_list", ptr %91, i32 0, i32 1
  store i64 4, ptr %939, align 8, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 1, ptr %93) #11
  %940 = getelementptr inbounds { ptr, i64 }, ptr %91, i32 0, i32 0
  %941 = load ptr, ptr %940, align 8
  %942 = getelementptr inbounds { ptr, i64 }, ptr %91, i32 0, i32 1
  %943 = load i64, ptr %942, align 8
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEC2ESt16initializer_listIS3_ERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %90, ptr %941, i64 %943, ptr noundef nonnull align 1 dereferenceable(1) %93)
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #11
  store i32 0, ptr %94, align 4, !tbaa !9
  br label %944

944:                                              ; preds = %979, %854
  %945 = load i32, ptr %94, align 4, !tbaa !9
  %946 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %947 = load ptr, ptr %946, align 8, !tbaa !13
  %948 = invoke noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %947)
          to label %949 unwind label %953

949:                                              ; preds = %944
  %950 = trunc i64 %948 to i32
  %951 = icmp slt i32 %945, %950
  br i1 %951, label %957, label %952

952:                                              ; preds = %949
  store i32 30, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #11
  br label %982

953:                                              ; preds = %973, %944
  %954 = landingpad { ptr, i32 }
          cleanup
  %955 = extractvalue { ptr, i32 } %954, 0
  store ptr %955, ptr %59, align 8
  %956 = extractvalue { ptr, i32 } %954, 1
  store i32 %956, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #11
  br label %1312

957:                                              ; preds = %949
  %958 = load i32, ptr %94, align 4, !tbaa !9
  %959 = load i32, ptr %13, align 4, !tbaa !9
  %960 = icmp ne i32 %958, %959
  br i1 %960, label %961, label %978

961:                                              ; preds = %957
  %962 = load i32, ptr %94, align 4, !tbaa !9
  %963 = load i32, ptr %18, align 4, !tbaa !9
  %964 = icmp ne i32 %962, %963
  br i1 %964, label %965, label %978

965:                                              ; preds = %961
  %966 = load i32, ptr %94, align 4, !tbaa !9
  %967 = load i32, ptr %24, align 4, !tbaa !9
  %968 = icmp ne i32 %966, %967
  br i1 %968, label %969, label %978

969:                                              ; preds = %965
  %970 = load i32, ptr %94, align 4, !tbaa !9
  %971 = load i32, ptr %48, align 4, !tbaa !9
  %972 = icmp ne i32 %970, %971
  br i1 %972, label %973, label %978

973:                                              ; preds = %969
  %974 = load i32, ptr %94, align 4, !tbaa !9
  %975 = load float, ptr %11, align 4, !tbaa !11
  %976 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %974, ptr noundef nonnull align 8 dereferenceable(24) %90, float noundef %975)
          to label %977 unwind label %953

977:                                              ; preds = %973
  br label %978

978:                                              ; preds = %977, %969, %965, %961, %957
  br label %979

979:                                              ; preds = %978
  %980 = load i32, ptr %94, align 4, !tbaa !9
  %981 = add nsw i32 %980, 1
  store i32 %981, ptr %94, align 4, !tbaa !9
  br label %944, !llvm.loop !43

982:                                              ; preds = %952
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #11
  store i32 4, ptr %95, align 4, !tbaa !9
  br label %983

983:                                              ; preds = %1294, %1292, %982
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #11
  store ptr null, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #11
  store float 0.000000e+00, ptr %97, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #11
  %984 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 1
  store ptr %984, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #11
  %985 = load ptr, ptr %98, align 8, !tbaa !5
  %986 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %985)
          to label %987 unwind label %996

987:                                              ; preds = %983
  store ptr %986, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #11
  %988 = load ptr, ptr %98, align 8, !tbaa !5
  %989 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %988)
          to label %990 unwind label %1000

990:                                              ; preds = %987
  store ptr %989, ptr %100, align 8, !tbaa !5
  br label %991

991:                                              ; preds = %1018, %990
  %992 = load ptr, ptr %99, align 8, !tbaa !5
  %993 = load ptr, ptr %100, align 8, !tbaa !5
  %994 = icmp ne ptr %992, %993
  br i1 %994, label %1004, label %995

995:                                              ; preds = %991
  store i32 35, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #11
  br label %1022

996:                                              ; preds = %983
  %997 = landingpad { ptr, i32 }
          cleanup
  %998 = extractvalue { ptr, i32 } %997, 0
  store ptr %998, ptr %59, align 8
  %999 = extractvalue { ptr, i32 } %997, 1
  store i32 %999, ptr %60, align 4
  br label %1021

1000:                                             ; preds = %987
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %59, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #11
  br label %1021

1004:                                             ; preds = %991
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #11
  %1005 = load ptr, ptr %99, align 8, !tbaa !5
  %1006 = load ptr, ptr %1005, align 8, !tbaa !5
  store ptr %1006, ptr %101, align 8, !tbaa !5
  %1007 = load ptr, ptr %101, align 8, !tbaa !5
  %1008 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1007, i32 0, i32 4
  %1009 = load float, ptr %1008, align 16, !tbaa !44
  %1010 = load float, ptr %97, align 4, !tbaa !11
  %1011 = fcmp ogt float %1009, %1010
  br i1 %1011, label %1012, label %1017

1012:                                             ; preds = %1004
  %1013 = load ptr, ptr %101, align 8, !tbaa !5
  %1014 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1013, i32 0, i32 4
  %1015 = load float, ptr %1014, align 16, !tbaa !44
  store float %1015, ptr %97, align 4, !tbaa !11
  %1016 = load ptr, ptr %101, align 8, !tbaa !5
  store ptr %1016, ptr %96, align 8, !tbaa !5
  br label %1017

1017:                                             ; preds = %1012, %1004
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #11
  br label %1018

1018:                                             ; preds = %1017
  %1019 = load ptr, ptr %99, align 8, !tbaa !5
  %1020 = getelementptr inbounds ptr, ptr %1019, i32 1
  store ptr %1020, ptr %99, align 8, !tbaa !5
  br label %991

1021:                                             ; preds = %1000, %996
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #11
  br label %1297

1022:                                             ; preds = %995
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #11
  %1023 = load ptr, ptr %96, align 8, !tbaa !5
  %1024 = icmp ne ptr %1023, null
  br i1 %1024, label %1025, label %1038

1025:                                             ; preds = %1022
  %1026 = load ptr, ptr %96, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1026, i32 0, i32 2
  %1028 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %1027)
          to label %1029 unwind label %1034

1029:                                             ; preds = %1025
  %1030 = load i32, ptr %1028, align 4, !tbaa !9
  store i32 %1030, ptr %102, align 4, !tbaa !9
  %1031 = load ptr, ptr %96, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1031, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %1032)
          to label %1033 unwind label %1034

1033:                                             ; preds = %1029
  br label %1195

1034:                                             ; preds = %1199, %1038, %1029, %1025
  %1035 = landingpad { ptr, i32 }
          cleanup
  %1036 = extractvalue { ptr, i32 } %1035, 0
  store ptr %1036, ptr %59, align 8
  %1037 = extractvalue { ptr, i32 } %1035, 1
  store i32 %1037, ptr %60, align 4
  br label %1296

1038:                                             ; preds = %1022
  %1039 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1040 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1039)
          to label %1041 unwind label %1034

1041:                                             ; preds = %1038
  br i1 %1040, label %1193, label %1042

1042:                                             ; preds = %1041
  call void @llvm.lifetime.start.p0(i64 24, ptr %103) #11
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %103) #11
  %1043 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4swapERS5_(ptr noundef nonnull align 8 dereferenceable(24) %1043, ptr noundef nonnull align 8 dereferenceable(24) %103) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %104) #11
  store i8 0, ptr %104, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #11
  store ptr %103, ptr %105, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #11
  %1044 = load ptr, ptr %105, align 8, !tbaa !5
  %1045 = invoke noundef ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1044)
          to label %1046 unwind label %1055

1046:                                             ; preds = %1042
  store ptr %1045, ptr %106, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #11
  %1047 = load ptr, ptr %105, align 8, !tbaa !5
  %1048 = invoke noundef ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1047)
          to label %1049 unwind label %1059

1049:                                             ; preds = %1046
  store ptr %1048, ptr %107, align 8, !tbaa !5
  br label %1050

1050:                                             ; preds = %1079, %1049
  %1051 = load ptr, ptr %106, align 8, !tbaa !5
  %1052 = load ptr, ptr %107, align 8, !tbaa !5
  %1053 = icmp ne ptr %1051, %1052
  br i1 %1053, label %1063, label %1054

1054:                                             ; preds = %1050
  store i32 37, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #11
  br label %1088

1055:                                             ; preds = %1042
  %1056 = landingpad { ptr, i32 }
          cleanup
  %1057 = extractvalue { ptr, i32 } %1056, 0
  store ptr %1057, ptr %59, align 8
  %1058 = extractvalue { ptr, i32 } %1056, 1
  store i32 %1058, ptr %60, align 4
  br label %1087

1059:                                             ; preds = %1046
  %1060 = landingpad { ptr, i32 }
          cleanup
  %1061 = extractvalue { ptr, i32 } %1060, 0
  store ptr %1061, ptr %59, align 8
  %1062 = extractvalue { ptr, i32 } %1060, 1
  store i32 %1062, ptr %60, align 4
  br label %1086

1063:                                             ; preds = %1050
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #11
  %1064 = load ptr, ptr %106, align 8, !tbaa !5
  store ptr %1064, ptr %108, align 8, !tbaa !5
  %1065 = load ptr, ptr %108, align 8, !tbaa !5
  %1066 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1065, i32 0, i32 0
  %1067 = load i32, ptr %1066, align 4, !tbaa !46
  %1068 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 1
  %1069 = load float, ptr %11, align 4, !tbaa !11
  %1070 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %1067, ptr noundef nonnull align 8 dereferenceable(24) %1068, float noundef %1069)
          to label %1071 unwind label %1082

1071:                                             ; preds = %1063
  %1072 = zext i1 %1070 to i32
  %1073 = load i8, ptr %104, align 1, !tbaa !45, !range !48, !noundef !49
  %1074 = trunc i8 %1073 to i1
  %1075 = zext i1 %1074 to i32
  %1076 = or i32 %1075, %1072
  %1077 = icmp ne i32 %1076, 0
  %1078 = zext i1 %1077 to i8
  store i8 %1078, ptr %104, align 1, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #11
  br label %1079

1079:                                             ; preds = %1071
  %1080 = load ptr, ptr %106, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1080, i32 1
  store ptr %1081, ptr %106, align 8, !tbaa !5
  br label %1050

1082:                                             ; preds = %1063
  %1083 = landingpad { ptr, i32 }
          cleanup
  %1084 = extractvalue { ptr, i32 } %1083, 0
  store ptr %1084, ptr %59, align 8
  %1085 = extractvalue { ptr, i32 } %1083, 1
  store i32 %1085, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #11
  br label %1086

1086:                                             ; preds = %1082, %1059
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #11
  br label %1087

1087:                                             ; preds = %1086, %1055
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #11
  br label %1192

1088:                                             ; preds = %1054
  %1089 = load i8, ptr %104, align 1, !tbaa !45, !range !48, !noundef !49
  %1090 = trunc i8 %1089 to i1
  br i1 %1090, label %1091, label %1092

1091:                                             ; preds = %1088
  store i32 34, ptr %34, align 4
  br label %1189, !llvm.loop !50

1092:                                             ; preds = %1088
  %1093 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1094 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1093)
          to label %1095 unwind label %1097

1095:                                             ; preds = %1092
  br i1 %1094, label %1096, label %1101

1096:                                             ; preds = %1095
  store i32 33, ptr %34, align 4
  br label %1189

1097:                                             ; preds = %1174, %1092
  %1098 = landingpad { ptr, i32 }
          cleanup
  %1099 = extractvalue { ptr, i32 } %1098, 0
  store ptr %1099, ptr %59, align 8
  %1100 = extractvalue { ptr, i32 } %1098, 1
  store i32 %1100, ptr %60, align 4
  br label %1192

1101:                                             ; preds = %1095
  br label %1102

1102:                                             ; preds = %1181, %1101
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #11
  store i64 0, ptr %109, align 8, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #11
  %1103 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1104 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1103)
          to label %1105 unwind label %1115

1105:                                             ; preds = %1102
  %1106 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1104, i32 0, i32 1
  %1107 = load float, ptr %1106, align 4, !tbaa !51
  store float %1107, ptr %110, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #11
  store i64 1, ptr %111, align 8, !tbaa !38
  br label %1108

1108:                                             ; preds = %1143, %1105
  %1109 = load i64, ptr %111, align 8, !tbaa !38
  %1110 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1111 = invoke noundef i64 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1110)
          to label %1112 unwind label %1119

1112:                                             ; preds = %1108
  %1113 = icmp ult i64 %1109, %1111
  br i1 %1113, label %1123, label %1114

1114:                                             ; preds = %1112
  store i32 41, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  br label %1147

1115:                                             ; preds = %1167, %1161, %1157, %1154, %1151, %1147, %1102
  %1116 = landingpad { ptr, i32 }
          cleanup
  %1117 = extractvalue { ptr, i32 } %1116, 0
  store ptr %1117, ptr %59, align 8
  %1118 = extractvalue { ptr, i32 } %1116, 1
  store i32 %1118, ptr %60, align 4
  br label %1187

1119:                                             ; preds = %1108
  %1120 = landingpad { ptr, i32 }
          cleanup
  %1121 = extractvalue { ptr, i32 } %1120, 0
  store ptr %1121, ptr %59, align 8
  %1122 = extractvalue { ptr, i32 } %1120, 1
  store i32 %1122, ptr %60, align 4
  br label %1146

1123:                                             ; preds = %1112
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #11
  %1124 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1125 = load i64, ptr %111, align 8, !tbaa !38
  %1126 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1124, i64 noundef %1125)
          to label %1127 unwind label %1138

1127:                                             ; preds = %1123
  store ptr %1126, ptr %112, align 8, !tbaa !5
  %1128 = load ptr, ptr %112, align 8, !tbaa !5
  %1129 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1128, i32 0, i32 1
  %1130 = load float, ptr %1129, align 4, !tbaa !51
  %1131 = load float, ptr %110, align 4, !tbaa !11
  %1132 = fcmp ogt float %1130, %1131
  br i1 %1132, label %1133, label %1142

1133:                                             ; preds = %1127
  %1134 = load i64, ptr %111, align 8, !tbaa !38
  store i64 %1134, ptr %109, align 8, !tbaa !38
  %1135 = load ptr, ptr %112, align 8, !tbaa !5
  %1136 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1135, i32 0, i32 1
  %1137 = load float, ptr %1136, align 4, !tbaa !51
  store float %1137, ptr %110, align 4, !tbaa !11
  br label %1142

1138:                                             ; preds = %1123
  %1139 = landingpad { ptr, i32 }
          cleanup
  %1140 = extractvalue { ptr, i32 } %1139, 0
  store ptr %1140, ptr %59, align 8
  %1141 = extractvalue { ptr, i32 } %1139, 1
  store i32 %1141, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1146

1142:                                             ; preds = %1133, %1127
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1143

1143:                                             ; preds = %1142
  %1144 = load i64, ptr %111, align 8, !tbaa !38
  %1145 = add i64 %1144, 1
  store i64 %1145, ptr %111, align 8, !tbaa !38
  br label %1108, !llvm.loop !52

1146:                                             ; preds = %1138, %1119
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  br label %1187

1147:                                             ; preds = %1114
  %1148 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1149 = load i64, ptr %109, align 8, !tbaa !38
  %1150 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1148, i64 noundef %1149)
          to label %1151 unwind label %1115

1151:                                             ; preds = %1147
  %1152 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1153 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %1152)
          to label %1154 unwind label %1115

1154:                                             ; preds = %1151
  call void @_ZSt4swapIN3JPH17ConvexHullBuilder8CoplanarEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SF_(ptr noundef nonnull align 4 dereferenceable(8) %1150, ptr noundef nonnull align 4 dereferenceable(8) %1153) #11
  %1155 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1156 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %1155)
          to label %1157 unwind label %1115

1157:                                             ; preds = %1154
  %1158 = getelementptr inbounds %"struct.JPH::ConvexHullBuilder::Coplanar", ptr %1156, i32 0, i32 0
  %1159 = load i32, ptr %1158, align 4, !tbaa !46
  store i32 %1159, ptr %102, align 4, !tbaa !9
  %1160 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %1160)
          to label %1161 unwind label %1115

1161:                                             ; preds = %1157
  %1162 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 0
  %1163 = load ptr, ptr %1162, align 8, !tbaa !13
  %1164 = load i32, ptr %102, align 4, !tbaa !9
  %1165 = sext i32 %1164 to i64
  %1166 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1163, i64 noundef %1165)
          to label %1167 unwind label %1115

1167:                                             ; preds = %1161
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %113, ptr align 16 %1166, i64 16, i1 false), !tbaa.struct !21
  %1168 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 1
  %1169 = getelementptr inbounds { double, double }, ptr %113, i32 0, i32 0
  %1170 = load double, ptr %1169, align 16
  %1171 = getelementptr inbounds { double, double }, ptr %113, i32 0, i32 1
  %1172 = load double, ptr %1171, align 8
  invoke void @_ZNK3JPH17ConvexHullBuilder15GetFaceForPointENS_4Vec3ERKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS4_EEEERS4_Rf(ptr noundef nonnull align 8 dereferenceable(56) %123, double %1170, double %1172, ptr noundef nonnull align 8 dereferenceable(24) %1168, ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull align 4 dereferenceable(4) %110)
          to label %1173 unwind label %1115

1173:                                             ; preds = %1167
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #11
  br label %1174

1174:                                             ; preds = %1173
  %1175 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 2
  %1176 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1175)
          to label %1177 unwind label %1097

1177:                                             ; preds = %1174
  br i1 %1176, label %1181, label %1178

1178:                                             ; preds = %1177
  %1179 = load ptr, ptr %96, align 8, !tbaa !5
  %1180 = icmp eq ptr %1179, null
  br label %1181

1181:                                             ; preds = %1178, %1177
  %1182 = phi i1 [ false, %1177 ], [ %1180, %1178 ]
  br i1 %1182, label %1102, label %1183, !llvm.loop !53

1183:                                             ; preds = %1181
  %1184 = load ptr, ptr %96, align 8, !tbaa !5
  %1185 = icmp eq ptr %1184, null
  br i1 %1185, label %1186, label %1188

1186:                                             ; preds = %1183
  store i32 33, ptr %34, align 4
  br label %1189

1187:                                             ; preds = %1146, %1115
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #11
  br label %1192

1188:                                             ; preds = %1183
  store i32 0, ptr %34, align 4
  br label %1189

1189:                                             ; preds = %1188, %1186, %1096, %1091
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #11
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %103) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %103) #11
  %1190 = load i32, ptr %34, align 4
  switch i32 %1190, label %1292 [
    i32 0, label %1191
  ]

1191:                                             ; preds = %1189
  br label %1194

1192:                                             ; preds = %1187, %1097, %1087
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #11
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %103) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %103) #11
  br label %1296

1193:                                             ; preds = %1041
  store i32 33, ptr %34, align 4
  br label %1292

1194:                                             ; preds = %1191
  br label %1195

1195:                                             ; preds = %1194, %1033
  %1196 = load i32, ptr %95, align 4, !tbaa !9
  %1197 = load i32, ptr %7, align 4, !tbaa !9
  %1198 = icmp sge i32 %1196, %1197
  br i1 %1198, label %1199, label %1207

1199:                                             ; preds = %1195
  %1200 = invoke noundef i32 @_ZNK3JPH17ConvexHullBuilder18GetNumVerticesUsedEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
          to label %1201 unwind label %1034

1201:                                             ; preds = %1199
  store i32 %1200, ptr %95, align 4, !tbaa !9
  %1202 = load i32, ptr %95, align 4, !tbaa !9
  %1203 = load i32, ptr %7, align 4, !tbaa !9
  %1204 = icmp sge i32 %1202, %1203
  br i1 %1204, label %1205, label %1206

1205:                                             ; preds = %1201
  store i32 1, ptr %5, align 4
  store i32 1, ptr %34, align 4
  br label %1292

1206:                                             ; preds = %1201
  br label %1207

1207:                                             ; preds = %1206, %1195
  %1208 = load i32, ptr %95, align 4, !tbaa !9
  %1209 = add nsw i32 %1208, 1
  store i32 %1209, ptr %95, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %114) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %114) #11
  %1210 = load ptr, ptr %96, align 8, !tbaa !5
  %1211 = load i32, ptr %102, align 4, !tbaa !9
  %1212 = load float, ptr %10, align 4, !tbaa !11
  invoke void @_ZN3JPH17ConvexHullBuilder8AddPointEPNS0_4FaceEifRNS_5ArrayIS2_NS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56) %123, ptr noundef %1210, i32 noundef %1211, float noundef %1212, ptr noundef nonnull align 8 dereferenceable(24) %114)
          to label %1213 unwind label %1226

1213:                                             ; preds = %1207
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #11
  %1214 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 1
  store ptr %1214, ptr %115, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #11
  %1215 = load ptr, ptr %115, align 8, !tbaa !5
  %1216 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1215)
          to label %1217 unwind label %1230

1217:                                             ; preds = %1213
  store ptr %1216, ptr %116, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #11
  %1218 = load ptr, ptr %115, align 8, !tbaa !5
  %1219 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1218)
          to label %1220 unwind label %1234

1220:                                             ; preds = %1217
  store ptr %1219, ptr %117, align 8, !tbaa !5
  br label %1221

1221:                                             ; preds = %1285, %1220
  %1222 = load ptr, ptr %116, align 8, !tbaa !5
  %1223 = load ptr, ptr %117, align 8, !tbaa !5
  %1224 = icmp ne ptr %1222, %1223
  br i1 %1224, label %1238, label %1225

1225:                                             ; preds = %1221
  store i32 44, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  br label %1290

1226:                                             ; preds = %1290, %1207
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %59, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %60, align 4
  br label %1295

1230:                                             ; preds = %1213
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %59, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %60, align 4
  br label %1289

1234:                                             ; preds = %1217
  %1235 = landingpad { ptr, i32 }
          cleanup
  %1236 = extractvalue { ptr, i32 } %1235, 0
  store ptr %1236, ptr %59, align 8
  %1237 = extractvalue { ptr, i32 } %1235, 1
  store i32 %1237, ptr %60, align 4
  br label %1288

1238:                                             ; preds = %1221
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #11
  %1239 = load ptr, ptr %116, align 8, !tbaa !5
  %1240 = load ptr, ptr %1239, align 8, !tbaa !5
  store ptr %1240, ptr %118, align 8, !tbaa !5
  %1241 = load ptr, ptr %118, align 8, !tbaa !5
  %1242 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1241, i32 0, i32 5
  %1243 = load i8, ptr %1242, align 4, !tbaa !54, !range !48, !noundef !49
  %1244 = trunc i8 %1243 to i1
  br i1 %1244, label %1245, label %1284

1245:                                             ; preds = %1238
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #11
  %1246 = load ptr, ptr %118, align 8, !tbaa !5
  %1247 = getelementptr inbounds %"class.JPH::ConvexHullBuilder::Face", ptr %1246, i32 0, i32 2
  store ptr %1247, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #11
  %1248 = load ptr, ptr %119, align 8, !tbaa !5
  %1249 = invoke noundef ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1248)
          to label %1250 unwind label %1259

1250:                                             ; preds = %1245
  store ptr %1249, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #11
  %1251 = load ptr, ptr %119, align 8, !tbaa !5
  %1252 = invoke noundef ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1251)
          to label %1253 unwind label %1263

1253:                                             ; preds = %1250
  store ptr %1252, ptr %121, align 8, !tbaa !5
  br label %1254

1254:                                             ; preds = %1274, %1253
  %1255 = load ptr, ptr %120, align 8, !tbaa !5
  %1256 = load ptr, ptr %121, align 8, !tbaa !5
  %1257 = icmp ne ptr %1255, %1256
  br i1 %1257, label %1267, label %1258

1258:                                             ; preds = %1254
  store i32 46, ptr %34, align 4
  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 %1283

1259:                                             ; preds = %1245
  %1260 = landingpad { ptr, i32 }
          cleanup
  %1261 = extractvalue { ptr, i32 } %1260, 0
  store ptr %1261, ptr %59, align 8
  %1262 = extractvalue { ptr, i32 } %1260, 1
  store i32 %1262, ptr %60, align 4
  br label %1282

1263:                                             ; preds = %1250
  %1264 = landingpad { ptr, i32 }
          cleanup
  %1265 = extractvalue { ptr, i32 } %1264, 0
  store ptr %1265, ptr %59, align 8
  %1266 = extractvalue { ptr, i32 } %1264, 1
  store i32 %1266, ptr %60, align 4
  br label %1281

1267:                                             ; preds = %1254
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #11
  %1268 = load ptr, ptr %120, align 8, !tbaa !5
  %1269 = load i32, ptr %1268, align 4, !tbaa !9
  store i32 %1269, ptr %122, align 4, !tbaa !9
  %1270 = load i32, ptr %122, align 4, !tbaa !9
  %1271 = load float, ptr %11, align 4, !tbaa !11
  %1272 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %123, i32 noundef %1270, ptr noundef nonnull align 8 dereferenceable(24) %114, float noundef %1271)
          to label %1273 unwind label %1277

1273:                                             ; preds = %1267
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #11
  br label %1274

1274:                                             ; preds = %1273
  %1275 = load ptr, ptr %120, align 8, !tbaa !5
  %1276 = getelementptr inbounds i32, ptr %1275, i32 1
  store ptr %1276, ptr %120, align 8, !tbaa !5
  br label %1254

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

1281:                                             ; preds = %1277, %1263
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #11
  br label %1282

1282:                                             ; preds = %1281, %1259
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #11
  br label %1288

1283:                                             ; preds = %1258
  br label %1284

1284:                                             ; preds = %1283, %1238
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #11
  br label %1285

1285:                                             ; preds = %1284
  %1286 = load ptr, ptr %116, align 8, !tbaa !5
  %1287 = getelementptr inbounds ptr, ptr %1286, i32 1
  store ptr %1287, ptr %116, align 8, !tbaa !5
  br label %1221

1288:                                             ; preds = %1282, %1234
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  br label %1289

1289:                                             ; preds = %1288, %1230
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #11
  br label %1295

1290:                                             ; preds = %1225
  invoke void @_ZN3JPH17ConvexHullBuilder19GarbageCollectFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %123)
          to label %1291 unwind label %1226

1291:                                             ; preds = %1290
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %114) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %114) #11
  store i32 0, ptr %34, align 4
  br label %1292

1292:                                             ; preds = %1291, %1205, %1193, %1189
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #11
  %1293 = load i32, ptr %34, align 4
  switch i32 %1293, label %1310 [
    i32 0, label %1294
    i32 34, label %983
    i32 33, label %1298
  ]

1294:                                             ; preds = %1292
  br label %983, !llvm.loop !50

1295:                                             ; preds = %1289, %1226
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %114) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %114) #11
  br label %1296

1296:                                             ; preds = %1295, %1192, %1034
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #11
  br label %1297

1297:                                             ; preds = %1296, %1021
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #11
  br label %1311

1298:                                             ; preds = %1292
  %1299 = getelementptr inbounds %"class.JPH::ConvexHullBuilder", ptr %123, i32 0, i32 1
  %1300 = invoke noundef i64 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1299)
          to label %1301 unwind label %1305

1301:                                             ; preds = %1298
  %1302 = icmp ult i64 %1300, 2
  br i1 %1302, label %1303, label %1309

1303:                                             ; preds = %1301
  %1304 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr @.str.8, ptr %1304, align 8, !tbaa !5
  store i32 3, ptr %5, align 4
  store i32 1, ptr %34, align 4
  br label %1310

1305:                                             ; preds = %1298
  %1306 = landingpad { ptr, i32 }
          cleanup
  %1307 = extractvalue { ptr, i32 } %1306, 0
  store ptr %1307, ptr %59, align 8
  %1308 = extractvalue { ptr, i32 } %1306, 1
  store i32 %1308, ptr %60, align 4
  br label %1311

1309:                                             ; preds = %1301
  store i32 0, ptr %5, align 4
  store i32 1, ptr %34, align 4
  br label %1310

1310:                                             ; preds = %1309, %1303, %1292
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #11
  br label %1313

1311:                                             ; preds = %1305, %1297
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #11
  br label %1312

1312:                                             ; preds = %1311, %953
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #11
  br label %1314

1313:                                             ; preds = %1310, %822
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  br label %1315

1314:                                             ; preds = %1312, %849
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  br label %1318

1315:                                             ; preds = %1313, %329, %322
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  br label %1316

1316:                                             ; preds = %1315, %128
  %1317 = load i32, ptr %5, align 4
  ret i32 %1317

1318:                                             ; preds = %1314
  %1319 = load ptr, ptr %59, align 8
  %1320 = load i32, ptr %60, align 4
  %1321 = insertvalue { ptr, i32 } poison, ptr %1319, 0
  %1322 = insertvalue { ptr, i32 } %1321, i32 %1320, 1
  resume { ptr, i32 } %1322
}

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

; 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 uwtable
declare dso_local noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef, ptr noundef) #3 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE12emplace_backIJfffEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #6 align 2

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

declare void @_ZN3JPH19ConvexHullBuilder2DC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #9

declare noundef i32 @_ZN3JPH19ConvexHullBuilder2D10InitializeEiiiifRNS_5ArrayIiNS_12STLAllocatorIiEEEE(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef, ptr noundef nonnull align 8 dereferenceable(24)) #9

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder8AddPointEPNS0_4FaceEifRNS_5ArrayIS2_NS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef, i32 noundef, float noundef, ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { "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 #10 = { nounwind "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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSN3JPH17ConvexHullBuilderE", !6, i64 0, !15, i64 8, !17, i64 32}
!15 = !{!"_ZTSN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{i64 2157044375}
!21 = !{i64 0, i64 16, !22}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !19}
!24 = !{i64 2157044689}
!25 = distinct !{!25, !19}
!26 = !{i64 2157045003}
!27 = !{!28, !6, i64 56}
!28 = !{!"_ZTSN3JPH17ConvexHullBuilder4FaceE", !29, i64 0, !29, i64 16, !30, i64 32, !6, i64 56, !12, i64 64, !31, i64 68}
!29 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!30 = !{!"_ZTSN3JPH5ArrayIiNS_12STLAllocatorIiEEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!31 = !{!"bool", !7, i64 0}
!32 = !{!33, !6, i64 8}
!33 = !{!"_ZTSN3JPH17ConvexHullBuilder4EdgeE", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24}
!34 = distinct !{!34, !19}
!35 = !{!36, !36, i64 0}
!36 = !{!"_ZTSN3JPH19ConvexHullBuilder2D7EResultE", !7, i64 0}
!37 = distinct !{!37, !19}
!38 = !{!16, !16, i64 0}
!39 = distinct !{!39, !19}
!40 = !{!41, !6, i64 0}
!41 = !{!"_ZTSSt16initializer_listIPN3JPH17ConvexHullBuilder4FaceEE", !6, i64 0, !16, i64 8}
!42 = !{!41, !16, i64 8}
!43 = distinct !{!43, !19}
!44 = !{!28, !12, i64 64}
!45 = !{!31, !31, i64 0}
!46 = !{!47, !10, i64 0}
!47 = !{!"_ZTSN3JPH17ConvexHullBuilder8CoplanarE", !10, i64 0, !12, i64 4}
!48 = !{i8 0, i8 2}
!49 = !{}
!50 = distinct !{!50, !19}
!51 = !{!47, !12, i64 4}
!52 = distinct !{!52, !19}
!53 = distinct !{!53, !19}
!54 = !{!28, !31, i64 68}


; 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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Array.8" = type { i64, i64, ptr }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::ConvexHullBuilder2D" = type <{ ptr, ptr, i32, [4 x i8] }>
%"class.JPH::Array.11" = type { i64, i64, ptr }
%"class.JPH::Array.2" = type { i64, i64, ptr }
%"class.JPH::STLAllocator.3" = type { i8 }
%"class.JPH::Array.5" = type { i64, i64, ptr }

@.str.1 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 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: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder4EdgedlEPv(ptr 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: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder4Face26CalculateNormalAndCentroidEPKNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(69), ptr noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder9FreeFacesEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayIPNS_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 @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH17ConvexHullBuilder15GetFaceForPointENS_4Vec3ERKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS4_EEEERS4_Rf(ptr noundef nonnull align 8 dereferenceable(56), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1 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 #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, ptr noundef nonnull align 8 dereferenceable(24), float noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 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: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH17ConvexHullBuilder25DetermineCoplanarDistanceEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_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 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK3JPH17ConvexHullBuilder18GetNumVerticesUsedEv(ptr noundef nonnull align 8 dereferenceable(56)) 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 ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN3JPH17ConvexHullBuilder10InitializeEifRPKc(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %1, float noundef %2, ptr nocapture noundef nonnull writeonly align 8 dereferenceable(8) %3) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca i32, align 4
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Array.8", align 8
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca %"class.JPH::Array", align 8
  %25 = alloca %"class.JPH::ConvexHullBuilder2D", align 8
  %26 = alloca %"class.JPH::Array.11", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.JPH::Array.11", align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"class.JPH::Array.2", align 8
  %31 = alloca [4 x ptr], align 8
  %32 = alloca %"class.JPH::STLAllocator.3", align 1
  %33 = alloca ptr, align 8
  %34 = alloca %"class.JPH::Array.5", align 8
  %35 = alloca float, align 4
  %36 = alloca %"class.JPH::Array.2", align 8
  tail call void @_ZN3JPH17ConvexHullBuilder9FreeFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
  %37 = load ptr, ptr %0, align 8, !tbaa !5
  %38 = tail call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %37)
  %39 = icmp ult i64 %38, 3
  br i1 %39, label %40, label %41

40:                                               ; preds = %4
  store ptr @.str.3, ptr %3, align 8, !tbaa !13
  br label %582

41:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #11
  %42 = tail call noundef float @_ZNK3JPH17ConvexHullBuilder25DetermineCoplanarDistanceEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
  %43 = tail call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %42)
  store float %43, ptr %5, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #11
  %44 = tail call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %2)
  store float %44, ptr %6, align 4, !tbaa !14
  %45 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %46 = load float, ptr %45, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #11
  %47 = load ptr, ptr %0, align 8, !tbaa !5
  %48 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47)
  %49 = trunc i64 %48 to i32
  %50 = icmp sgt i32 %49, 0
  br i1 %50, label %.lr.ph, label %._crit_edge.thread

._crit_edge:                                      ; preds = %.lr.ph
  %51 = icmp sgt i32 %.1216, -1
  br i1 %51, label %63, label %._crit_edge.thread

.lr.ph:                                           ; preds = %41, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %41 ]
  %.0215364 = phi i32 [ %.1216, %.lr.ph ], [ -1, %41 ]
  %.0218363 = phi float [ %.1219, %.lr.ph ], [ -1.000000e+00, %41 ]
  %52 = load ptr, ptr %0, align 8, !tbaa !5
  %53 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %52, i64 noundef %indvars.iv)
  %54 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %53)
  %55 = fcmp ogt float %54, %.0218363
  %.1219 = select i1 %55, float %54, float %.0218363
  %56 = trunc nuw nsw i64 %indvars.iv to i32
  %.1216 = select i1 %55, i32 %56, i32 %.0215364
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %57 = load ptr, ptr %0, align 8, !tbaa !5
  %58 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %57)
  %sext = shl i64 %58, 32
  %59 = ashr exact i64 %sext, 32
  %60 = icmp slt i64 %indvars.iv.next, %59
  br i1 %60, label %.lr.ph, label %._crit_edge, !llvm.loop !16

._crit_edge.thread:                               ; preds = %41, %._crit_edge
  %.0215.lcssa456 = phi i32 [ %.1216, %._crit_edge ], [ -1, %41 ]
  %61 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 331)
  br i1 %61, label %62, label %63

62:                                               ; preds = %._crit_edge.thread
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !18
  br label %63

63:                                               ; preds = %62, %._crit_edge.thread, %._crit_edge
  %.0215.lcssa457 = phi i32 [ %.0215.lcssa456, %62 ], [ %.0215.lcssa456, %._crit_edge.thread ], [ %.1216, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #11
  store i32 -1, ptr %7, align 4, !tbaa !19
  %64 = load ptr, ptr %0, align 8, !tbaa !5
  %65 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %64)
  %66 = trunc i64 %65 to i32
  %67 = icmp sgt i32 %66, 0
  br i1 %67, label %.lr.ph368, label %._crit_edge369

.lr.ph368:                                        ; preds = %63
  %68 = sext i32 %.0215.lcssa457 to i64
  %69 = getelementptr inbounds i8, ptr %8, i64 8
  %70 = zext i32 %.0215.lcssa457 to i64
  br label %73

._crit_edge369:                                   ; preds = %86, %63
  %71 = load i32, ptr %7, align 4, !tbaa !19
  %72 = icmp sgt i32 %71, -1
  br i1 %72, label %94, label %91

73:                                               ; preds = %.lr.ph368, %86
  %indvars.iv440 = phi i64 [ 0, %.lr.ph368 ], [ %indvars.iv.next441, %86 ]
  %.2220366 = phi float [ -1.000000e+00, %.lr.ph368 ], [ %.4222, %86 ]
  %.not327 = icmp eq i64 %indvars.iv440, %70
  br i1 %.not327, label %86, label %74

74:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #11
  %75 = load ptr, ptr %0, align 8, !tbaa !5
  %76 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %75, i64 noundef %indvars.iv440)
  %77 = load ptr, ptr %0, align 8, !tbaa !5
  %78 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %77, i64 noundef %68)
  %.sroa.0169.0.copyload = load double, ptr %78, align 16
  %.sroa.2170.0..sroa_idx = getelementptr inbounds i8, ptr %78, i64 8
  %.sroa.2170.0.copyload = load double, ptr %.sroa.2170.0..sroa_idx, align 8, !tbaa !21
  %79 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %76, double %.sroa.0169.0.copyload, double %.sroa.2170.0.copyload)
  %80 = extractvalue { double, double } %79, 0
  store double %80, ptr %8, align 16
  %81 = extractvalue { double, double } %79, 1
  store double %81, ptr %69, align 8
  %82 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %8)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #11
  %83 = fcmp ogt float %82, %.2220366
  br i1 %83, label %84, label %86

84:                                               ; preds = %74
  %85 = trunc nuw nsw i64 %indvars.iv440 to i32
  store i32 %85, ptr %7, align 4, !tbaa !19
  br label %86

86:                                               ; preds = %74, %84, %73
  %.4222 = phi float [ %.2220366, %73 ], [ %82, %84 ], [ %.2220366, %74 ]
  %indvars.iv.next441 = add nuw nsw i64 %indvars.iv440, 1
  %87 = load ptr, ptr %0, align 8, !tbaa !5
  %88 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %87)
  %sext452 = shl i64 %88, 32
  %89 = ashr exact i64 %sext452, 32
  %90 = icmp slt i64 %indvars.iv.next441, %89
  br i1 %90, label %73, label %._crit_edge369, !llvm.loop !22

91:                                               ; preds = %._crit_edge369
  %92 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 346)
  br i1 %92, label %93, label %94

93:                                               ; preds = %91
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !23
  br label %94

94:                                               ; preds = %93, %91, %._crit_edge369
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #11
  store i32 -1, ptr %9, align 4, !tbaa !19
  %95 = load ptr, ptr %0, align 8, !tbaa !5
  %96 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %95)
  %97 = trunc i64 %96 to i32
  %98 = icmp sgt i32 %97, 0
  br i1 %98, label %.lr.ph373, label %._crit_edge374

.lr.ph373:                                        ; preds = %94
  %99 = sext i32 %.0215.lcssa457 to i64
  %100 = getelementptr inbounds i8, ptr %11, i64 8
  %101 = getelementptr inbounds i8, ptr %10, i64 8
  %102 = zext i32 %.0215.lcssa457 to i64
  br label %105

._crit_edge374:                                   ; preds = %132, %94
  %.0226.lcssa = phi float [ -1.000000e+00, %94 ], [ %.2228, %132 ]
  %103 = load i32, ptr %9, align 4, !tbaa !19
  %104 = icmp sgt i32 %103, -1
  br i1 %104, label %140, label %137

105:                                              ; preds = %.lr.ph373, %132
  %indvars.iv443 = phi i64 [ 0, %.lr.ph373 ], [ %indvars.iv.next444, %132 ]
  %.0226371 = phi float [ -1.000000e+00, %.lr.ph373 ], [ %.2228, %132 ]
  %.not325 = icmp eq i64 %indvars.iv443, %102
  %106 = load i32, ptr %7, align 4
  %107 = zext i32 %106 to i64
  %.not326 = icmp eq i64 %indvars.iv443, %107
  %or.cond = select i1 %.not325, i1 true, i1 %.not326
  br i1 %or.cond, label %132, label %108

108:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #11
  %109 = load ptr, ptr %0, align 8, !tbaa !5
  %110 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %109, i64 noundef %99)
  %111 = load ptr, ptr %0, align 8, !tbaa !5
  %112 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %111, i64 noundef %indvars.iv443)
  %.sroa.0156.0.copyload = load double, ptr %112, align 16
  %.sroa.2157.0..sroa_idx = getelementptr inbounds i8, ptr %112, i64 8
  %.sroa.2157.0.copyload = load double, ptr %.sroa.2157.0..sroa_idx, align 8, !tbaa !21
  %113 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %110, double %.sroa.0156.0.copyload, double %.sroa.2157.0.copyload)
  %114 = extractvalue { double, double } %113, 0
  store double %114, ptr %11, align 16
  %115 = extractvalue { double, double } %113, 1
  store double %115, ptr %100, align 8
  %116 = load ptr, ptr %0, align 8, !tbaa !5
  %117 = load i32, ptr %7, align 4, !tbaa !19
  %118 = sext i32 %117 to i64
  %119 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %116, i64 noundef %118)
  %120 = load ptr, ptr %0, align 8, !tbaa !5
  %121 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %indvars.iv443)
  %.sroa.0152.0.copyload = load double, ptr %121, align 16
  %.sroa.2153.0..sroa_idx = getelementptr inbounds i8, ptr %121, i64 8
  %.sroa.2153.0.copyload = load double, ptr %.sroa.2153.0..sroa_idx, align 8, !tbaa !21
  %122 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %119, double %.sroa.0152.0.copyload, double %.sroa.2153.0.copyload)
  %123 = extractvalue { double, double } %122, 0
  %124 = extractvalue { double, double } %122, 1
  %125 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %123, double %124)
  %126 = extractvalue { double, double } %125, 0
  store double %126, ptr %10, align 16
  %127 = extractvalue { double, double } %125, 1
  store double %127, ptr %101, align 8
  %128 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #11
  %129 = fcmp ogt float %128, %.0226371
  br i1 %129, label %130, label %132

130:                                              ; preds = %108
  %131 = trunc nuw nsw i64 %indvars.iv443 to i32
  store i32 %131, ptr %9, align 4, !tbaa !19
  br label %132

132:                                              ; preds = %108, %130, %105
  %.2228 = phi float [ %.0226371, %105 ], [ %128, %130 ], [ %.0226371, %108 ]
  %indvars.iv.next444 = add nuw nsw i64 %indvars.iv443, 1
  %133 = load ptr, ptr %0, align 8, !tbaa !5
  %134 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %133)
  %sext453 = shl i64 %134, 32
  %135 = ashr exact i64 %sext453, 32
  %136 = icmp slt i64 %indvars.iv.next444, %135
  br i1 %136, label %105, label %._crit_edge374, !llvm.loop !24

137:                                              ; preds = %._crit_edge374
  %138 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 361)
  br i1 %138, label %139, label %140

139:                                              ; preds = %137
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !25
  br label %140

140:                                              ; preds = %139, %137, %._crit_edge374
  %141 = fcmp olt float %.0226.lcssa, 0x3D71979980000000
  br i1 %141, label %142, label %143

142:                                              ; preds = %140
  store ptr @.str.7, ptr %3, align 8, !tbaa !13
  br label %581

143:                                              ; preds = %140
  %144 = load ptr, ptr %0, align 8, !tbaa !5
  %145 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %144)
  %146 = icmp eq i64 %145, 3
  br i1 %146, label %147, label %174

147:                                              ; preds = %143
  %148 = load i32, ptr %7, align 4, !tbaa !19
  %149 = load i32, ptr %9, align 4, !tbaa !19
  %150 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.0215.lcssa457, i32 noundef %148, i32 noundef %149)
  %151 = load i32, ptr %9, align 4, !tbaa !19
  %152 = load i32, ptr %7, align 4, !tbaa !19
  %153 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.0215.lcssa457, i32 noundef %151, i32 noundef %152)
  %154 = getelementptr inbounds i8, ptr %150, i64 56
  %155 = load ptr, ptr %154, align 8, !tbaa !26
  %156 = getelementptr inbounds i8, ptr %153, i64 56
  %157 = load ptr, ptr %156, align 8, !tbaa !26
  %158 = getelementptr inbounds i8, ptr %157, i64 8
  %159 = load ptr, ptr %158, align 8, !tbaa !31
  %160 = getelementptr inbounds i8, ptr %159, i64 8
  %161 = load ptr, ptr %160, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %155, ptr noundef %161)
  %162 = load ptr, ptr %154, align 8, !tbaa !26
  %163 = getelementptr inbounds i8, ptr %162, i64 8
  %164 = load ptr, ptr %163, align 8, !tbaa !31
  %165 = load ptr, ptr %156, align 8, !tbaa !26
  %166 = getelementptr inbounds i8, ptr %165, i64 8
  %167 = load ptr, ptr %166, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %164, ptr noundef %167)
  %168 = load ptr, ptr %154, align 8, !tbaa !26
  %169 = getelementptr inbounds i8, ptr %168, i64 8
  %170 = load ptr, ptr %169, align 8, !tbaa !31
  %171 = getelementptr inbounds i8, ptr %170, i64 8
  %172 = load ptr, ptr %171, align 8, !tbaa !31
  %173 = load ptr, ptr %156, align 8, !tbaa !26
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %172, ptr noundef %173)
  br label %581

174:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #11
  %175 = load ptr, ptr %0, align 8, !tbaa !5
  %176 = load i32, ptr %7, align 4, !tbaa !19
  %177 = sext i32 %176 to i64
  %178 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %175, i64 noundef %177)
  %179 = load ptr, ptr %0, align 8, !tbaa !5
  %180 = sext i32 %.0215.lcssa457 to i64
  %181 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %179, i64 noundef %180)
  %.sroa.0142.0.copyload = load double, ptr %181, align 16
  %.sroa.2143.0..sroa_idx = getelementptr inbounds i8, ptr %181, i64 8
  %.sroa.2143.0.copyload = load double, ptr %.sroa.2143.0..sroa_idx, align 8, !tbaa !21
  %182 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %178, double %.sroa.0142.0.copyload, double %.sroa.2143.0.copyload)
  %183 = extractvalue { double, double } %182, 0
  store double %183, ptr %14, align 16
  %184 = getelementptr inbounds i8, ptr %14, i64 8
  %185 = extractvalue { double, double } %182, 1
  store double %185, ptr %184, align 8
  %186 = load ptr, ptr %0, align 8, !tbaa !5
  %187 = load i32, ptr %9, align 4, !tbaa !19
  %188 = sext i32 %187 to i64
  %189 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %186, i64 noundef %188)
  %190 = load ptr, ptr %0, align 8, !tbaa !5
  %191 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %190, i64 noundef %180)
  %.sroa.0138.0.copyload = load double, ptr %191, align 16
  %.sroa.2139.0..sroa_idx = getelementptr inbounds i8, ptr %191, i64 8
  %.sroa.2139.0.copyload = load double, ptr %.sroa.2139.0..sroa_idx, align 8, !tbaa !21
  %192 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %189, double %.sroa.0138.0.copyload, double %.sroa.2139.0.copyload)
  %193 = extractvalue { double, double } %192, 0
  %194 = extractvalue { double, double } %192, 1
  %195 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %193, double %194)
  %196 = extractvalue { double, double } %195, 0
  store double %196, ptr %13, align 16
  %197 = getelementptr inbounds i8, ptr %13, i64 8
  %198 = extractvalue { double, double } %195, 1
  store double %198, ptr %197, align 8
  %199 = call { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %13)
  %200 = extractvalue { double, double } %199, 0
  store double %200, ptr %12, align 16
  %201 = getelementptr inbounds i8, ptr %12, i64 8
  %202 = extractvalue { double, double } %199, 1
  store double %202, ptr %201, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #11
  %203 = load ptr, ptr %0, align 8, !tbaa !5
  %204 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %203, i64 noundef %180)
  %205 = load ptr, ptr %0, align 8, !tbaa !5
  %206 = load i32, ptr %7, align 4, !tbaa !19
  %207 = sext i32 %206 to i64
  %208 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %205, i64 noundef %207)
  %.sroa.0134.0.copyload = load double, ptr %208, align 16
  %.sroa.2135.0..sroa_idx = getelementptr inbounds i8, ptr %208, i64 8
  %.sroa.2135.0.copyload = load double, ptr %.sroa.2135.0..sroa_idx, align 8, !tbaa !21
  %209 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %204, double %.sroa.0134.0.copyload, double %.sroa.2135.0.copyload)
  %210 = extractvalue { double, double } %209, 0
  store double %210, ptr %16, align 16
  %211 = getelementptr inbounds i8, ptr %16, i64 8
  %212 = extractvalue { double, double } %209, 1
  store double %212, ptr %211, align 8
  %213 = load ptr, ptr %0, align 8, !tbaa !5
  %214 = load i32, ptr %9, align 4, !tbaa !19
  %215 = sext i32 %214 to i64
  %216 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %213, i64 noundef %215)
  %.sroa.0132.0.copyload = load double, ptr %216, align 16
  %.sroa.2133.0..sroa_idx = getelementptr inbounds i8, ptr %216, i64 8
  %.sroa.2133.0.copyload = load double, ptr %.sroa.2133.0..sroa_idx, align 8, !tbaa !21
  %217 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %.sroa.0132.0.copyload, double %.sroa.2133.0.copyload)
  %218 = extractvalue { double, double } %217, 0
  store double %218, ptr %15, align 16
  %219 = getelementptr inbounds i8, ptr %15, i64 8
  %220 = extractvalue { double, double } %217, 1
  store double %220, ptr %219, align 8
  %221 = call { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 3.000000e+00)
  %222 = extractvalue { double, double } %221, 0
  %223 = extractvalue { double, double } %221, 1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #11
  %224 = load ptr, ptr %0, align 8, !tbaa !5
  %225 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %224)
  %226 = trunc i64 %225 to i32
  %227 = icmp sgt i32 %226, 0
  br i1 %227, label %.lr.ph380, label %._crit_edge381

.lr.ph380:                                        ; preds = %174
  %228 = getelementptr inbounds i8, ptr %17, i64 8
  %229 = zext i32 %.0215.lcssa457 to i64
  br label %234

._crit_edge381:                                   ; preds = %250, %174
  %.0238.lcssa = phi float [ 0.000000e+00, %174 ], [ %.2240, %250 ]
  %.0232.lcssa = phi i32 [ -1, %174 ], [ %.2234, %250 ]
  %230 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %.0238.lcssa)
  %231 = load float, ptr %5, align 4, !tbaa !14
  %232 = fmul float %231, 2.500000e+01
  %233 = fcmp ugt float %230, %232
  br i1 %233, label %397, label %255

234:                                              ; preds = %.lr.ph380, %250
  %indvars.iv446 = phi i64 [ 0, %.lr.ph380 ], [ %indvars.iv.next447, %250 ]
  %.0232378 = phi i32 [ -1, %.lr.ph380 ], [ %.2234, %250 ]
  %.0238377 = phi float [ 0.000000e+00, %.lr.ph380 ], [ %.2240, %250 ]
  %.not322 = icmp eq i64 %indvars.iv446, %229
  %235 = load i32, ptr %7, align 4
  %236 = zext i32 %235 to i64
  %.not323 = icmp eq i64 %indvars.iv446, %236
  %or.cond328 = select i1 %.not322, i1 true, i1 %.not323
  %237 = load i32, ptr %9, align 4
  %238 = zext i32 %237 to i64
  %.not324 = icmp eq i64 %indvars.iv446, %238
  %or.cond329 = select i1 %or.cond328, i1 true, i1 %.not324
  br i1 %or.cond329, label %250, label %239

239:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #11
  %240 = load ptr, ptr %0, align 8, !tbaa !5
  %241 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %240, i64 noundef %indvars.iv446)
  %242 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %241, double %222, double %223)
  %243 = extractvalue { double, double } %242, 0
  store double %243, ptr %17, align 16
  %244 = extractvalue { double, double } %242, 1
  store double %244, ptr %228, align 8
  %.sroa.0112.0.copyload = load double, ptr %12, align 16
  %.sroa.2113.0.copyload = load double, ptr %201, align 8, !tbaa !21
  %245 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %.sroa.0112.0.copyload, double %.sroa.2113.0.copyload)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #11
  %246 = call noundef float @_ZSt3absf(float noundef %245)
  %247 = call noundef float @_ZSt3absf(float noundef %.0238377)
  %248 = fcmp ogt float %246, %247
  %.1239 = select i1 %248, float %245, float %.0238377
  %249 = trunc nuw nsw i64 %indvars.iv446 to i32
  %.1233 = select i1 %248, i32 %249, i32 %.0232378
  br label %250

250:                                              ; preds = %234, %239
  %.2240 = phi float [ %.1239, %239 ], [ %.0238377, %234 ]
  %.2234 = phi i32 [ %.1233, %239 ], [ %.0232378, %234 ]
  %indvars.iv.next447 = add nuw nsw i64 %indvars.iv446, 1
  %251 = load ptr, ptr %0, align 8, !tbaa !5
  %252 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %251)
  %sext454 = shl i64 %252, 32
  %253 = ashr exact i64 %sext454, 32
  %254 = icmp slt i64 %indvars.iv.next447, %253
  br i1 %254, label %234, label %._crit_edge381, !llvm.loop !33

255:                                              ; preds = %._crit_edge381
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #11
  %256 = call { double, double } @_ZNK3JPH4Vec326GetNormalizedPerpendicularEv(ptr noundef nonnull align 16 dereferenceable(16) %12)
  %257 = extractvalue { double, double } %256, 0
  store double %257, ptr %18, align 16
  %258 = getelementptr inbounds i8, ptr %18, i64 8
  %259 = extractvalue { double, double } %256, 1
  store double %259, ptr %258, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #11
  %260 = call { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %257, double %259)
  %261 = extractvalue { double, double } %260, 0
  store double %261, ptr %19, align 16
  %262 = getelementptr inbounds i8, ptr %19, i64 8
  %263 = extractvalue { double, double } %260, 1
  store double %263, ptr %262, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #11
  %264 = load ptr, ptr %0, align 8, !tbaa !5
  %265 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %264)
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %20, i64 noundef %265)
          to label %266 unwind label %270

266:                                              ; preds = %255
  %267 = load ptr, ptr %0, align 8, !tbaa !5
  %268 = call noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %267)
  %269 = call noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %267)
  %.not308384 = icmp eq ptr %268, %269
  br i1 %.not308384, label %._crit_edge388, label %.lr.ph387

._crit_edge388:                                   ; preds = %275, %266
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %25) #11
  invoke void @_ZN3JPH19ConvexHullBuilder2DC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(20) %25, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %279 unwind label %296

270:                                              ; preds = %255
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %396

.lr.ph387:                                        ; preds = %266, %275
  %.0268385 = phi ptr [ %276, %275 ], [ %268, %266 ]
  %.sroa.0101.0.copyload = load double, ptr %.0268385, align 16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %.0268385, i64 8
  %.sroa.6.0.copyload = load double, ptr %.sroa.6.0..sroa_idx, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #11
  %272 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %.sroa.0101.0.copyload, double %.sroa.6.0.copyload)
  store float %272, ptr %21, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #11
  %273 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %19, double %.sroa.0101.0.copyload, double %.sroa.6.0.copyload)
  store float %273, ptr %22, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #11
  store float 0.000000e+00, ptr %23, align 4, !tbaa !14
  %274 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE12emplace_backIJfffEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %275 unwind label %277

275:                                              ; preds = %.lr.ph387
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #11
  %276 = getelementptr inbounds i8, ptr %.0268385, i64 16
  %.not308 = icmp eq ptr %276, %269
  br i1 %.not308, label %._crit_edge388, label %.lr.ph387

277:                                              ; preds = %.lr.ph387
  %278 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #11
  br label %396

279:                                              ; preds = %._crit_edge388
  %280 = load i32, ptr %7, align 4, !tbaa !19
  %281 = load i32, ptr %9, align 4, !tbaa !19
  %282 = invoke noundef i32 @_ZN3JPH19ConvexHullBuilder2D10InitializeEiiiifRNS_5ArrayIiNS_12STLAllocatorIiEEEE(ptr noundef nonnull align 8 dereferenceable(20) %25, i32 noundef %.0215.lcssa457, i32 noundef %280, i32 noundef %281, i32 noundef %1, float noundef %2, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %283 unwind label %298

283:                                              ; preds = %279
  %284 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder10CreateFaceEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %285 unwind label %300

285:                                              ; preds = %283
  %286 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder10CreateFaceEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %287 unwind label %302

287:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #11
  %288 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %288)
          to label %289 unwind label %304

289:                                              ; preds = %287
  %290 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %291 = call noundef ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %.not309389 = icmp eq ptr %290, %291
  br i1 %.not309389, label %._crit_edge393, label %.lr.ph392

.lr.ph392:                                        ; preds = %289
  %292 = getelementptr inbounds i8, ptr %284, i64 56
  br label %306

._crit_edge393:                                   ; preds = %320, %289
  %293 = getelementptr inbounds i8, ptr %284, i64 56
  %294 = load ptr, ptr %293, align 8, !tbaa !26
  %295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %322 unwind label %304

296:                                              ; preds = %._crit_edge388
  %297 = landingpad { ptr, i32 }
          cleanup
  br label %395

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

300:                                              ; preds = %283
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %394

302:                                              ; preds = %285
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %394

304:                                              ; preds = %._crit_edge393, %287
  %305 = landingpad { ptr, i32 }
          cleanup
  br label %393

306:                                              ; preds = %.lr.ph392, %320
  %.0270390 = phi ptr [ %290, %.lr.ph392 ], [ %321, %320 ]
  %307 = load i32, ptr %.0270390, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #11
  %308 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder4EdgenwEm(i64 noundef 32)
          to label %309 unwind label %312

309:                                              ; preds = %306
  call void @_ZN3JPH17ConvexHullBuilder4EdgeC2EPNS0_4FaceEi(ptr noundef nonnull align 8 dereferenceable(28) %308, ptr noundef %284, i32 noundef %307)
  store ptr %308, ptr %27, align 8, !tbaa !13
  %310 = call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
  %311 = load ptr, ptr %27, align 8, !tbaa !13
  br i1 %310, label %319, label %314

312:                                              ; preds = %319, %314, %306
  %313 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #11
  br label %393

314:                                              ; preds = %309
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %316 unwind label %312

316:                                              ; preds = %314
  %317 = load ptr, ptr %315, align 8, !tbaa !13
  %318 = getelementptr inbounds i8, ptr %317, i64 8
  br label %319

319:                                              ; preds = %309, %316
  %.sink = phi ptr [ %318, %316 ], [ %292, %309 ]
  store ptr %311, ptr %.sink, align 8, !tbaa !13
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %320 unwind label %312

320:                                              ; preds = %319
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #11
  %321 = getelementptr inbounds i8, ptr %.0270390, i64 4
  %.not309 = icmp eq ptr %321, %291
  br i1 %.not309, label %._crit_edge393, label %306

322:                                              ; preds = %._crit_edge393
  %323 = load ptr, ptr %295, align 8, !tbaa !13
  %324 = getelementptr inbounds i8, ptr %323, i64 8
  store ptr %294, ptr %324, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #11
  %325 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %325)
          to label %326 unwind label %335

326:                                              ; preds = %322
  %327 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %328 = trunc i64 %327 to i32
  %329 = icmp sgt i32 %328, 0
  br i1 %329, label %.lr.ph397, label %._crit_edge398

.lr.ph397:                                        ; preds = %326
  %330 = getelementptr inbounds i8, ptr %286, i64 56
  %331 = and i64 %327, 2147483647
  br label %337

._crit_edge398:                                   ; preds = %355, %326
  %332 = getelementptr inbounds i8, ptr %286, i64 56
  %333 = load ptr, ptr %332, align 8, !tbaa !26
  %334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %358 unwind label %335

335:                                              ; preds = %._crit_edge402, %._crit_edge398, %322
  %336 = landingpad { ptr, i32 }
          cleanup
  br label %392

337:                                              ; preds = %.lr.ph397, %355
  %indvars.iv449 = phi i64 [ %331, %.lr.ph397 ], [ %indvars.iv.next450, %355 ]
  %indvars.iv.next450 = add nsw i64 %indvars.iv449, -1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #11
  %338 = invoke noundef ptr @_ZN3JPH17ConvexHullBuilder4EdgenwEm(i64 noundef 32)
          to label %339 unwind label %345

339:                                              ; preds = %337
  %340 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %indvars.iv.next450)
          to label %341 unwind label %347

341:                                              ; preds = %339
  %342 = load i32, ptr %340, align 4, !tbaa !19
  call void @_ZN3JPH17ConvexHullBuilder4EdgeC2EPNS0_4FaceEi(ptr noundef nonnull align 8 dereferenceable(28) %338, ptr noundef %286, i32 noundef %342)
  store ptr %338, ptr %29, align 8, !tbaa !13
  %343 = call noundef zeroext i1 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %28)
  %344 = load ptr, ptr %29, align 8, !tbaa !13
  br i1 %343, label %354, label %349

345:                                              ; preds = %354, %349, %337
  %346 = landingpad { ptr, i32 }
          cleanup
  br label %357

347:                                              ; preds = %339
  %348 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH17ConvexHullBuilder4EdgedlEPv(ptr noundef %338) #11
  br label %357

349:                                              ; preds = %341
  %350 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %28)
          to label %351 unwind label %345

351:                                              ; preds = %349
  %352 = load ptr, ptr %350, align 8, !tbaa !13
  %353 = getelementptr inbounds i8, ptr %352, i64 8
  br label %354

354:                                              ; preds = %341, %351
  %.sink471 = phi ptr [ %353, %351 ], [ %330, %341 ]
  store ptr %344, ptr %.sink471, align 8, !tbaa !13
  invoke void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %355 unwind label %345

355:                                              ; preds = %354
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #11
  %356 = icmp ugt i64 %indvars.iv449, 1
  br i1 %356, label %337, label %._crit_edge398, !llvm.loop !34

357:                                              ; preds = %347, %345
  %.pn310 = phi { ptr, i32 } [ %346, %345 ], [ %348, %347 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #11
  br label %392

358:                                              ; preds = %._crit_edge398
  %359 = load ptr, ptr %334, align 8, !tbaa !13
  %360 = getelementptr inbounds i8, ptr %359, i64 8
  store ptr %333, ptr %360, align 8, !tbaa !31
  %361 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %.not434 = icmp eq i64 %361, 0
  br i1 %.not434, label %._crit_edge402, label %.lr.ph401

._crit_edge402:                                   ; preds = %377, %358
  %362 = load ptr, ptr %0, align 8, !tbaa !5
  %363 = call noundef ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %362)
  invoke void @_ZN3JPH17ConvexHullBuilder4Face26CalculateNormalAndCentroidEPKNS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(69) %284, ptr noundef %363)
          to label %381 unwind label %335

364:                                              ; preds = %375, %367, %.lr.ph401
  %365 = landingpad { ptr, i32 }
          cleanup
  br label %392

.lr.ph401:                                        ; preds = %358, %377
  %.0278399 = phi i64 [ %378, %377 ], [ 0, %358 ]
  %366 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %.0278399)
          to label %367 unwind label %364

367:                                              ; preds = %.lr.ph401
  %368 = load ptr, ptr %366, align 8, !tbaa !13
  %369 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %370 = shl i64 %369, 1
  %reass.sub = sub i64 %370, %.0278399
  %371 = add i64 %reass.sub, -2
  %372 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %373 = urem i64 %371, %372
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %373)
          to label %375 unwind label %364

375:                                              ; preds = %367
  %376 = load ptr, ptr %374, align 8, !tbaa !13
  invoke void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %368, ptr noundef %376)
          to label %377 unwind label %364

377:                                              ; preds = %375
  %378 = add nuw i64 %.0278399, 1
  %379 = call noundef i64 @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %380 = icmp ult i64 %378, %379
  br i1 %380, label %.lr.ph401, label %._crit_edge402, !llvm.loop !35

381:                                              ; preds = %._crit_edge402
  %382 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %284)
          to label %383 unwind label %390

383:                                              ; preds = %381
  %384 = extractvalue { double, double } %382, 0
  %385 = extractvalue { double, double } %382, 1
  store double %384, ptr %286, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %286, i64 8
  store double %385, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !21
  %386 = getelementptr inbounds i8, ptr %284, i64 16
  %387 = getelementptr inbounds i8, ptr %286, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %387, ptr noundef nonnull align 16 dereferenceable(16) %386, i64 16, i1 false), !tbaa.struct !36
  %388 = icmp eq i32 %282, 1
  %389 = zext i1 %388 to i32
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  call void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %25) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #11
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  br label %579

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

392:                                              ; preds = %390, %364, %357, %335
  %.pn310.pn = phi { ptr, i32 } [ %.pn310, %357 ], [ %365, %364 ], [ %391, %390 ], [ %336, %335 ]
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #11
  br label %393

393:                                              ; preds = %392, %312, %304
  %.pn313 = phi { ptr, i32 } [ %313, %312 ], [ %.pn310.pn, %392 ], [ %305, %304 ]
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  br label %394

394:                                              ; preds = %300, %393, %302, %298
  %.pn313.pn.pn.pn = phi { ptr, i32 } [ %299, %298 ], [ %301, %300 ], [ %.pn313, %393 ], [ %303, %302 ]
  call void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20) %25) #11
  br label %395

395:                                              ; preds = %394, %296
  %.pn313.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn313.pn.pn.pn, %394 ], [ %297, %296 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %25) #11
  call void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #11
  br label %396

396:                                              ; preds = %395, %277, %270
  %.pn319 = phi { ptr, i32 } [ %278, %277 ], [ %.pn313.pn.pn.pn.pn, %395 ], [ %271, %270 ]
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  br label %580

397:                                              ; preds = %._crit_edge381
  %398 = fcmp olt float %.0238.lcssa, 0.000000e+00
  br i1 %398, label %399, label %400

399:                                              ; preds = %397
  call void @_ZSt4swapIiENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %9) #11
  br label %400

400:                                              ; preds = %399, %397
  %401 = load i32, ptr %7, align 4, !tbaa !19
  %402 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.0215.lcssa457, i32 noundef %401, i32 noundef %.0232.lcssa)
  %403 = load i32, ptr %7, align 4, !tbaa !19
  %404 = load i32, ptr %9, align 4, !tbaa !19
  %405 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %403, i32 noundef %404, i32 noundef %.0232.lcssa)
  %406 = load i32, ptr %9, align 4, !tbaa !19
  %407 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %406, i32 noundef %.0215.lcssa457, i32 noundef %.0232.lcssa)
  %408 = load i32, ptr %9, align 4, !tbaa !19
  %409 = load i32, ptr %7, align 4, !tbaa !19
  %410 = call noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.0215.lcssa457, i32 noundef %408, i32 noundef %409)
  %411 = getelementptr inbounds i8, ptr %402, i64 56
  %412 = load ptr, ptr %411, align 8, !tbaa !26
  %413 = getelementptr inbounds i8, ptr %410, i64 56
  %414 = load ptr, ptr %413, align 8, !tbaa !26
  %415 = getelementptr inbounds i8, ptr %414, i64 8
  %416 = load ptr, ptr %415, align 8, !tbaa !31
  %417 = getelementptr inbounds i8, ptr %416, i64 8
  %418 = load ptr, ptr %417, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %412, ptr noundef %418)
  %419 = load ptr, ptr %411, align 8, !tbaa !26
  %420 = getelementptr inbounds i8, ptr %419, i64 8
  %421 = load ptr, ptr %420, align 8, !tbaa !31
  %422 = getelementptr inbounds i8, ptr %405, i64 56
  %423 = load ptr, ptr %422, align 8, !tbaa !26
  %424 = getelementptr inbounds i8, ptr %423, i64 8
  %425 = load ptr, ptr %424, align 8, !tbaa !31
  %426 = getelementptr inbounds i8, ptr %425, i64 8
  %427 = load ptr, ptr %426, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %421, ptr noundef %427)
  %428 = load ptr, ptr %411, align 8, !tbaa !26
  %429 = getelementptr inbounds i8, ptr %428, i64 8
  %430 = load ptr, ptr %429, align 8, !tbaa !31
  %431 = getelementptr inbounds i8, ptr %430, i64 8
  %432 = load ptr, ptr %431, align 8, !tbaa !31
  %433 = getelementptr inbounds i8, ptr %407, i64 56
  %434 = load ptr, ptr %433, align 8, !tbaa !26
  %435 = getelementptr inbounds i8, ptr %434, i64 8
  %436 = load ptr, ptr %435, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %432, ptr noundef %436)
  %437 = load ptr, ptr %422, align 8, !tbaa !26
  %438 = load ptr, ptr %413, align 8, !tbaa !26
  %439 = getelementptr inbounds i8, ptr %438, i64 8
  %440 = load ptr, ptr %439, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %437, ptr noundef %440)
  %441 = load ptr, ptr %422, align 8, !tbaa !26
  %442 = getelementptr inbounds i8, ptr %441, i64 8
  %443 = load ptr, ptr %442, align 8, !tbaa !31
  %444 = load ptr, ptr %433, align 8, !tbaa !26
  %445 = getelementptr inbounds i8, ptr %444, i64 8
  %446 = load ptr, ptr %445, align 8, !tbaa !31
  %447 = getelementptr inbounds i8, ptr %446, i64 8
  %448 = load ptr, ptr %447, align 8, !tbaa !31
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %443, ptr noundef %448)
  %449 = load ptr, ptr %433, align 8, !tbaa !26
  %450 = load ptr, ptr %413, align 8, !tbaa !26
  call void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef %449, ptr noundef %450)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #11
  store ptr %402, ptr %31, align 8, !tbaa !13
  %451 = getelementptr inbounds i8, ptr %31, i64 8
  store ptr %405, ptr %451, align 8, !tbaa !13
  %452 = getelementptr inbounds i8, ptr %31, i64 16
  store ptr %407, ptr %452, align 8, !tbaa !13
  %453 = getelementptr inbounds i8, ptr %31, i64 24
  store ptr %410, ptr %453, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEC2ESt16initializer_listIS3_ERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %30, ptr nonnull %31, i64 4, ptr noundef nonnull align 1 dereferenceable(1) %32)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #11
  %454 = load ptr, ptr %0, align 8, !tbaa !5
  %455 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %454)
  %456 = trunc i64 %455 to i32
  %457 = icmp sgt i32 %456, 0
  br i1 %457, label %.lr.ph405, label %.preheader345

.preheader345:                                    ; preds = %466, %400
  %458 = getelementptr inbounds i8, ptr %0, i64 8
  %459 = getelementptr inbounds i8, ptr %0, i64 32
  br label %.backedge.outer

.backedge.outer:                                  ; preds = %.thread458, %.preheader345
  %.0273.ph = phi i32 [ %549, %.thread458 ], [ 4, %.preheader345 ]
  br label %.backedge

460:                                              ; preds = %464
  %461 = landingpad { ptr, i32 }
          cleanup
  br label %578

.lr.ph405:                                        ; preds = %400, %466
  %.0276403 = phi i32 [ %467, %466 ], [ 0, %400 ]
  %.not302 = icmp eq i32 %.0276403, %.0215.lcssa457
  %462 = load i32, ptr %7, align 4
  %.not303 = icmp eq i32 %.0276403, %462
  %or.cond330 = select i1 %.not302, i1 true, i1 %.not303
  %463 = load i32, ptr %9, align 4
  %.not304 = icmp eq i32 %.0276403, %463
  %or.cond331 = select i1 %or.cond330, i1 true, i1 %.not304
  %.not305 = icmp eq i32 %.0276403, %.0232.lcssa
  %or.cond332 = select i1 %or.cond331, i1 true, i1 %.not305
  br i1 %or.cond332, label %466, label %464

464:                                              ; preds = %.lr.ph405
  %465 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %.0276403, ptr noundef nonnull align 8 dereferenceable(24) %30, float noundef %46)
          to label %466 unwind label %460

466:                                              ; preds = %.lr.ph405, %464
  %467 = add nuw nsw i32 %.0276403, 1
  %468 = load ptr, ptr %0, align 8, !tbaa !5
  %469 = call noundef i64 @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %468)
  %470 = trunc i64 %469 to i32
  %471 = icmp slt i32 %467, %470
  br i1 %471, label %.lr.ph405, label %.preheader345, !llvm.loop !37

.backedge:                                        ; preds = %.backedge.outer, %.thread465
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #11
  store ptr null, ptr %33, align 8, !tbaa !13
  %472 = call noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %458)
  %473 = call noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %458)
  %.not406 = icmp eq ptr %472, %473
  br i1 %.not406, label %._crit_edge411, label %.lr.ph410

._crit_edge411:                                   ; preds = %480, %.backedge
  %474 = load ptr, ptr %33, align 8, !tbaa !13
  %.not288 = icmp eq ptr %474, null
  br i1 %.not288, label %491, label %482

.lr.ph410:                                        ; preds = %.backedge, %480
  %.0269408 = phi ptr [ %481, %480 ], [ %472, %.backedge ]
  %.0271407 = phi float [ %.1272, %480 ], [ 0.000000e+00, %.backedge ]
  %475 = load ptr, ptr %.0269408, align 8, !tbaa !13
  %476 = getelementptr inbounds i8, ptr %475, i64 64
  %477 = load float, ptr %476, align 16, !tbaa !38
  %478 = fcmp ogt float %477, %.0271407
  br i1 %478, label %479, label %480

479:                                              ; preds = %.lr.ph410
  store ptr %475, ptr %33, align 8, !tbaa !13
  br label %480

480:                                              ; preds = %479, %.lr.ph410
  %.1272 = phi float [ %477, %479 ], [ %.0271407, %.lr.ph410 ]
  %481 = getelementptr inbounds i8, ptr %.0269408, i64 8
  %.not = icmp eq ptr %481, %473
  br i1 %.not, label %._crit_edge411, label %.lr.ph410

482:                                              ; preds = %._crit_edge411
  %483 = getelementptr inbounds i8, ptr %474, i64 32
  %484 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %483)
          to label %485 unwind label %489

485:                                              ; preds = %482
  %486 = load i32, ptr %484, align 4, !tbaa !19
  %487 = load ptr, ptr %33, align 8, !tbaa !13
  %488 = getelementptr inbounds i8, ptr %487, i64 32
  invoke void @_ZN3JPH5ArrayIiNS_12STLAllocatorIiEEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %488)
          to label %544 unwind label %489

489:                                              ; preds = %545, %485, %482
  %490 = landingpad { ptr, i32 }
          cleanup
  br label %574

491:                                              ; preds = %._crit_edge411
  %492 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
  br i1 %492, label %.thread341, label %493

.thread341:                                       ; preds = %491
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.loopexit347

493:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #11
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4swapERS5_(ptr noundef nonnull align 8 dereferenceable(24) %459, ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  %494 = call noundef ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
  %495 = call noundef ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
  %.not289412 = icmp eq ptr %494, %495
  br i1 %.not289412, label %.critedge, label %.lr.ph416

._crit_edge417:                                   ; preds = %498
  br i1 %499, label %.thread465, label %.critedge, !llvm.loop !39

.thread465:                                       ; preds = %._crit_edge417
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.backedge, !llvm.loop !39

.lr.ph416:                                        ; preds = %493, %498
  %.0242414 = phi ptr [ %500, %498 ], [ %494, %493 ]
  %.0249413 = phi i1 [ %499, %498 ], [ false, %493 ]
  %496 = load i32, ptr %.0242414, align 4, !tbaa !40
  %497 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %496, ptr noundef nonnull align 8 dereferenceable(24) %458, float noundef %46)
          to label %498 unwind label %501

498:                                              ; preds = %.lr.ph416
  %499 = or i1 %.0249413, %497
  %500 = getelementptr inbounds i8, ptr %.0242414, i64 8
  %.not289 = icmp eq ptr %500, %495
  br i1 %.not289, label %._crit_edge417, label %.lr.ph416

501:                                              ; preds = %.lr.ph416
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %543

.critedge:                                        ; preds = %493, %._crit_edge417
  %503 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
  br i1 %503, label %572, label %.preheader

.preheader:                                       ; preds = %.critedge, %537
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #11
  %504 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
          to label %505 unwind label %511

505:                                              ; preds = %.preheader
  %506 = getelementptr inbounds i8, ptr %504, i64 4
  %507 = load float, ptr %506, align 4, !tbaa !42
  store float %507, ptr %35, align 4, !tbaa !14
  %508 = call noundef i64 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
  %509 = icmp ugt i64 %508, 1
  br i1 %509, label %.lr.ph422, label %._crit_edge423

._crit_edge423:                                   ; preds = %522, %505
  %.0236.lcssa = phi i64 [ 0, %505 ], [ %.1237, %522 ]
  %510 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %459, i64 noundef %.0236.lcssa)
          to label %526 unwind label %511

511:                                              ; preds = %536, %532, %530, %528, %526, %._crit_edge423, %.preheader
  %512 = landingpad { ptr, i32 }
          cleanup
  br label %541

.lr.ph422:                                        ; preds = %505, %522
  %.0235420 = phi i64 [ %523, %522 ], [ 1, %505 ]
  %.0236419 = phi i64 [ %.1237, %522 ], [ 0, %505 ]
  %513 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %459, i64 noundef %.0235420)
          to label %514 unwind label %520

514:                                              ; preds = %.lr.ph422
  %515 = getelementptr inbounds i8, ptr %513, i64 4
  %516 = load float, ptr %515, align 4, !tbaa !42
  %517 = load float, ptr %35, align 4, !tbaa !14
  %518 = fcmp ogt float %516, %517
  br i1 %518, label %519, label %522

519:                                              ; preds = %514
  store float %516, ptr %35, align 4, !tbaa !14
  br label %522

520:                                              ; preds = %.lr.ph422
  %521 = landingpad { ptr, i32 }
          cleanup
  br label %541

522:                                              ; preds = %519, %514
  %.1237 = phi i64 [ %.0235420, %519 ], [ %.0236419, %514 ]
  %523 = add nuw i64 %.0235420, 1
  %524 = call noundef i64 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
  %525 = icmp ult i64 %523, %524
  br i1 %525, label %.lr.ph422, label %._crit_edge423, !llvm.loop !43

526:                                              ; preds = %._crit_edge423
  %527 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
          to label %528 unwind label %511

528:                                              ; preds = %526
  call void @_ZSt4swapIN3JPH17ConvexHullBuilder8CoplanarEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SF_(ptr noundef nonnull align 4 dereferenceable(8) %510, ptr noundef nonnull align 4 dereferenceable(8) %527) #11
  %529 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
          to label %530 unwind label %511

530:                                              ; preds = %528
  %531 = load i32, ptr %529, align 4, !tbaa !40
  invoke void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
          to label %532 unwind label %511

532:                                              ; preds = %530
  %533 = load ptr, ptr %0, align 8, !tbaa !5
  %534 = sext i32 %531 to i64
  %535 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZNK3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %533, i64 noundef %534)
          to label %536 unwind label %511

536:                                              ; preds = %532
  %.sroa.0.0.copyload = load double, ptr %535, align 16
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %535, i64 8
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !21
  invoke void @_ZNK3JPH17ConvexHullBuilder15GetFaceForPointENS_4Vec3ERKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS4_EEEERS4_Rf(ptr noundef nonnull align 8 dereferenceable(56) %0, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload, ptr noundef nonnull align 8 dereferenceable(24) %458, ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %537 unwind label %511

537:                                              ; preds = %536
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  %538 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %459)
  %539 = load ptr, ptr %33, align 8
  %540 = icmp ne ptr %539, null
  %.not291 = select i1 %538, i1 true, i1 %540
  br i1 %.not291, label %542, label %.preheader, !llvm.loop !44

541:                                              ; preds = %520, %511
  %.pn = phi { ptr, i32 } [ %521, %520 ], [ %512, %511 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #11
  br label %543

542:                                              ; preds = %537
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #11
  br i1 %540, label %544, label %.thread462

.thread462:                                       ; preds = %542
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.loopexit347

543:                                              ; preds = %541, %501
  %.pn293 = phi { ptr, i32 } [ %502, %501 ], [ %.pn, %541 ]
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #11
  br label %574

544:                                              ; preds = %542, %485
  %.2252 = phi i32 [ %486, %485 ], [ %531, %542 ]
  %.not295 = icmp slt i32 %.0273.ph, %1
  br i1 %.not295, label %548, label %545

545:                                              ; preds = %544
  %546 = invoke noundef i32 @_ZNK3JPH17ConvexHullBuilder18GetNumVerticesUsedEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %547 unwind label %489

547:                                              ; preds = %545
  %.not296 = icmp slt i32 %546, %1
  br i1 %.not296, label %548, label %.thread337

.thread337:                                       ; preds = %547
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.loopexit346

548:                                              ; preds = %547, %544
  %.1274 = phi i32 [ %546, %547 ], [ %.0273.ph, %544 ]
  %549 = add nsw i32 %.1274, 1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %36) #11
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #11
  %550 = load ptr, ptr %33, align 8, !tbaa !13
  %551 = load float, ptr %5, align 4, !tbaa !14
  invoke void @_ZN3JPH17ConvexHullBuilder8AddPointEPNS0_4FaceEifRNS_5ArrayIS2_NS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef %550, i32 noundef %.2252, float noundef %551, ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %552 unwind label %555

552:                                              ; preds = %548
  %553 = call noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %458)
  %554 = call noundef ptr @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %458)
  %.not297429 = icmp eq ptr %553, %554
  br i1 %.not297429, label %._crit_edge433, label %.lr.ph432

._crit_edge433:                                   ; preds = %.loopexit, %552
  invoke void @_ZN3JPH17ConvexHullBuilder19GarbageCollectFacesEv(ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %.thread458 unwind label %555

555:                                              ; preds = %._crit_edge433, %548
  %556 = landingpad { ptr, i32 }
          cleanup
  br label %573

.lr.ph432:                                        ; preds = %552, %.loopexit
  %.0225430 = phi ptr [ %571, %.loopexit ], [ %553, %552 ]
  %557 = load ptr, ptr %.0225430, align 8, !tbaa !13
  %558 = getelementptr inbounds i8, ptr %557, i64 68
  %559 = load i8, ptr %558, align 4, !tbaa !45, !range !46, !noundef !47
  %560 = trunc nuw i8 %559 to i1
  br i1 %560, label %561, label %.loopexit

561:                                              ; preds = %.lr.ph432
  %562 = getelementptr inbounds i8, ptr %557, i64 32
  %563 = call noundef ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %562)
  %564 = call noundef ptr @_ZNK3JPH5ArrayIiNS_12STLAllocatorIiEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %562)
  %.not298425 = icmp eq ptr %563, %564
  br i1 %.not298425, label %.loopexit, label %.lr.ph428

.lr.ph428:                                        ; preds = %561, %567
  %.0217426 = phi ptr [ %568, %567 ], [ %563, %561 ]
  %565 = load i32, ptr %.0217426, align 4, !tbaa !19
  %566 = invoke noundef zeroext i1 @_ZN3JPH17ConvexHullBuilder17AssignPointToFaceEiRKNS_5ArrayIPNS0_4FaceENS_12STLAllocatorIS3_EEEEf(ptr noundef nonnull align 8 dereferenceable(56) %0, i32 noundef %565, ptr noundef nonnull align 8 dereferenceable(24) %36, float noundef %46)
          to label %567 unwind label %569

567:                                              ; preds = %.lr.ph428
  %568 = getelementptr inbounds i8, ptr %.0217426, i64 4
  %.not298 = icmp eq ptr %568, %564
  br i1 %.not298, label %.loopexit, label %.lr.ph428

569:                                              ; preds = %.lr.ph428
  %570 = landingpad { ptr, i32 }
          cleanup
  br label %573

.loopexit:                                        ; preds = %567, %561, %.lr.ph432
  %571 = getelementptr inbounds i8, ptr %.0225430, i64 8
  %.not297 = icmp eq ptr %571, %554
  br i1 %.not297, label %._crit_edge433, label %.lr.ph432

.thread458:                                       ; preds = %._crit_edge433
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.backedge.outer, !llvm.loop !39

572:                                              ; preds = %.critedge
  call void @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %.loopexit347

573:                                              ; preds = %569, %555
  %.pn299 = phi { ptr, i32 } [ %570, %569 ], [ %556, %555 ]
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #11
  br label %574

574:                                              ; preds = %573, %543, %489
  %.pn299.pn = phi { ptr, i32 } [ %.pn299, %573 ], [ %490, %489 ], [ %.pn293, %543 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #11
  br label %578

.loopexit347:                                     ; preds = %.thread462, %572, %.thread341
  %575 = call noundef i64 @_ZNK3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %458)
  %576 = icmp ult i64 %575, 2
  br i1 %576, label %577, label %.loopexit346

577:                                              ; preds = %.loopexit347
  store ptr @.str.8, ptr %3, align 8, !tbaa !13
  br label %.loopexit346

.loopexit346:                                     ; preds = %.thread337, %.loopexit347, %577
  %.2 = phi i32 [ 3, %577 ], [ 0, %.loopexit347 ], [ 1, %.thread337 ]
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #11
  br label %579

578:                                              ; preds = %574, %460
  %.pn306 = phi { ptr, i32 } [ %461, %460 ], [ %.pn299.pn, %574 ]
  call void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #11
  br label %580

579:                                              ; preds = %.loopexit346, %383
  %.3 = phi i32 [ %389, %383 ], [ %.2, %.loopexit346 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  br label %581

580:                                              ; preds = %578, %396
  %.pn319.pn = phi { ptr, i32 } [ %.pn319, %396 ], [ %.pn306, %578 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #11
  resume { ptr, i32 } %.pn319.pn

581:                                              ; preds = %579, %147, %142
  %.4 = phi i32 [ 4, %142 ], [ 0, %147 ], [ %.3, %579 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #11
  br label %582

582:                                              ; preds = %581, %40
  %.5 = phi i32 [ 2, %40 ], [ %.4, %581 ]
  ret i32 %.5
}

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

; 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 uwtable
declare dso_local noundef ptr @_ZN3JPH17ConvexHullBuilder14CreateTriangleEiii(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder9sLinkFaceEPNS0_4EdgeES2_(ptr noundef, ptr noundef) 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 #7 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 #5 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH5ArrayINS_4Vec3ENS_12STLAllocatorIS1_EEE12emplace_backIJfffEEERS1_DpOT_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #6 align 2

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

declare void @_ZN3JPH19ConvexHullBuilder2DC1ERKNS_5ArrayINS_4Vec3ENS_12STLAllocatorIS2_EEEE(ptr noundef nonnull align 8 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #9

declare noundef i32 @_ZN3JPH19ConvexHullBuilder2D10InitializeEiiiifRNS_5ArrayIiNS_12STLAllocatorIiEEEE(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #9

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayIPNS_17ConvexHullBuilder4EdgeENS_12STLAllocatorIS3_EEE9push_backERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 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 #6 align 2

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN3JPH19ConvexHullBuilder2DD1Ev(ptr noundef nonnull align 8 dereferenceable(20)) unnamed_addr #10

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_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_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_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 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_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 4 dereferenceable(8) ptr @_ZN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH17ConvexHullBuilder19GarbageCollectFacesEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3 align 2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { 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 #8 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { "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 #10 = { nounwind "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, !7, i64 0}
!6 = !{!"_ZTSN3JPH17ConvexHullBuilderE", !7, i64 0, !10, i64 8, !12, i64 32}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN3JPH5ArrayIPNS_17ConvexHullBuilder4FaceENS_12STLAllocatorIS3_EEEE", !11, i64 0, !11, i64 8, !7, i64 16}
!11 = !{!"long", !8, i64 0}
!12 = !{!"_ZTSN3JPH5ArrayINS_17ConvexHullBuilder8CoplanarENS_12STLAllocatorIS2_EEEE", !11, i64 0, !11, i64 8, !7, i64 16}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !8, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{i64 2157044375}
!19 = !{!20, !20, i64 0}
!20 = !{!"int", !8, i64 0}
!21 = !{!8, !8, i64 0}
!22 = distinct !{!22, !17}
!23 = !{i64 2157044689}
!24 = distinct !{!24, !17}
!25 = !{i64 2157045003}
!26 = !{!27, !7, i64 56}
!27 = !{!"_ZTSN3JPH17ConvexHullBuilder4FaceE", !28, i64 0, !28, i64 16, !29, i64 32, !7, i64 56, !15, i64 64, !30, i64 68}
!28 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!29 = !{!"_ZTSN3JPH5ArrayIiNS_12STLAllocatorIiEEEE", !11, i64 0, !11, i64 8, !7, i64 16}
!30 = !{!"bool", !8, i64 0}
!31 = !{!32, !7, i64 8}
!32 = !{!"_ZTSN3JPH17ConvexHullBuilder4EdgeE", !7, i64 0, !7, i64 8, !7, i64 16, !20, i64 24}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = !{i64 0, i64 16, !21}
!37 = distinct !{!37, !17}
!38 = !{!27, !15, i64 64}
!39 = distinct !{!39, !17}
!40 = !{!41, !20, i64 0}
!41 = !{!"_ZTSN3JPH17ConvexHullBuilder8CoplanarE", !20, i64 0, !15, i64 4}
!42 = !{!41, !15, i64 4}
!43 = distinct !{!43, !17}
!44 = distinct !{!44, !17}
!45 = !{!27, !30, i64 68}
!46 = !{i8 0, i8 2}
!47 = !{}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass