; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Collision (ManifoldBetweenTwoFaces)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::StaticArray" = type { i32, [12 x i8], [64 x %"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage" = type { [16 x i8] }
%"class.JPH::StaticArray.0" = type { i32, [64 x %"struct.JPH::StaticArray<float, 64>::Storage"] }
%"struct.JPH::StaticArray<float, 64>::Storage" = type { [4 x i8] }
%"class.JPH::StaticArray.1" = type { i32, [12 x i8], [4 x %"struct.JPH::StaticArray<JPH::Vec3, 4>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 4>::Storage" = type { [16 x i8] }

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH18PruneContactPointsENS_4Vec3ERNS_11StaticArrayIS0_Lj64EEES3_(double %0, double %1, ptr noundef nonnull align 16 dereferenceable(1040) %2, ptr noundef nonnull align 16 dereferenceable(1040) %3) #1 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %"struct.JPH::AssertLastParam", align 1
  %9 = alloca %"struct.JPH::AssertLastParam", align 1
  %10 = alloca %"struct.JPH::AssertLastParam", align 1
  %11 = alloca float, align 4
  %12 = alloca %"class.JPH::StaticArray", align 16
  %13 = alloca %"class.JPH::StaticArray.0", align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %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::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca float, align 4
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca i32, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"struct.JPH::AssertLastParam", align 1
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca i32, align 4
  %50 = alloca float, align 4
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Vec3", align 16
  %53 = alloca %"class.JPH::StaticArray.1", align 16
  %54 = alloca %"class.JPH::StaticArray.1", align 16
  %55 = alloca %"struct.JPH::AssertLastParam", align 1
  %56 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  store double %0, ptr %56, align 16
  %57 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  store double %1, ptr %57, align 8
  store ptr %2, ptr %6, align 8, !tbaa !5
  store ptr %3, ptr %7, align 8, !tbaa !5
  br label %58

58:                                               ; preds = %4
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %59)
  %61 = icmp ugt i32 %60, 4
  br i1 %61, label %65, label %62

62:                                               ; preds = %58
  %63 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 19)
  br i1 %63, label %64, label %65

64:                                               ; preds = %62
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !9
  br label %65

65:                                               ; preds = %64, %62, %58
  br label %66

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66
  %68 = load ptr, ptr %6, align 8, !tbaa !5
  %69 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %68)
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %70)
  %72 = icmp eq i32 %69, %71
  br i1 %72, label %76, label %73

73:                                               ; preds = %67
  %74 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 22)
  br i1 %74, label %75, label %76

75:                                               ; preds = %73
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !10
  br label %76

76:                                               ; preds = %75, %73, %67
  br label %77

77:                                               ; preds = %76
  br label %78

78:                                               ; preds = %77
  %79 = call noundef zeroext i1 @_ZNK3JPH4Vec312IsNormalizedEf(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 0x3EB0C6F7A0000000)
  br i1 %79, label %83, label %80

80:                                               ; preds = %78
  %81 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 25)
  br i1 %81, label %82, label %83

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

83:                                               ; preds = %82, %80, %78
  br label %84

84:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store float 0x3EB0C6F7A0000000, ptr %11, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1040, ptr %12) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEC2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %12) #9
  call void @llvm.lifetime.start.p0(i64 260, ptr %13) #9
  call void @_ZN3JPH11StaticArrayIfLj64EEC2Ev(ptr noundef nonnull align 4 dereferenceable(260) %13) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 0, ptr %14, align 4, !tbaa !14
  br label %85

85:                                               ; preds = %153, %84
  %86 = load i32, ptr %14, align 4, !tbaa !14
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %87)
          to label %89 unwind label %92

89:                                               ; preds = %85
  %90 = icmp ult i32 %86, %88
  br i1 %90, label %96, label %91

91:                                               ; preds = %89
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %175

92:                                               ; preds = %85
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %15, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %16, align 4
  br label %174

96:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #9
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = load i32, ptr %14, align 4, !tbaa !14
  %99 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %97, i32 noundef %98)
          to label %100 unwind label %156

100:                                              ; preds = %96
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 16 %99, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %20, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !16
  %101 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %102 = load double, ptr %101, align 16
  %103 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %104 = load double, ptr %103, align 8
  %105 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %102, double %104)
          to label %106 unwind label %160

106:                                              ; preds = %100
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !16
  %107 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %108 = load double, ptr %107, align 16
  %109 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %110 = load double, ptr %109, align 8
  %111 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %105, double %108, double %110)
          to label %112 unwind label %160

112:                                              ; preds = %106
  %113 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i32 0, i32 0
  %114 = getelementptr inbounds %union.anon, ptr %113, i32 0, i32 0
  %115 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 0
  %116 = extractvalue { double, double } %111, 0
  store double %116, ptr %115, align 16
  %117 = getelementptr inbounds { double, double }, ptr %114, i32 0, i32 1
  %118 = extractvalue { double, double } %111, 1
  store double %118, ptr %117, align 8
  %119 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %120 = load double, ptr %119, align 16
  %121 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %122 = load double, ptr %121, align 8
  %123 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %120, double %122)
          to label %124 unwind label %160

124:                                              ; preds = %112
  %125 = getelementptr inbounds %"class.JPH::Vec3", ptr %18, i32 0, i32 0
  %126 = getelementptr inbounds %union.anon, ptr %125, i32 0, i32 0
  %127 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 0
  %128 = extractvalue { double, double } %123, 0
  store double %128, ptr %127, align 16
  %129 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 1
  %130 = extractvalue { double, double } %123, 1
  store double %130, ptr %129, align 8
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(1040) %12, ptr noundef nonnull align 16 dereferenceable(16) %18)
          to label %131 unwind label %160

131:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #9
  %132 = load ptr, ptr %7, align 8, !tbaa !5
  %133 = load i32, ptr %14, align 4, !tbaa !14
  %134 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %132, i32 noundef %133)
          to label %135 unwind label %164

135:                                              ; preds = %131
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %134, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 %17, i64 16, i1 false), !tbaa.struct !16
  %136 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %137 = load double, ptr %136, align 16
  %138 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %139 = load double, ptr %138, align 8
  %140 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %22, double %137, double %139)
          to label %141 unwind label %168

141:                                              ; preds = %135
  %142 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %143 = getelementptr inbounds %union.anon, ptr %142, i32 0, i32 0
  %144 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 0
  %145 = extractvalue { double, double } %140, 0
  store double %145, ptr %144, align 16
  %146 = getelementptr inbounds { double, double }, ptr %143, i32 0, i32 1
  %147 = extractvalue { double, double } %140, 1
  store double %147, ptr %146, align 8
  %148 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %24)
          to label %149 unwind label %168

149:                                              ; preds = %141
  store float %148, ptr %23, align 4, !tbaa !12
  %150 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %151 unwind label %168

151:                                              ; preds = %149
  invoke void @_ZN3JPH11StaticArrayIfLj64EE9push_backERKf(ptr noundef nonnull align 4 dereferenceable(260) %13, ptr noundef nonnull align 4 dereferenceable(4) %150)
          to label %152 unwind label %168

152:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #9
  br label %153

153:                                              ; preds = %152
  %154 = load i32, ptr %14, align 4, !tbaa !14
  %155 = add i32 %154, 1
  store i32 %155, ptr %14, align 4, !tbaa !14
  br label %85, !llvm.loop !18

156:                                              ; preds = %96
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %15, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %16, align 4
  br label %173

160:                                              ; preds = %124, %112, %106, %100
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %15, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #9
  br label %173

164:                                              ; preds = %131
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %15, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %16, align 4
  br label %172

168:                                              ; preds = %151, %149, %141, %135
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %15, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %172

172:                                              ; preds = %168, %164
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #9
  br label %173

173:                                              ; preds = %172, %160, %156
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #9
  br label %174

174:                                              ; preds = %173, %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %483

175:                                              ; preds = %91
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %176 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef 0)
          to label %177 unwind label %193

177:                                              ; preds = %175
  %178 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %176)
          to label %179 unwind label %193

179:                                              ; preds = %177
  store float %178, ptr %28, align 4, !tbaa !12
  %180 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %181 unwind label %193

181:                                              ; preds = %179
  %182 = load float, ptr %180, align 4, !tbaa !12
  %183 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %13, i32 noundef 0)
          to label %184 unwind label %193

184:                                              ; preds = %181
  %185 = load float, ptr %183, align 4, !tbaa !12
  %186 = fmul float %182, %185
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  store float %186, ptr %27, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  store i32 0, ptr %29, align 4, !tbaa !14
  br label %187

187:                                              ; preds = %226, %184
  %188 = load i32, ptr %29, align 4, !tbaa !14
  %189 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %12)
          to label %190 unwind label %197

190:                                              ; preds = %187
  %191 = icmp ult i32 %188, %189
  br i1 %191, label %201, label %192

192:                                              ; preds = %190
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %230

193:                                              ; preds = %181, %179, %177, %175
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %15, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %482

197:                                              ; preds = %187
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %15, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %16, align 4
  br label %229

201:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %202 = load i32, ptr %29, align 4, !tbaa !14
  %203 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef %202)
          to label %204 unwind label %221

204:                                              ; preds = %201
  %205 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %203)
          to label %206 unwind label %221

206:                                              ; preds = %204
  store float %205, ptr %31, align 4, !tbaa !12
  %207 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %208 unwind label %221

208:                                              ; preds = %206
  %209 = load float, ptr %207, align 4, !tbaa !12
  %210 = load i32, ptr %29, align 4, !tbaa !14
  %211 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %13, i32 noundef %210)
          to label %212 unwind label %221

212:                                              ; preds = %208
  %213 = load float, ptr %211, align 4, !tbaa !12
  %214 = fmul float %209, %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  store float %214, ptr %30, align 4, !tbaa !12
  %215 = load float, ptr %30, align 4, !tbaa !12
  %216 = load float, ptr %27, align 4, !tbaa !12
  %217 = fcmp ogt float %215, %216
  br i1 %217, label %218, label %225

218:                                              ; preds = %212
  %219 = load float, ptr %30, align 4, !tbaa !12
  store float %219, ptr %27, align 4, !tbaa !12
  %220 = load i32, ptr %29, align 4, !tbaa !14
  store i32 %220, ptr %26, align 4, !tbaa !14
  br label %225

221:                                              ; preds = %208, %206, %204, %201
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %15, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %229

225:                                              ; preds = %218, %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %29, align 4, !tbaa !14
  %228 = add i32 %227, 1
  store i32 %228, ptr %29, align 4, !tbaa !14
  br label %187, !llvm.loop !20

229:                                              ; preds = %221, %197
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %482

230:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #9
  %231 = load i32, ptr %26, align 4, !tbaa !14
  %232 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef %231)
          to label %233 unwind label %240

233:                                              ; preds = %230
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %232, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 -1, ptr %33, align 4, !tbaa !14
  store float 0xC7EFFFFFE0000000, ptr %27, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  store i32 0, ptr %34, align 4, !tbaa !14
  br label %234

234:                                              ; preds = %290, %233
  %235 = load i32, ptr %34, align 4, !tbaa !14
  %236 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %12)
          to label %237 unwind label %244

237:                                              ; preds = %234
  %238 = icmp ult i32 %235, %236
  br i1 %238, label %248, label %239

239:                                              ; preds = %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %294

240:                                              ; preds = %230
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %15, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %16, align 4
  br label %481

244:                                              ; preds = %234
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %15, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %16, align 4
  br label %293

248:                                              ; preds = %237
  %249 = load i32, ptr %34, align 4, !tbaa !14
  %250 = load i32, ptr %26, align 4, !tbaa !14
  %251 = icmp ne i32 %249, %250
  br i1 %251, label %252, label %289

252:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #9
  %253 = load i32, ptr %34, align 4, !tbaa !14
  %254 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef %253)
          to label %255 unwind label %284

255:                                              ; preds = %252
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !16
  %256 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %257 = load double, ptr %256, align 16
  %258 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %259 = load double, ptr %258, align 8
  %260 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %254, double %257, double %259)
          to label %261 unwind label %284

261:                                              ; preds = %255
  %262 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %263 = getelementptr inbounds %union.anon, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 0
  %265 = extractvalue { double, double } %260, 0
  store double %265, ptr %264, align 16
  %266 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 1
  %267 = extractvalue { double, double } %260, 1
  store double %267, ptr %266, align 8
  %268 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %37)
          to label %269 unwind label %284

269:                                              ; preds = %261
  store float %268, ptr %36, align 4, !tbaa !12
  %270 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %271 unwind label %284

271:                                              ; preds = %269
  %272 = load float, ptr %270, align 4, !tbaa !12
  %273 = load i32, ptr %34, align 4, !tbaa !14
  %274 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %13, i32 noundef %273)
          to label %275 unwind label %284

275:                                              ; preds = %271
  %276 = load float, ptr %274, align 4, !tbaa !12
  %277 = fmul float %272, %276
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  store float %277, ptr %35, align 4, !tbaa !12
  %278 = load float, ptr %35, align 4, !tbaa !12
  %279 = load float, ptr %27, align 4, !tbaa !12
  %280 = fcmp ogt float %278, %279
  br i1 %280, label %281, label %288

281:                                              ; preds = %275
  %282 = load float, ptr %35, align 4, !tbaa !12
  store float %282, ptr %27, align 4, !tbaa !12
  %283 = load i32, ptr %34, align 4, !tbaa !14
  store i32 %283, ptr %33, align 4, !tbaa !14
  br label %288

284:                                              ; preds = %271, %269, %261, %255, %252
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %15, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %293

288:                                              ; preds = %281, %275
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %289

289:                                              ; preds = %288, %248
  br label %290

290:                                              ; preds = %289
  %291 = load i32, ptr %34, align 4, !tbaa !14
  %292 = add i32 %291, 1
  store i32 %292, ptr %34, align 4, !tbaa !14
  br label %234, !llvm.loop !21

293:                                              ; preds = %284, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %480

294:                                              ; preds = %239
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %33, align 4, !tbaa !14
  %297 = icmp ne i32 %296, -1
  br i1 %297, label %306, label %298

298:                                              ; preds = %295
  %299 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 74)
          to label %300 unwind label %302

300:                                              ; preds = %298
  br i1 %299, label %301, label %306

301:                                              ; preds = %300
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !22
  br label %306

302:                                              ; preds = %298
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %15, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %16, align 4
  br label %480

306:                                              ; preds = %301, %300, %295
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #9
  %309 = load i32, ptr %33, align 4, !tbaa !14
  %310 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef %309)
          to label %311 unwind label %342

311:                                              ; preds = %308
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %310, i64 16, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 -1, ptr %41, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 -1, ptr %42, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  store float 0.000000e+00, ptr %43, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store float 0.000000e+00, ptr %44, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !16
  %312 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %313 = load double, ptr %312, align 16
  %314 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %315 = load double, ptr %314, align 8
  %316 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %40, double %313, double %315)
          to label %317 unwind label %346

317:                                              ; preds = %311
  %318 = getelementptr inbounds %"class.JPH::Vec3", ptr %46, i32 0, i32 0
  %319 = getelementptr inbounds %union.anon, ptr %318, i32 0, i32 0
  %320 = getelementptr inbounds { double, double }, ptr %319, i32 0, i32 0
  %321 = extractvalue { double, double } %316, 0
  store double %321, ptr %320, align 16
  %322 = getelementptr inbounds { double, double }, ptr %319, i32 0, i32 1
  %323 = extractvalue { double, double } %316, 1
  store double %323, ptr %322, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %48, ptr align 16 %5, i64 16, i1 false), !tbaa.struct !16
  %324 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %325 = load double, ptr %324, align 16
  %326 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %327 = load double, ptr %326, align 8
  %328 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %46, double %325, double %327)
          to label %329 unwind label %346

329:                                              ; preds = %317
  %330 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %331 = getelementptr inbounds %union.anon, ptr %330, i32 0, i32 0
  %332 = getelementptr inbounds { double, double }, ptr %331, i32 0, i32 0
  %333 = extractvalue { double, double } %328, 0
  store double %333, ptr %332, align 16
  %334 = getelementptr inbounds { double, double }, ptr %331, i32 0, i32 1
  %335 = extractvalue { double, double } %328, 1
  store double %335, ptr %334, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  store i32 0, ptr %49, align 4, !tbaa !14
  br label %336

336:                                              ; preds = %404, %329
  %337 = load i32, ptr %49, align 4, !tbaa !14
  %338 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %12)
          to label %339 unwind label %350

339:                                              ; preds = %336
  %340 = icmp ult i32 %337, %338
  br i1 %340, label %354, label %341

341:                                              ; preds = %339
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %408

342:                                              ; preds = %308
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %15, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %16, align 4
  br label %479

346:                                              ; preds = %317, %311
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %15, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #9
  br label %478

350:                                              ; preds = %336
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %15, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %16, align 4
  br label %407

354:                                              ; preds = %339
  %355 = load i32, ptr %49, align 4, !tbaa !14
  %356 = load i32, ptr %26, align 4, !tbaa !14
  %357 = icmp ne i32 %355, %356
  br i1 %357, label %358, label %403

358:                                              ; preds = %354
  %359 = load i32, ptr %49, align 4, !tbaa !14
  %360 = load i32, ptr %33, align 4, !tbaa !14
  %361 = icmp ne i32 %359, %360
  br i1 %361, label %362, label %403

362:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  %363 = load i32, ptr %49, align 4, !tbaa !14
  %364 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %12, i32 noundef %363)
          to label %365 unwind label %390

365:                                              ; preds = %362
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %52, ptr align 16 %32, i64 16, i1 false), !tbaa.struct !16
  %366 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %367 = load double, ptr %366, align 16
  %368 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  %369 = load double, ptr %368, align 8
  %370 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %364, double %367, double %369)
          to label %371 unwind label %390

371:                                              ; preds = %365
  %372 = getelementptr inbounds %"class.JPH::Vec3", ptr %51, i32 0, i32 0
  %373 = getelementptr inbounds %union.anon, ptr %372, i32 0, i32 0
  %374 = getelementptr inbounds { double, double }, ptr %373, i32 0, i32 0
  %375 = extractvalue { double, double } %370, 0
  store double %375, ptr %374, align 16
  %376 = getelementptr inbounds { double, double }, ptr %373, i32 0, i32 1
  %377 = extractvalue { double, double } %370, 1
  store double %377, ptr %376, align 8
  %378 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %379 = load double, ptr %378, align 16
  %380 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %381 = load double, ptr %380, align 8
  %382 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %45, double %379, double %381)
          to label %383 unwind label %390

383:                                              ; preds = %371
  store float %382, ptr %50, align 4, !tbaa !12
  %384 = load float, ptr %50, align 4, !tbaa !12
  %385 = load float, ptr %43, align 4, !tbaa !12
  %386 = fcmp olt float %384, %385
  br i1 %386, label %387, label %394

387:                                              ; preds = %383
  %388 = load float, ptr %50, align 4, !tbaa !12
  store float %388, ptr %43, align 4, !tbaa !12
  %389 = load i32, ptr %49, align 4, !tbaa !14
  store i32 %389, ptr %41, align 4, !tbaa !14
  br label %402

390:                                              ; preds = %371, %365, %362
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %15, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %407

394:                                              ; preds = %383
  %395 = load float, ptr %50, align 4, !tbaa !12
  %396 = load float, ptr %44, align 4, !tbaa !12
  %397 = fcmp ogt float %395, %396
  br i1 %397, label %398, label %401

398:                                              ; preds = %394
  %399 = load float, ptr %50, align 4, !tbaa !12
  store float %399, ptr %44, align 4, !tbaa !12
  %400 = load i32, ptr %49, align 4, !tbaa !14
  store i32 %400, ptr %42, align 4, !tbaa !14
  br label %401

401:                                              ; preds = %398, %394
  br label %402

402:                                              ; preds = %401, %387
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  br label %403

403:                                              ; preds = %402, %358, %354
  br label %404

404:                                              ; preds = %403
  %405 = load i32, ptr %49, align 4, !tbaa !14
  %406 = add i32 %405, 1
  store i32 %406, ptr %49, align 4, !tbaa !14
  br label %336, !llvm.loop !23

407:                                              ; preds = %390, %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %478

408:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 80, ptr %53) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80) %53) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr %54) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80) %54) #9
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = load i32, ptr %26, align 4, !tbaa !14
  %411 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %409, i32 noundef %410)
          to label %412 unwind label %432

412:                                              ; preds = %408
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %53, ptr noundef nonnull align 16 dereferenceable(16) %411)
          to label %413 unwind label %432

413:                                              ; preds = %412
  %414 = load ptr, ptr %7, align 8, !tbaa !5
  %415 = load i32, ptr %26, align 4, !tbaa !14
  %416 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %414, i32 noundef %415)
          to label %417 unwind label %432

417:                                              ; preds = %413
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %54, ptr noundef nonnull align 16 dereferenceable(16) %416)
          to label %418 unwind label %432

418:                                              ; preds = %417
  %419 = load i32, ptr %41, align 4, !tbaa !14
  %420 = icmp ne i32 %419, -1
  br i1 %420, label %421, label %436

421:                                              ; preds = %418
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = load i32, ptr %41, align 4, !tbaa !14
  %424 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %422, i32 noundef %423)
          to label %425 unwind label %432

425:                                              ; preds = %421
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %53, ptr noundef nonnull align 16 dereferenceable(16) %424)
          to label %426 unwind label %432

426:                                              ; preds = %425
  %427 = load ptr, ptr %7, align 8, !tbaa !5
  %428 = load i32, ptr %41, align 4, !tbaa !14
  %429 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %427, i32 noundef %428)
          to label %430 unwind label %432

430:                                              ; preds = %426
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %54, ptr noundef nonnull align 16 dereferenceable(16) %429)
          to label %431 unwind label %432

431:                                              ; preds = %430
  br label %436

432:                                              ; preds = %474, %471, %469, %465, %464, %460, %454, %445, %441, %440, %436, %430, %426, %425, %421, %417, %413, %412, %408
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %15, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %16, align 4
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %54) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %54) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %53) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %53) #9
  br label %478

436:                                              ; preds = %431, %418
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = load i32, ptr %33, align 4, !tbaa !14
  %439 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %437, i32 noundef %438)
          to label %440 unwind label %432

440:                                              ; preds = %436
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %53, ptr noundef nonnull align 16 dereferenceable(16) %439)
          to label %441 unwind label %432

441:                                              ; preds = %440
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = load i32, ptr %33, align 4, !tbaa !14
  %444 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %442, i32 noundef %443)
          to label %445 unwind label %432

445:                                              ; preds = %441
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %54, ptr noundef nonnull align 16 dereferenceable(16) %444)
          to label %446 unwind label %432

446:                                              ; preds = %445
  %447 = load i32, ptr %42, align 4, !tbaa !14
  %448 = icmp ne i32 %447, -1
  br i1 %448, label %449, label %471

449:                                              ; preds = %446
  br label %450

450:                                              ; preds = %449
  %451 = load i32, ptr %41, align 4, !tbaa !14
  %452 = load i32, ptr %42, align 4, !tbaa !14
  %453 = icmp ne i32 %451, %452
  br i1 %453, label %458, label %454

454:                                              ; preds = %450
  %455 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 112)
          to label %456 unwind label %432

456:                                              ; preds = %454
  br i1 %455, label %457, label %458

457:                                              ; preds = %456
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !24
  br label %458

458:                                              ; preds = %457, %456, %450
  br label %459

459:                                              ; preds = %458
  br label %460

460:                                              ; preds = %459
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = load i32, ptr %42, align 4, !tbaa !14
  %463 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %461, i32 noundef %462)
          to label %464 unwind label %432

464:                                              ; preds = %460
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %53, ptr noundef nonnull align 16 dereferenceable(16) %463)
          to label %465 unwind label %432

465:                                              ; preds = %464
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = load i32, ptr %42, align 4, !tbaa !14
  %468 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %466, i32 noundef %467)
          to label %469 unwind label %432

469:                                              ; preds = %465
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %54, ptr noundef nonnull align 16 dereferenceable(16) %468)
          to label %470 unwind label %432

470:                                              ; preds = %469
  br label %471

471:                                              ; preds = %470, %446
  %472 = load ptr, ptr %6, align 8, !tbaa !5
  %473 = invoke noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040) %472, ptr noundef nonnull align 16 dereferenceable(80) %53)
          to label %474 unwind label %432

474:                                              ; preds = %471
  %475 = load ptr, ptr %7, align 8, !tbaa !5
  %476 = invoke noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040) %475, ptr noundef nonnull align 16 dereferenceable(80) %54)
          to label %477 unwind label %432

477:                                              ; preds = %474
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %54) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %54) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %53) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @_ZN3JPH11StaticArrayIfLj64EED2Ev(ptr noundef nonnull align 4 dereferenceable(260) %13) #9
  call void @llvm.lifetime.end.p0(i64 260, ptr %13) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %12) #9
  call void @llvm.lifetime.end.p0(i64 1040, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  ret void

478:                                              ; preds = %432, %407, %346
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %479

479:                                              ; preds = %478, %342
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  br label %480

480:                                              ; preds = %479, %302, %293
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %481

481:                                              ; preds = %480, %240
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  br label %482

482:                                              ; preds = %481, %229, %193
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %483

483:                                              ; preds = %482, %174
  call void @_ZN3JPH11StaticArrayIfLj64EED2Ev(ptr noundef nonnull align 4 dereferenceable(260) %13) #9
  call void @llvm.lifetime.end.p0(i64 260, ptr %13) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %12) #9
  call void @llvm.lifetime.end.p0(i64 1040, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %484

484:                                              ; preds = %483
  %485 = load ptr, ptr %15, align 8
  %486 = load i32, ptr %16, align 4
  %487 = insertvalue { ptr, i32 } poison, ptr %485, 0
  %488 = insertvalue { ptr, i32 } %487, i32 %486, 1
  resume { ptr, i32 } %488
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040)) #2 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH4Vec312IsNormalizedEf(ptr noundef nonnull align 16 dereferenceable(16), float noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEC2Ev(ptr noundef nonnull align 16 dereferenceable(1040)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040), i32 noundef) #1 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) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(16)) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayIfLj64EE9push_backERKf(ptr noundef nonnull align 4 dereferenceable(260), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260), i32 noundef) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(80)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040)) unnamed_addr #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { 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 #4 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { 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 = !{i64 2158437898}
!10 = !{i64 2158438316}
!11 = !{i64 2158438690}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{i64 0, i64 16, !17}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = !{i64 2158439064}
!23 = distinct !{!23, !19}
!24 = !{i64 2158439407}


; 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::StaticArray" = type { i32, [12 x i8], [64 x %"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 64>::Storage" = type { [16 x i8] }
%"class.JPH::StaticArray.0" = type { i32, [64 x %"struct.JPH::StaticArray<float, 64>::Storage"] }
%"struct.JPH::StaticArray<float, 64>::Storage" = type { [4 x i8] }
%"class.JPH::StaticArray.1" = type { i32, [12 x i8], [4 x %"struct.JPH::StaticArray<JPH::Vec3, 4>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 4>::Storage" = type { [16 x i8] }

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH18PruneContactPointsENS_4Vec3ERNS_11StaticArrayIS0_Lj64EEES3_(double %0, double %1, ptr noundef nonnull align 16 dereferenceable(1040) %2, ptr noundef nonnull align 16 dereferenceable(1040) %3) local_unnamed_addr #1 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca float, align 4
  %7 = alloca %"class.JPH::StaticArray", align 16
  %8 = alloca %"class.JPH::StaticArray.0", align 4
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca float, align 4
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %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::Vec3", align 16
  %21 = alloca %"class.JPH::StaticArray.1", align 16
  %22 = alloca %"class.JPH::StaticArray.1", align 16
  store double %0, ptr %5, align 16
  %23 = getelementptr inbounds i8, ptr %5, i64 8
  store double %1, ptr %23, align 8
  %24 = tail call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %2)
  %25 = icmp ugt i32 %24, 4
  br i1 %25, label %29, label %26

26:                                               ; preds = %4
  %27 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 19)
  br i1 %27, label %28, label %29

28:                                               ; preds = %26
  tail call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !5
  br label %29

29:                                               ; preds = %28, %26, %4
  %30 = tail call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %2)
  %31 = tail call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %3)
  %32 = icmp eq i32 %30, %31
  br i1 %32, label %36, label %33

33:                                               ; preds = %29
  %34 = tail call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 22)
  br i1 %34, label %35, label %36

35:                                               ; preds = %33
  tail call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !6
  br label %36

36:                                               ; preds = %35, %33, %29
  %37 = call noundef zeroext i1 @_ZNK3JPH4Vec312IsNormalizedEf(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef 0x3EB0C6F7A0000000)
  br i1 %37, label %41, label %38

38:                                               ; preds = %36
  %39 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 25)
  br i1 %39, label %40, label %41

40:                                               ; preds = %38
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !7
  br label %41

41:                                               ; preds = %36, %38, %40
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #9
  store float 0x3EB0C6F7A0000000, ptr %6, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 1040, ptr nonnull %7) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEC2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %7) #9
  call void @llvm.lifetime.start.p0(i64 260, ptr nonnull %8) #9
  call void @_ZN3JPH11StaticArrayIfLj64EEC2Ev(ptr noundef nonnull align 4 dereferenceable(260) %8) #9
  %42 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %2)
  %.not169 = icmp eq i32 %42, 0
  br i1 %.not169, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %41
  %43 = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.257.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %44 = getelementptr inbounds i8, ptr %13, i64 8
  br label %46

._crit_edge:                                      ; preds = %67, %41
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #9
  %45 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef 0)
          to label %81 unwind label %91

46:                                               ; preds = %.lr.ph, %67
  %.0145 = phi i32 [ 0, %.lr.ph ], [ %68, %67 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  %47 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %2, i32 noundef %.0145)
          to label %48 unwind label %71

48:                                               ; preds = %46
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %9, ptr noundef nonnull align 16 dereferenceable(16) %47, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #9
  %.sroa.060.0.copyload = load double, ptr %5, align 16
  %.sroa.261.0.copyload = load double, ptr %23, align 8, !tbaa !13
  %49 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %.sroa.060.0.copyload, double %.sroa.261.0.copyload)
  %.sroa.058.0.copyload = load double, ptr %5, align 16
  %.sroa.259.0.copyload = load double, ptr %23, align 8, !tbaa !13
  %50 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %49, double %.sroa.058.0.copyload, double %.sroa.259.0.copyload)
          to label %51 unwind label %73

51:                                               ; preds = %48
  %52 = extractvalue { double, double } %50, 0
  %53 = extractvalue { double, double } %50, 1
  %54 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %52, double %53)
          to label %55 unwind label %73

55:                                               ; preds = %51
  %56 = extractvalue { double, double } %54, 0
  store double %56, ptr %10, align 16
  %57 = extractvalue { double, double } %54, 1
  store double %57, ptr %43, align 8
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(1040) %7, ptr noundef nonnull align 16 dereferenceable(16) %10)
          to label %58 unwind label %73

58:                                               ; preds = %55
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #9
  %59 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %3, i32 noundef %.0145)
          to label %60 unwind label %75

60:                                               ; preds = %58
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %11, ptr noundef nonnull align 16 dereferenceable(16) %59, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #9
  %.sroa.056.0.copyload = load double, ptr %9, align 16
  %.sroa.257.0.copyload = load double, ptr %.sroa.257.0..sroa_idx, align 8, !tbaa !13
  %61 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %.sroa.056.0.copyload, double %.sroa.257.0.copyload)
          to label %62 unwind label %77

62:                                               ; preds = %60
  %63 = extractvalue { double, double } %61, 0
  store double %63, ptr %13, align 16
  %64 = extractvalue { double, double } %61, 1
  store double %64, ptr %44, align 8
  %65 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %13)
  store float %65, ptr %12, align 4, !tbaa !8
  %66 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %12)
  invoke void @_ZN3JPH11StaticArrayIfLj64EE9push_backERKf(ptr noundef nonnull align 4 dereferenceable(260) %8, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %67 unwind label %77

67:                                               ; preds = %62
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  %68 = add nuw i32 %.0145, 1
  %69 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %2)
  %70 = icmp ult i32 %68, %69
  br i1 %70, label %46, label %._crit_edge, !llvm.loop !14

71:                                               ; preds = %46
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %80

73:                                               ; preds = %55, %51, %48
  %74 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  br label %80

75:                                               ; preds = %58
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %79

77:                                               ; preds = %62, %60
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  br label %79

79:                                               ; preds = %77, %75
  %.pn137 = phi { ptr, i32 } [ %78, %77 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  br label %80

80:                                               ; preds = %79, %73, %71
  %.pn137.pn = phi { ptr, i32 } [ %.pn137, %79 ], [ %74, %73 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  br label %215

81:                                               ; preds = %._crit_edge
  %82 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %45)
  store float %82, ptr %14, align 4, !tbaa !8
  %83 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %14)
  %84 = load float, ptr %83, align 4, !tbaa !8
  %85 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %8, i32 noundef 0)
          to label %86 unwind label %91

86:                                               ; preds = %81
  %87 = load float, ptr %85, align 4, !tbaa !8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  %88 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %.not170 = icmp eq i32 %88, 0
  br i1 %.not170, label %._crit_edge151, label %.lr.ph150.preheader

.lr.ph150.preheader:                              ; preds = %86
  %89 = fmul float %84, %87
  br label %.lr.ph150

._crit_edge151:                                   ; preds = %99, %86
  %.095.lcssa = phi i32 [ 0, %86 ], [ %.196, %99 ]
  %90 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef %.095.lcssa)
          to label %108 unwind label %111

91:                                               ; preds = %81, %._crit_edge
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  br label %215

.lr.ph150:                                        ; preds = %.lr.ph150.preheader, %99
  %.095148 = phi i32 [ %.196, %99 ], [ 0, %.lr.ph150.preheader ]
  %.097147 = phi float [ %.198, %99 ], [ %89, %.lr.ph150.preheader ]
  %.0103146 = phi i32 [ %103, %99 ], [ 0, %.lr.ph150.preheader ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #9
  %93 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef %.0103146)
          to label %94 unwind label %106

94:                                               ; preds = %.lr.ph150
  %95 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %93)
  store float %95, ptr %15, align 4, !tbaa !8
  %96 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %15)
  %97 = load float, ptr %96, align 4, !tbaa !8
  %98 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %8, i32 noundef %.0103146)
          to label %99 unwind label %106

99:                                               ; preds = %94
  %100 = load float, ptr %98, align 4, !tbaa !8
  %101 = fmul float %97, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  %102 = fcmp ogt float %101, %.097147
  %.198 = select i1 %102, float %101, float %.097147
  %.196 = select i1 %102, i32 %.0103146, i32 %.095148
  %103 = add nuw i32 %.0103146, 1
  %104 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %105 = icmp ult i32 %103, %104
  br i1 %105, label %.lr.ph150, label %._crit_edge151, !llvm.loop !16

106:                                              ; preds = %94, %.lr.ph150
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  br label %215

108:                                              ; preds = %._crit_edge151
  %.sroa.041.0.copyload = load double, ptr %90, align 16
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %90, i64 8
  %.sroa.7.0.copyload = load double, ptr %.sroa.7.0..sroa_idx, align 8, !tbaa !13
  %109 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %.not171 = icmp eq i32 %109, 0
  br i1 %.not171, label %._crit_edge157.thread, label %.lr.ph156

.lr.ph156:                                        ; preds = %108
  %110 = getelementptr inbounds i8, ptr %17, i64 8
  br label %113

._crit_edge157:                                   ; preds = %131
  %.not = icmp eq i32 %.2106, -1
  br i1 %.not, label %._crit_edge157.thread, label %140

111:                                              ; preds = %._crit_edge151
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %215

113:                                              ; preds = %.lr.ph156, %131
  %.299154 = phi float [ 0xC7EFFFFFE0000000, %.lr.ph156 ], [ %.4101, %131 ]
  %.0104153 = phi i32 [ -1, %.lr.ph156 ], [ %.2106, %131 ]
  %.0107152 = phi i32 [ 0, %.lr.ph156 ], [ %132, %131 ]
  %.not131 = icmp eq i32 %.0107152, %.095.lcssa
  br i1 %.not131, label %131, label %114

114:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #9
  %115 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef %.0107152)
          to label %116 unwind label %129

116:                                              ; preds = %114
  %117 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %115, double %.sroa.041.0.copyload, double %.sroa.7.0.copyload)
          to label %118 unwind label %129

118:                                              ; preds = %116
  %119 = extractvalue { double, double } %117, 0
  store double %119, ptr %17, align 16
  %120 = extractvalue { double, double } %117, 1
  store double %120, ptr %110, align 8
  %121 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %17)
  store float %121, ptr %16, align 4, !tbaa !8
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %123 = load float, ptr %122, align 4, !tbaa !8
  %124 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260) %8, i32 noundef %.0107152)
          to label %125 unwind label %129

125:                                              ; preds = %118
  %126 = load float, ptr %124, align 4, !tbaa !8
  %127 = fmul float %123, %126
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #9
  %128 = fcmp ogt float %127, %.299154
  %.1105 = select i1 %128, i32 %.0107152, i32 %.0104153
  %.3100 = select i1 %128, float %127, float %.299154
  br label %131

129:                                              ; preds = %118, %116, %114
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #9
  br label %215

131:                                              ; preds = %113, %125
  %.2106 = phi i32 [ %.1105, %125 ], [ %.0104153, %113 ]
  %.4101 = phi float [ %.3100, %125 ], [ %.299154, %113 ]
  %132 = add nuw i32 %.0107152, 1
  %133 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %134 = icmp ult i32 %132, %133
  br i1 %134, label %113, label %._crit_edge157, !llvm.loop !17

._crit_edge157.thread:                            ; preds = %108, %._crit_edge157
  %135 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 74)
          to label %136 unwind label %138

136:                                              ; preds = %._crit_edge157.thread
  br i1 %135, label %137, label %140

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

138:                                              ; preds = %._crit_edge157.thread
  %139 = landingpad { ptr, i32 }
          cleanup
  br label %215

140:                                              ; preds = %137, %136, %._crit_edge157
  %.0104.lcssa175 = phi i32 [ -1, %137 ], [ -1, %136 ], [ %.2106, %._crit_edge157 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #9
  %141 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef %.0104.lcssa175)
          to label %142 unwind label %155

142:                                              ; preds = %140
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %18, ptr noundef nonnull align 16 dereferenceable(16) %141, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #9
  %143 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %.sroa.041.0.copyload, double %.sroa.7.0.copyload)
          to label %144 unwind label %157

144:                                              ; preds = %142
  %145 = extractvalue { double, double } %143, 0
  store double %145, ptr %20, align 16
  %146 = getelementptr inbounds i8, ptr %20, i64 8
  %147 = extractvalue { double, double } %143, 1
  store double %147, ptr %146, align 8
  %.sroa.012.0.copyload = load double, ptr %5, align 16
  %.sroa.213.0.copyload = load double, ptr %23, align 8, !tbaa !13
  %148 = invoke { double, double } @_ZNK3JPH4Vec35CrossES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %.sroa.012.0.copyload, double %.sroa.213.0.copyload)
          to label %149 unwind label %157

149:                                              ; preds = %144
  %150 = extractvalue { double, double } %148, 0
  store double %150, ptr %19, align 16
  %151 = getelementptr inbounds i8, ptr %19, i64 8
  %152 = extractvalue { double, double } %148, 1
  store double %152, ptr %151, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #9
  %153 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %.not172 = icmp eq i32 %153, 0
  br i1 %.not172, label %._crit_edge166, label %.lr.ph165

._crit_edge166:                                   ; preds = %173, %149
  %.0117.lcssa = phi i32 [ -1, %149 ], [ %.2119, %173 ]
  %.0108.lcssa = phi i32 [ -1, %149 ], [ %.2110, %173 ]
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %21) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80) %21) #9
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %22) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80) %22) #9
  %154 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %2, i32 noundef %.095.lcssa)
          to label %177 unwind label %188

155:                                              ; preds = %140
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %214

157:                                              ; preds = %144, %142
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #9
  br label %213

.lr.ph165:                                        ; preds = %149, %173
  %.0102163 = phi i32 [ %174, %173 ], [ 0, %149 ]
  %.0108162 = phi i32 [ %.2110, %173 ], [ -1, %149 ]
  %.0111161 = phi float [ %.2113, %173 ], [ 0.000000e+00, %149 ]
  %.0114160 = phi float [ %.2116, %173 ], [ 0.000000e+00, %149 ]
  %.0117159 = phi i32 [ %.2119, %173 ], [ -1, %149 ]
  %.not127 = icmp eq i32 %.0102163, %.095.lcssa
  %.not128 = icmp eq i32 %.0102163, %.0104.lcssa175
  %or.cond = or i1 %.not127, %.not128
  br i1 %or.cond, label %173, label %159

159:                                              ; preds = %.lr.ph165
  %160 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %7, i32 noundef %.0102163)
          to label %161 unwind label %168

161:                                              ; preds = %159
  %162 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %160, double %.sroa.041.0.copyload, double %.sroa.7.0.copyload)
          to label %163 unwind label %168

163:                                              ; preds = %161
  %164 = extractvalue { double, double } %162, 0
  %165 = extractvalue { double, double } %162, 1
  %166 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %19, double %164, double %165)
  %167 = fcmp olt float %166, %.0114160
  br i1 %167, label %173, label %170

168:                                              ; preds = %161, %159
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %213

170:                                              ; preds = %163
  %171 = fcmp ogt float %166, %.0111161
  br i1 %171, label %172, label %173

172:                                              ; preds = %170
  br label %173

173:                                              ; preds = %172, %170, %163, %.lr.ph165
  %.2119 = phi i32 [ %.0117159, %.lr.ph165 ], [ %.0102163, %172 ], [ %.0117159, %170 ], [ %.0117159, %163 ]
  %.2116 = phi float [ %.0114160, %.lr.ph165 ], [ %.0114160, %172 ], [ %.0114160, %170 ], [ %166, %163 ]
  %.2113 = phi float [ %.0111161, %.lr.ph165 ], [ %166, %172 ], [ %.0111161, %170 ], [ %.0111161, %163 ]
  %.2110 = phi i32 [ %.0108162, %.lr.ph165 ], [ %.0108162, %172 ], [ %.0108162, %170 ], [ %.0102163, %163 ]
  %174 = add nuw i32 %.0102163, 1
  %175 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040) %7)
  %176 = icmp ult i32 %174, %175
  br i1 %176, label %.lr.ph165, label %._crit_edge166, !llvm.loop !19

177:                                              ; preds = %._crit_edge166
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %21, ptr noundef nonnull align 16 dereferenceable(16) %154)
          to label %178 unwind label %188

178:                                              ; preds = %177
  %179 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %3, i32 noundef %.095.lcssa)
          to label %180 unwind label %188

180:                                              ; preds = %178
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %22, ptr noundef nonnull align 16 dereferenceable(16) %179)
          to label %181 unwind label %188

181:                                              ; preds = %180
  %.not124 = icmp eq i32 %.0108.lcssa, -1
  br i1 %.not124, label %190, label %182

182:                                              ; preds = %181
  %183 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %2, i32 noundef %.0108.lcssa)
          to label %184 unwind label %188

184:                                              ; preds = %182
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %21, ptr noundef nonnull align 16 dereferenceable(16) %183)
          to label %185 unwind label %188

185:                                              ; preds = %184
  %186 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %3, i32 noundef %.0108.lcssa)
          to label %187 unwind label %188

187:                                              ; preds = %185
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %22, ptr noundef nonnull align 16 dereferenceable(16) %186)
          to label %190 unwind label %188

188:                                              ; preds = %210, %208, %207, %205, %204, %202, %198, %195, %193, %192, %190, %187, %185, %184, %182, %180, %178, %177, %._crit_edge166
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %22) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %22) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %21) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %21) #9
  br label %213

190:                                              ; preds = %187, %181
  %191 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %2, i32 noundef %.0104.lcssa175)
          to label %192 unwind label %188

192:                                              ; preds = %190
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %21, ptr noundef nonnull align 16 dereferenceable(16) %191)
          to label %193 unwind label %188

193:                                              ; preds = %192
  %194 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %3, i32 noundef %.0104.lcssa175)
          to label %195 unwind label %188

195:                                              ; preds = %193
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %22, ptr noundef nonnull align 16 dereferenceable(16) %194)
          to label %196 unwind label %188

196:                                              ; preds = %195
  %.not125 = icmp eq i32 %.0117.lcssa, -1
  br i1 %.not125, label %208, label %197

197:                                              ; preds = %196
  %.not126 = icmp eq i32 %.0108.lcssa, %.0117.lcssa
  br i1 %.not126, label %198, label %202

198:                                              ; preds = %197
  %199 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 112)
          to label %200 unwind label %188

200:                                              ; preds = %198
  br i1 %199, label %201, label %202

201:                                              ; preds = %200
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !20
  br label %202

202:                                              ; preds = %201, %200, %197
  %203 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %2, i32 noundef %.0117.lcssa)
          to label %204 unwind label %188

204:                                              ; preds = %202
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %21, ptr noundef nonnull align 16 dereferenceable(16) %203)
          to label %205 unwind label %188

205:                                              ; preds = %204
  %206 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040) %3, i32 noundef %.0117.lcssa)
          to label %207 unwind label %188

207:                                              ; preds = %205
  invoke void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80) %22, ptr noundef nonnull align 16 dereferenceable(16) %206)
          to label %208 unwind label %188

208:                                              ; preds = %207, %196
  %209 = invoke noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040) %2, ptr noundef nonnull align 16 dereferenceable(80) %21)
          to label %210 unwind label %188

210:                                              ; preds = %208
  %211 = invoke noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040) %3, ptr noundef nonnull align 16 dereferenceable(80) %22)
          to label %212 unwind label %188

212:                                              ; preds = %210
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %22) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %22) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80) %21) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  call void @_ZN3JPH11StaticArrayIfLj64EED2Ev(ptr noundef nonnull align 4 dereferenceable(260) %8) #9
  call void @llvm.lifetime.end.p0(i64 260, ptr nonnull %8) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %7) #9
  call void @llvm.lifetime.end.p0(i64 1040, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  ret void

213:                                              ; preds = %188, %168, %157
  %.pn = phi { ptr, i32 } [ %169, %168 ], [ %189, %188 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #9
  br label %214

214:                                              ; preds = %213, %155
  %.pn.pn = phi { ptr, i32 } [ %.pn, %213 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  br label %215

215:                                              ; preds = %91, %106, %129, %138, %214, %111, %80
  %.pn137.pn.pn = phi { ptr, i32 } [ %.pn137.pn, %80 ], [ %107, %106 ], [ %92, %91 ], [ %112, %111 ], [ %130, %129 ], [ %.pn.pn, %214 ], [ %139, %138 ]
  call void @_ZN3JPH11StaticArrayIfLj64EED2Ev(ptr noundef nonnull align 4 dereferenceable(260) %8) #9
  call void @llvm.lifetime.end.p0(i64 260, ptr nonnull %8) #9
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040) %7) #9
  call void @llvm.lifetime.end.p0(i64 1040, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  resume { ptr, i32 } %.pn137.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj64EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(1040)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEC2Ev(ptr noundef nonnull align 16 dereferenceable(1040)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEixEj(ptr noundef nonnull align 16 dereferenceable(1040), i32 noundef) local_unnamed_addr #1 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) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayIfLj64EE9push_backERKf(ptr noundef nonnull align 4 dereferenceable(260), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; 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 #8

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH11StaticArrayIfLj64EEixEj(ptr noundef nonnull align 4 dereferenceable(260), i32 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EEC2Ev(ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EE9push_backERKS1_(ptr noundef nonnull align 16 dereferenceable(80), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 16 dereferenceable(1040) ptr @_ZN3JPH11StaticArrayINS_4Vec3ELj64EEaSILj4EEERS2_RKNS0_IS1_XT_EEE(ptr noundef nonnull align 16 dereferenceable(1040), ptr noundef nonnull align 16 dereferenceable(80)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj4EED2Ev(ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11StaticArrayINS_4Vec3ELj64EED2Ev(ptr noundef nonnull align 16 dereferenceable(1040)) unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 = { 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 #4 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { 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 = !{i64 2158437898}
!6 = !{i64 2158438316}
!7 = !{i64 2158438690}
!8 = !{!9, !9, i64 0}
!9 = !{!"float", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{i64 0, i64 16, !13}
!13 = !{!10, !10, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = !{i64 2158439064}
!19 = distinct !{!19, !15}
!20 = !{i64 2158439407}


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