; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/ConvexCollision (EPATest)

; 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::Color" = type { %union.anon.5 }
%union.anon.5 = type { i32 }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"struct.JPH::TransformedConvexObject" = type <{ %"class.JPH::Mat44", ptr, [8 x i8] }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"struct.JPH::TransformedConvexObject.6" = type <{ %"class.JPH::Mat44", ptr, [8 x i8] }>
%"class.JPH::EPAPenetrationDepth" = type { %"class.JPH::GJKClosestPoint", float, [12 x i8] }
%"class.JPH::GJKClosestPoint" = type <{ [4 x %"class.JPH::Vec3"], [4 x %"class.JPH::Vec3"], [4 x %"class.JPH::Vec3"], i32, [12 x i8] }>
%"struct.JPH::AssertLastParam" = type { i8 }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str.2 = external hidden unnamed_addr constant [94 x i8], align 1
@_ZN3JPH5Color5sGreyE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color4sRedE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sGreenE = external global %"class.JPH::Color", align 4
@_ZN3JPH5Color7sYellowE = external global %"class.JPH::Color", align 4
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN3JPH5Color7sOrangeE = external global %"class.JPH::Color", align 4
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZN3JPH5TraceE = external global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [15 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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK7EPATest16CollideBoxSphereERKN3JPH5Mat44ERKNS0_5AABoxERKNS0_6SphereE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef nonnull align 16 dereferenceable(32) %2, ptr noundef nonnull align 4 dereferenceable(16) %3) #2 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.JPH::Color", align 4
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Color", align 4
  %13 = alloca %"struct.JPH::TransformedConvexObject", align 16
  %14 = alloca %"struct.JPH::TransformedConvexObject.6", align 16
  %15 = alloca %"class.JPH::EPAPenetrationDepth", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca i8, align 1
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Color", align 4
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Color", align 4
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Color", align 4
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca i8, align 1
  %37 = alloca %"struct.JPH::AssertLastParam", align 1
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca %"class.JPH::Vec3", align 16
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.JPH::Vec3", align 16
  %46 = alloca %"class.JPH::Vec3", align 16
  %47 = alloca %"class.JPH::Vec3", align 16
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Color", align 4
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Color", align 4
  %53 = alloca float, align 4
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca %"struct.JPH::AssertLastParam", align 1
  %58 = alloca %"class.JPH::Vec3", align 16
  %59 = alloca %"class.JPH::Vec3", align 16
  %60 = alloca %"struct.JPH::AssertLastParam", align 1
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"struct.JPH::AssertLastParam", align 1
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %64 = load ptr, ptr %5, align 8
  %65 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %66 = load ptr, ptr %65, align 8, !tbaa !9
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 @_ZN3JPH5Color5sGreyE, i64 4, i1 false), !tbaa.struct !18
  %69 = getelementptr inbounds %"class.JPH::Color", ptr %9, i32 0, i32 0
  %70 = getelementptr inbounds %union.anon.5, ptr %69, i32 0, i32 0
  %71 = load i32, ptr %70, align 4
  call void @_Z9DrawBoxSPPN3JPH13DebugRendererERKNS_5Mat44ERKNS_5AABoxENS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef %66, ptr noundef nonnull align 16 dereferenceable(64) %67, ptr noundef nonnull align 16 dereferenceable(32) %68, i32 %71, i32 noundef 0, i32 noundef 0)
  %72 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %73 = load ptr, ptr %72, align 8, !tbaa !9
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %75)
  %77 = getelementptr inbounds %"class.JPH::Vec3", ptr %11, i32 0, i32 0
  %78 = getelementptr inbounds %union.anon, ptr %77, i32 0, i32 0
  %79 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 0
  %80 = extractvalue { double, double } %76, 0
  store double %80, ptr %79, align 16
  %81 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 1
  %82 = extractvalue { double, double } %76, 1
  store double %82, ptr %81, align 8
  %83 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %84 = load double, ptr %83, align 16
  %85 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %86 = load double, ptr %85, align 8
  %87 = call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %74, double %84, double %86)
  %88 = getelementptr inbounds %"class.JPH::Vec3", ptr %10, i32 0, i32 0
  %89 = getelementptr inbounds %union.anon, ptr %88, i32 0, i32 0
  %90 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 0
  %91 = extractvalue { double, double } %87, 0
  store double %91, ptr %90, align 16
  %92 = getelementptr inbounds { double, double }, ptr %89, i32 0, i32 1
  %93 = extractvalue { double, double } %87, 1
  store double %93, ptr %92, align 8
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %94)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 @_ZN3JPH5Color5sGreyE, i64 4, i1 false), !tbaa.struct !18
  %96 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %97 = load double, ptr %96, align 16
  %98 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %99 = load double, ptr %98, align 8
  %100 = getelementptr inbounds %"class.JPH::Color", ptr %12, i32 0, i32 0
  %101 = getelementptr inbounds %union.anon.5, ptr %100, i32 0, i32 0
  %102 = load i32, ptr %101, align 4
  call void @_Z12DrawSphereSPPN3JPH13DebugRendererENS_4Vec3EfNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef %73, double %97, double %99, float noundef %95, i32 %102, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 80, ptr %13) #9
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN3JPH23TransformedConvexObjectINS_5AABoxEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72) %13, ptr noundef nonnull align 16 dereferenceable(64) %103, ptr noundef nonnull align 16 dereferenceable(32) %104)
  call void @llvm.lifetime.start.p0(i64 80, ptr %14) #9
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN3JPH23TransformedConvexObjectINS_6SphereEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72) %14, ptr noundef nonnull align 16 dereferenceable(64) %105, ptr noundef nonnull align 4 dereferenceable(16) %106)
  call void @llvm.lifetime.start.p0(i64 224, ptr %15) #9
  call void @_ZN3JPH19EPAPenetrationDepthC2Ev(ptr noundef nonnull align 16 dereferenceable(212) %15) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #9
  %107 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %108 = getelementptr inbounds %"class.JPH::Vec3", ptr %16, i32 0, i32 0
  %109 = getelementptr inbounds %union.anon, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 0
  %111 = extractvalue { double, double } %107, 0
  store double %111, ptr %110, align 16
  %112 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 1
  %113 = extractvalue { double, double } %107, 1
  store double %113, ptr %112, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  %114 = call noundef zeroext i1 @_ZN3JPH19EPAPenetrationDepth19GetPenetrationDepthINS_23TransformedConvexObjectINS_5AABoxEEES4_NS2_INS_6SphereEEES6_EEbRKT_RKT0_fRKT1_RKT2_fffRNS_4Vec3ESK_SK_(ptr noundef nonnull align 16 dereferenceable(212) %15, ptr noundef nonnull align 16 dereferenceable(72) %13, ptr noundef nonnull align 16 dereferenceable(72) %13, float noundef 0.000000e+00, ptr noundef nonnull align 16 dereferenceable(72) %14, ptr noundef nonnull align 16 dereferenceable(72) %14, float noundef 0.000000e+00, float noundef 0x3F847AE140000000, float noundef 0x3E80000000000000, ptr noundef nonnull align 16 dereferenceable(16) %16, ptr noundef nonnull align 16 dereferenceable(16) %17, ptr noundef nonnull align 16 dereferenceable(16) %18)
  %115 = zext i1 %114 to i8
  store i8 %115, ptr %19, align 1, !tbaa !20
  %116 = load i8, ptr %19, align 1, !tbaa !20, !range !21, !noundef !22
  %117 = trunc i8 %116 to i1
  br i1 %117, label %118, label %183

118:                                              ; preds = %4
  %119 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %120 = load ptr, ptr %119, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %20, ptr align 16 %17, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 @_ZN3JPH5Color4sRedE, i64 4, i1 false), !tbaa.struct !18
  %121 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %122 = load double, ptr %121, align 16
  %123 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %124 = load double, ptr %123, align 8
  %125 = getelementptr inbounds %"class.JPH::Color", ptr %21, i32 0, i32 0
  %126 = getelementptr inbounds %union.anon.5, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 4
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %120, double %122, double %124, i32 %127, float noundef 1.000000e+00)
  %128 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %129 = load ptr, ptr %128, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %23, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !18
  %130 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %131 = load double, ptr %130, align 16
  %132 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %133 = load double, ptr %132, align 8
  %134 = getelementptr inbounds %"class.JPH::Color", ptr %23, i32 0, i32 0
  %135 = getelementptr inbounds %union.anon.5, ptr %134, i32 0, i32 0
  %136 = load i32, ptr %135, align 4
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %129, double %131, double %133, i32 %136, float noundef 1.000000e+00)
  %137 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %138 = load ptr, ptr %137, align 8, !tbaa !9
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %25, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %139 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %140 = load double, ptr %139, align 16
  %141 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %142 = load double, ptr %141, align 8
  %143 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %140, double %142)
  %144 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %145 = getelementptr inbounds %union.anon, ptr %144, i32 0, i32 0
  %146 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 0
  %147 = extractvalue { double, double } %143, 0
  store double %147, ptr %146, align 16
  %148 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 1
  %149 = extractvalue { double, double } %143, 1
  store double %149, ptr %148, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #9
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %28, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %150 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %151 = load double, ptr %150, align 16
  %152 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %153 = load double, ptr %152, align 8
  %154 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %151, double %153)
  %155 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %156 = getelementptr inbounds %union.anon, ptr %155, i32 0, i32 0
  %157 = getelementptr inbounds { double, double }, ptr %156, i32 0, i32 0
  %158 = extractvalue { double, double } %154, 0
  store double %158, ptr %157, align 16
  %159 = getelementptr inbounds { double, double }, ptr %156, i32 0, i32 1
  %160 = extractvalue { double, double } %154, 1
  store double %160, ptr %159, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %29, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !23
  %161 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %162 = load double, ptr %161, align 16
  %163 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %164 = load double, ptr %163, align 8
  %165 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %27, double %162, double %164)
  %166 = getelementptr inbounds %"class.JPH::Vec3", ptr %26, i32 0, i32 0
  %167 = getelementptr inbounds %union.anon, ptr %166, i32 0, i32 0
  %168 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 0
  %169 = extractvalue { double, double } %165, 0
  store double %169, ptr %168, align 16
  %170 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 1
  %171 = extractvalue { double, double } %165, 1
  store double %171, ptr %170, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !18
  %172 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %173 = load double, ptr %172, align 16
  %174 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %175 = load double, ptr %174, align 8
  %176 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %177 = load double, ptr %176, align 16
  %178 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %179 = load double, ptr %178, align 8
  %180 = getelementptr inbounds %"class.JPH::Color", ptr %30, i32 0, i32 0
  %181 = getelementptr inbounds %union.anon.5, ptr %180, i32 0, i32 0
  %182 = load i32, ptr %181, align 4
  call void @_Z11DrawArrowSPPN3JPH13DebugRendererENS_4Vec3ES2_NS_5ColorEf(ptr noundef %138, double %173, double %175, double %177, double %179, i32 %182, float noundef 0x3FB99999A0000000)
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #9
  br label %183

183:                                              ; preds = %118, %4
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #9
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %185)
  %187 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %188 = getelementptr inbounds %union.anon, ptr %187, i32 0, i32 0
  %189 = getelementptr inbounds { double, double }, ptr %188, i32 0, i32 0
  %190 = extractvalue { double, double } %186, 0
  store double %190, ptr %189, align 16
  %191 = getelementptr inbounds { double, double }, ptr %188, i32 0, i32 1
  %192 = extractvalue { double, double } %186, 1
  store double %192, ptr %191, align 8
  %193 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %194 = load double, ptr %193, align 16
  %195 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %196 = load double, ptr %195, align 8
  %197 = call { double, double } @_ZNK3JPH5AABox15GetClosestPointENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %184, double %194, double %196)
  %198 = getelementptr inbounds %"class.JPH::Vec3", ptr %31, i32 0, i32 0
  %199 = getelementptr inbounds %union.anon, ptr %198, i32 0, i32 0
  %200 = getelementptr inbounds { double, double }, ptr %199, i32 0, i32 0
  %201 = extractvalue { double, double } %197, 0
  store double %201, ptr %200, align 16
  %202 = getelementptr inbounds { double, double }, ptr %199, i32 0, i32 1
  %203 = extractvalue { double, double } %197, 1
  store double %203, ptr %202, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %204)
  %206 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %207 = getelementptr inbounds %union.anon, ptr %206, i32 0, i32 0
  %208 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 0
  %209 = extractvalue { double, double } %205, 0
  store double %209, ptr %208, align 16
  %210 = getelementptr inbounds { double, double }, ptr %207, i32 0, i32 1
  %211 = extractvalue { double, double } %205, 1
  store double %211, ptr %210, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !23
  %212 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %213 = load double, ptr %212, align 16
  %214 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %215 = load double, ptr %214, align 8
  %216 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %213, double %215)
  %217 = getelementptr inbounds %"class.JPH::Vec3", ptr %33, i32 0, i32 0
  %218 = getelementptr inbounds %union.anon, ptr %217, i32 0, i32 0
  %219 = getelementptr inbounds { double, double }, ptr %218, i32 0, i32 0
  %220 = extractvalue { double, double } %216, 0
  store double %220, ptr %219, align 16
  %221 = getelementptr inbounds { double, double }, ptr %218, i32 0, i32 1
  %222 = extractvalue { double, double } %216, 1
  store double %222, ptr %221, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #9
  %223 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %33)
  %224 = load ptr, ptr %8, align 8, !tbaa !5
  %225 = call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %224)
  %226 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %225)
  %227 = fcmp ole float %223, %226
  %228 = zext i1 %227 to i8
  store i8 %228, ptr %36, align 1, !tbaa !20
  br label %229

229:                                              ; preds = %183
  %230 = load i8, ptr %19, align 1, !tbaa !20, !range !21, !noundef !22
  %231 = trunc i8 %230 to i1
  %232 = zext i1 %231 to i32
  %233 = load i8, ptr %36, align 1, !tbaa !20, !range !21, !noundef !22
  %234 = trunc i8 %233 to i1
  %235 = zext i1 %234 to i32
  %236 = icmp eq i32 %232, %235
  br i1 %236, label %240, label %237

237:                                              ; preds = %229
  %238 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 57)
  br i1 %238, label %239, label %240

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

240:                                              ; preds = %239, %237, %229
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  %243 = load i8, ptr %19, align 1, !tbaa !20, !range !21, !noundef !22
  %244 = trunc i8 %243 to i1
  br i1 %244, label %245, label %424

245:                                              ; preds = %242
  %246 = load i8, ptr %36, align 1, !tbaa !20, !range !21, !noundef !22
  %247 = trunc i8 %246 to i1
  br i1 %247, label %248, label %424

248:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #9
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %249)
  %251 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %252 = getelementptr inbounds %union.anon, ptr %251, i32 0, i32 0
  %253 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 0
  %254 = extractvalue { double, double } %250, 0
  store double %254, ptr %253, align 16
  %255 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 1
  %256 = extractvalue { double, double } %250, 1
  store double %256, ptr %255, align 8
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %257)
  %259 = call { double, double } @_ZN3JPH4Vec35sZeroEv()
  %260 = getelementptr inbounds %"class.JPH::Vec3", ptr %42, i32 0, i32 0
  %261 = getelementptr inbounds %union.anon, ptr %260, i32 0, i32 0
  %262 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 0
  %263 = extractvalue { double, double } %259, 0
  store double %263, ptr %262, align 16
  %264 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 1
  %265 = extractvalue { double, double } %259, 1
  store double %265, ptr %264, align 8
  %266 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %267 = load double, ptr %266, align 16
  %268 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %269 = load double, ptr %268, align 8
  %270 = call { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %33, double %267, double %269)
  %271 = getelementptr inbounds %"class.JPH::Vec3", ptr %41, i32 0, i32 0
  %272 = getelementptr inbounds %union.anon, ptr %271, i32 0, i32 0
  %273 = getelementptr inbounds { double, double }, ptr %272, i32 0, i32 0
  %274 = extractvalue { double, double } %270, 0
  store double %274, ptr %273, align 16
  %275 = getelementptr inbounds { double, double }, ptr %272, i32 0, i32 1
  %276 = extractvalue { double, double } %270, 1
  store double %276, ptr %275, align 8
  %277 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %278 = load double, ptr %277, align 16
  %279 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %280 = load double, ptr %279, align 8
  %281 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %258, double %278, double %280)
  %282 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %283 = getelementptr inbounds %union.anon, ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds { double, double }, ptr %283, i32 0, i32 0
  %285 = extractvalue { double, double } %281, 0
  store double %285, ptr %284, align 16
  %286 = getelementptr inbounds { double, double }, ptr %283, i32 0, i32 1
  %287 = extractvalue { double, double } %281, 1
  store double %287, ptr %286, align 8
  %288 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %289 = load double, ptr %288, align 16
  %290 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %291 = load double, ptr %290, align 8
  %292 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %39, double %289, double %291)
  %293 = getelementptr inbounds %"class.JPH::Vec3", ptr %38, i32 0, i32 0
  %294 = getelementptr inbounds %union.anon, ptr %293, i32 0, i32 0
  %295 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 0
  %296 = extractvalue { double, double } %292, 0
  store double %296, ptr %295, align 16
  %297 = getelementptr inbounds { double, double }, ptr %294, i32 0, i32 1
  %298 = extractvalue { double, double } %292, 1
  store double %298, ptr %297, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #9
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %44, ptr align 16 %33, i64 16, i1 false), !tbaa.struct !23
  %300 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %301 = load double, ptr %300, align 16
  %302 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %303 = load double, ptr %302, align 8
  %304 = call { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %299, double %301, double %303)
  %305 = getelementptr inbounds %"class.JPH::Vec3", ptr %43, i32 0, i32 0
  %306 = getelementptr inbounds %union.anon, ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 0
  %308 = extractvalue { double, double } %304, 0
  store double %308, ptr %307, align 16
  %309 = getelementptr inbounds { double, double }, ptr %306, i32 0, i32 1
  %310 = extractvalue { double, double } %304, 1
  store double %310, ptr %309, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %43, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #9
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %46, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !23
  %312 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %313 = load double, ptr %312, align 16
  %314 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %315 = load double, ptr %314, align 8
  %316 = call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %311, double %313, double %315)
  %317 = getelementptr inbounds %"class.JPH::Vec3", ptr %45, i32 0, i32 0
  %318 = getelementptr inbounds %union.anon, ptr %317, i32 0, i32 0
  %319 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 0
  %320 = extractvalue { double, double } %316, 0
  store double %320, ptr %319, align 16
  %321 = getelementptr inbounds { double, double }, ptr %318, i32 0, i32 1
  %322 = extractvalue { double, double } %316, 1
  store double %322, ptr %321, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %45, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #9
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %48, ptr align 16 %38, i64 16, i1 false), !tbaa.struct !23
  %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 = call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %323, double %325, double %327)
  %329 = getelementptr inbounds %"class.JPH::Vec3", ptr %47, i32 0, i32 0
  %330 = getelementptr inbounds %union.anon, ptr %329, i32 0, i32 0
  %331 = getelementptr inbounds { double, double }, ptr %330, i32 0, i32 0
  %332 = extractvalue { double, double } %328, 0
  store double %332, ptr %331, align 16
  %333 = getelementptr inbounds { double, double }, ptr %330, i32 0, i32 1
  %334 = extractvalue { double, double } %328, 1
  store double %334, ptr %333, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %47, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #9
  %335 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %336 = load ptr, ptr %335, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %31, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 @_ZN3JPH5Color7sOrangeE, i64 4, i1 false), !tbaa.struct !18
  %337 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %338 = load double, ptr %337, align 16
  %339 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %340 = load double, ptr %339, align 8
  %341 = getelementptr inbounds %"class.JPH::Color", ptr %50, i32 0, i32 0
  %342 = getelementptr inbounds %union.anon.5, ptr %341, i32 0, i32 0
  %343 = load i32, ptr %342, align 4
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %336, double %338, double %340, i32 %343, float noundef 1.000000e+00)
  %344 = getelementptr inbounds %class.Test, ptr %64, i32 0, i32 4
  %345 = load ptr, ptr %344, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %38, i64 16, i1 false), !tbaa.struct !23
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr align 4 @_ZN3JPH5Color7sYellowE, i64 4, i1 false), !tbaa.struct !18
  %346 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 0
  %347 = load double, ptr %346, align 16
  %348 = getelementptr inbounds { double, double }, ptr %51, i32 0, i32 1
  %349 = load double, ptr %348, align 8
  %350 = getelementptr inbounds %"class.JPH::Color", ptr %52, i32 0, i32 0
  %351 = getelementptr inbounds %union.anon.5, ptr %350, i32 0, i32 0
  %352 = load i32, ptr %351, align 4
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %345, double %347, double %349, i32 %352, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %33, i64 16, i1 false), !tbaa.struct !23
  %353 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %354 = load double, ptr %353, align 16
  %355 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %356 = load double, ptr %355, align 8
  %357 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %354, double %356)
  store float %357, ptr %53, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %358 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %16)
  %359 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %33)
  %360 = fmul float %358, %359
  store float %360, ptr %55, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %361 = load float, ptr %53, align 4, !tbaa !25
  %362 = load float, ptr %55, align 4, !tbaa !25
  %363 = fdiv float %361, %362
  %364 = call noundef float @_ZN3JPH4ACosEf(float noundef %363)
  %365 = call noundef float @_ZN3JPH16RadiansToDegreesEf(float noundef %364)
  store float %365, ptr %56, align 4, !tbaa !25
  br label %366

366:                                              ; preds = %248
  %367 = load float, ptr %56, align 4, !tbaa !25
  %368 = fcmp olt float %367, 0x3FB99999A0000000
  br i1 %368, label %372, label %369

369:                                              ; preds = %366
  %370 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.4, ptr noundef @.str.2, i32 noundef 75)
  br i1 %370, label %371, label %372

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

372:                                              ; preds = %371, %369, %366
  br label %373

373:                                              ; preds = %372
  br label %374

374:                                              ; preds = %373
  %375 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %376 = load float, ptr %56, align 4, !tbaa !25
  %377 = fpext float %376 to double
  call void (ptr, ...) %375(ptr noundef @.str.5, double noundef %377)
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 %17, i64 16, i1 false), !tbaa.struct !23
  %378 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 0
  %379 = load double, ptr %378, align 16
  %380 = getelementptr inbounds { double, double }, ptr %59, i32 0, i32 1
  %381 = load double, ptr %380, align 8
  %382 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %31, double %379, double %381)
  %383 = getelementptr inbounds %"class.JPH::Vec3", ptr %58, i32 0, i32 0
  %384 = getelementptr inbounds %union.anon, ptr %383, i32 0, i32 0
  %385 = getelementptr inbounds { double, double }, ptr %384, i32 0, i32 0
  %386 = extractvalue { double, double } %382, 0
  store double %386, ptr %385, align 16
  %387 = getelementptr inbounds { double, double }, ptr %384, i32 0, i32 1
  %388 = extractvalue { double, double } %382, 1
  store double %388, ptr %387, align 8
  br label %389

389:                                              ; preds = %374
  %390 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef 0x3F4A36E2E0000000)
  %391 = call noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %58, float noundef %390)
  br i1 %391, label %395, label %392

392:                                              ; preds = %389
  %393 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.6, ptr noundef @.str.2, i32 noundef 80)
  br i1 %393, label %394, label %395

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

395:                                              ; preds = %394, %392, %389
  br label %396

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396
  %398 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %399 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %58)
  %400 = fpext float %399 to double
  call void (ptr, ...) %398(ptr noundef @.str.7, double noundef %400)
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !23
  %401 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %402 = load double, ptr %401, align 16
  %403 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %404 = load double, ptr %403, align 8
  %405 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %38, double %402, double %404)
  %406 = getelementptr inbounds %"class.JPH::Vec3", ptr %61, i32 0, i32 0
  %407 = getelementptr inbounds %union.anon, ptr %406, i32 0, i32 0
  %408 = getelementptr inbounds { double, double }, ptr %407, i32 0, i32 0
  %409 = extractvalue { double, double } %405, 0
  store double %409, ptr %408, align 16
  %410 = getelementptr inbounds { double, double }, ptr %407, i32 0, i32 1
  %411 = extractvalue { double, double } %405, 1
  store double %411, ptr %410, align 8
  br label %412

412:                                              ; preds = %397
  %413 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef 0x3F4A36E2E0000000)
  %414 = call noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %61, float noundef %413)
  br i1 %414, label %418, label %415

415:                                              ; preds = %412
  %416 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.8, ptr noundef @.str.2, i32 noundef 85)
  br i1 %416, label %417, label %418

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

418:                                              ; preds = %417, %415, %412
  br label %419

419:                                              ; preds = %418
  br label %420

420:                                              ; preds = %419
  %421 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !5
  %422 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %61)
  %423 = fpext float %422 to double
  call void (ptr, ...) %421(ptr noundef @.str.9, double noundef %423)
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #9
  br label %424

424:                                              ; preds = %420, %245, %242
  %425 = load i8, ptr %19, align 1, !tbaa !20, !range !21, !noundef !22
  %426 = trunc i8 %425 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 224, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 80, ptr %13) #9
  ret i1 %426
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z9DrawBoxSPPN3JPH13DebugRendererERKNS_5Mat44ERKNS_5AABoxENS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), i32, i32 noundef, i32 noundef) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12DrawSphereSPPN3JPH13DebugRendererENS_4Vec3EfNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef, double, double, float noundef, i32, i32 noundef, i32 noundef) #3

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH23TransformedConvexObjectINS_5AABoxEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH23TransformedConvexObjectINS_6SphereEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH19EPAPenetrationDepthC2Ev(ptr noundef nonnull align 16 dereferenceable(212)) unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH19EPAPenetrationDepth19GetPenetrationDepthINS_23TransformedConvexObjectINS_5AABoxEEES4_NS2_INS_6SphereEEES6_EEbRKT_RKT0_fRKT1_RKT2_fffRNS_4Vec3ESK_SK_(ptr noundef nonnull align 16 dereferenceable(212), ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(72), float noundef, ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(72), float noundef, float noundef, float noundef, ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef, double, double, i32, float noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z11DrawArrowSPPN3JPH13DebugRendererENS_4Vec3ES2_NS_5ColorEf(ptr noundef, double, double, double, double, i32, float noundef) #3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #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 = !{!10, !6, i64 32}
!10 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 56}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !13, i64 0}
!13 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !6, i64 48}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{i64 0, i64 4, !19}
!19 = !{!7, !7, i64 0}
!20 = !{!11, !11, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{i64 0, i64 16, !19}
!24 = !{i64 2160217076}
!25 = !{!17, !17, i64 0}
!26 = !{i64 2160217401}
!27 = !{i64 2160217764}
!28 = !{i64 2160218127}


; 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::Color" = type { %union.anon.5 }
%union.anon.5 = type { i32 }
%"struct.JPH::TransformedConvexObject" = type <{ %"class.JPH::Mat44", ptr, [8 x i8] }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"struct.JPH::TransformedConvexObject.6" = type <{ %"class.JPH::Mat44", ptr, [8 x i8] }>
%"class.JPH::EPAPenetrationDepth" = type { %"class.JPH::GJKClosestPoint", float, [12 x i8] }
%"class.JPH::GJKClosestPoint" = type <{ [4 x %"class.JPH::Vec3"], [4 x %"class.JPH::Vec3"], [4 x %"class.JPH::Vec3"], i32, [12 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }

@.str.2 = external hidden unnamed_addr constant [94 x i8], align 1
@_ZN3JPH5Color5sGreyE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color4sRedE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color6sGreenE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZN3JPH5Color7sYellowE = external local_unnamed_addr global %"class.JPH::Color", align 4
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN3JPH5Color7sOrangeE = external local_unnamed_addr global %"class.JPH::Color", align 4
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@_ZN3JPH5TraceE = external local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [15 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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK7EPATest16CollideBoxSphereERKN3JPH5Mat44ERKNS0_5AABoxERKNS0_6SphereE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(112) %0, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef nonnull align 16 dereferenceable(32) %2, ptr noundef nonnull align 4 dereferenceable(16) %3) local_unnamed_addr #2 align 2 {
  %5 = alloca %"struct.JPH::TransformedConvexObject", align 16
  %6 = alloca %"struct.JPH::TransformedConvexObject.6", align 16
  %7 = alloca %"class.JPH::EPAPenetrationDepth", align 16
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = getelementptr inbounds i8, ptr %0, i64 32
  %22 = load ptr, ptr %21, align 8, !tbaa !5
  %.sroa.058.0.copyload = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4, !tbaa !17
  tail call void @_Z9DrawBoxSPPN3JPH13DebugRendererERKNS_5Mat44ERKNS_5AABoxENS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef %22, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef nonnull align 16 dereferenceable(32) %2, i32 %.sroa.058.0.copyload, i32 noundef 0, i32 noundef 0)
  %23 = load ptr, ptr %21, align 8, !tbaa !5
  %24 = tail call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %25 = extractvalue { double, double } %24, 0
  %26 = extractvalue { double, double } %24, 1
  %27 = tail call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %1, double %25, double %26)
  %28 = extractvalue { double, double } %27, 0
  %29 = extractvalue { double, double } %27, 1
  %30 = tail call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %.sroa.053.0.copyload = load i32, ptr @_ZN3JPH5Color5sGreyE, align 4, !tbaa !17
  tail call void @_Z12DrawSphereSPPN3JPH13DebugRendererENS_4Vec3EfNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef %23, double %28, double %29, float noundef %30, i32 %.sroa.053.0.copyload, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %5) #8
  call void @_ZN3JPH23TransformedConvexObjectINS_5AABoxEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72) %5, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef nonnull align 16 dereferenceable(32) %2)
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %6) #8
  call void @_ZN3JPH23TransformedConvexObjectINS_6SphereEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72) %6, ptr noundef nonnull align 16 dereferenceable(64) %1, ptr noundef nonnull align 4 dereferenceable(16) %3)
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %7) #8
  call void @_ZN3JPH19EPAPenetrationDepthC2Ev(ptr noundef nonnull align 16 dereferenceable(212) %7) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #8
  %31 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %32 = extractvalue { double, double } %31, 0
  store double %32, ptr %8, align 16
  %33 = getelementptr inbounds i8, ptr %8, i64 8
  %34 = extractvalue { double, double } %31, 1
  store double %34, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  %35 = call noundef zeroext i1 @_ZN3JPH19EPAPenetrationDepth19GetPenetrationDepthINS_23TransformedConvexObjectINS_5AABoxEEES4_NS2_INS_6SphereEEES6_EEbRKT_RKT0_fRKT1_RKT2_fffRNS_4Vec3ESK_SK_(ptr noundef nonnull align 16 dereferenceable(212) %7, ptr noundef nonnull align 16 dereferenceable(72) %5, ptr noundef nonnull align 16 dereferenceable(72) %5, float noundef 0.000000e+00, ptr noundef nonnull align 16 dereferenceable(72) %6, ptr noundef nonnull align 16 dereferenceable(72) %6, float noundef 0.000000e+00, float noundef 0x3F847AE140000000, float noundef 0x3E80000000000000, ptr noundef nonnull align 16 dereferenceable(16) %8, ptr noundef nonnull align 16 dereferenceable(16) %9, ptr noundef nonnull align 16 dereferenceable(16) %10)
  br i1 %35, label %36, label %56

36:                                               ; preds = %4
  %37 = load ptr, ptr %21, align 8, !tbaa !5
  %.sroa.047.0.copyload = load double, ptr %9, align 16
  %.sroa.248.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %.sroa.248.0.copyload = load double, ptr %.sroa.248.0..sroa_idx, align 8, !tbaa !17
  %.sroa.046.0.copyload = load i32, ptr @_ZN3JPH5Color4sRedE, align 4, !tbaa !17
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %37, double %.sroa.047.0.copyload, double %.sroa.248.0.copyload, i32 %.sroa.046.0.copyload, float noundef 1.000000e+00)
  %38 = load ptr, ptr %21, align 8, !tbaa !5
  %.sroa.044.0.copyload = load double, ptr %10, align 16
  %.sroa.245.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.245.0.copyload = load double, ptr %.sroa.245.0..sroa_idx, align 8, !tbaa !17
  %.sroa.043.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !17
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %38, double %.sroa.044.0.copyload, double %.sroa.245.0.copyload, i32 %.sroa.043.0.copyload, float noundef 1.000000e+00)
  %39 = load ptr, ptr %21, align 8, !tbaa !5
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %40 = load double, ptr %11, align 16
  %41 = getelementptr inbounds i8, ptr %11, i64 8
  %42 = load double, ptr %41, align 8
  %43 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %40, double %42)
  %44 = extractvalue { double, double } %43, 0
  %45 = extractvalue { double, double } %43, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #8
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 0.000000e+00)
  %46 = load double, ptr %13, align 16
  %47 = getelementptr inbounds i8, ptr %13, i64 8
  %48 = load double, ptr %47, align 8
  %49 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %10, double %46, double %48)
  %50 = extractvalue { double, double } %49, 0
  store double %50, ptr %12, align 16
  %51 = getelementptr inbounds i8, ptr %12, i64 8
  %52 = extractvalue { double, double } %49, 1
  store double %52, ptr %51, align 8
  %.sroa.037.0.copyload = load double, ptr %8, align 16
  %.sroa.238.0.copyload = load double, ptr %33, align 8, !tbaa !17
  %53 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %12, double %.sroa.037.0.copyload, double %.sroa.238.0.copyload)
  %54 = extractvalue { double, double } %53, 0
  %55 = extractvalue { double, double } %53, 1
  %.sroa.036.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !17
  call void @_Z11DrawArrowSPPN3JPH13DebugRendererENS_4Vec3ES2_NS_5ColorEf(ptr noundef %39, double %44, double %45, double %54, double %55, i32 %.sroa.036.0.copyload, float noundef 0x3FB99999A0000000)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  br label %56

56:                                               ; preds = %36, %4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #8
  %57 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %58 = extractvalue { double, double } %57, 0
  %59 = extractvalue { double, double } %57, 1
  %60 = call { double, double } @_ZNK3JPH5AABox15GetClosestPointENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(32) %2, double %58, double %59)
  %61 = extractvalue { double, double } %60, 0
  store double %61, ptr %14, align 16
  %62 = getelementptr inbounds i8, ptr %14, i64 8
  %63 = extractvalue { double, double } %60, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #8
  %64 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %65 = extractvalue { double, double } %64, 0
  store double %65, ptr %16, align 16
  %66 = getelementptr inbounds i8, ptr %16, i64 8
  %67 = extractvalue { double, double } %64, 1
  store double %67, ptr %66, align 8
  %68 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %16, double %61, double %63)
  %69 = extractvalue { double, double } %68, 0
  store double %69, ptr %15, align 16
  %70 = getelementptr inbounds i8, ptr %15, i64 8
  %71 = extractvalue { double, double } %68, 1
  store double %71, ptr %70, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  %72 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %73 = call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %74 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef %73)
  %75 = fcmp ole float %72, %74
  %76 = xor i1 %35, %75
  br i1 %76, label %77, label %80

77:                                               ; preds = %56
  %78 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 57)
  br i1 %78, label %79, label %80

79:                                               ; preds = %77
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !18
  br label %80

80:                                               ; preds = %79, %77, %56
  %brmerge.demorgan = and i1 %35, %75
  br i1 %brmerge.demorgan, label %81, label %151

81:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  %82 = call { double, double } @_ZNK3JPH6Sphere9GetCenterEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %83 = extractvalue { double, double } %82, 0
  store double %83, ptr %18, align 16
  %84 = getelementptr inbounds i8, ptr %18, i64 8
  %85 = extractvalue { double, double } %82, 1
  store double %85, ptr %84, align 8
  %86 = call noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16) %3)
  %87 = call { double, double } @_ZN3JPH4Vec35sZeroEv()
  %88 = extractvalue { double, double } %87, 0
  %89 = extractvalue { double, double } %87, 1
  %90 = call { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %88, double %89)
  %91 = extractvalue { double, double } %90, 0
  %92 = extractvalue { double, double } %90, 1
  %93 = call { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %86, double %91, double %92)
  %94 = extractvalue { double, double } %93, 0
  %95 = extractvalue { double, double } %93, 1
  %96 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %18, double %94, double %95)
  %97 = extractvalue { double, double } %96, 0
  %98 = getelementptr inbounds i8, ptr %17, i64 8
  %99 = extractvalue { double, double } %96, 1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  %.sroa.021.0.copyload = load double, ptr %15, align 16
  %.sroa.222.0.copyload = load double, ptr %70, align 8, !tbaa !17
  %100 = call { double, double } @_ZNK3JPH5Mat4411Multiply3x3ENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %1, double %.sroa.021.0.copyload, double %.sroa.222.0.copyload)
  %101 = extractvalue { double, double } %100, 0
  %102 = extractvalue { double, double } %100, 1
  store double %101, ptr %15, align 16
  store double %102, ptr %70, align 8, !tbaa !17
  %103 = call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %1, double %61, double %63)
  %104 = extractvalue { double, double } %103, 0
  %105 = extractvalue { double, double } %103, 1
  store double %104, ptr %14, align 16
  store double %105, ptr %62, align 8, !tbaa !17
  %106 = call { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %1, double %97, double %99)
  %107 = extractvalue { double, double } %106, 0
  %108 = extractvalue { double, double } %106, 1
  store double %107, ptr %17, align 16
  store double %108, ptr %98, align 8, !tbaa !17
  %109 = load ptr, ptr %21, align 8, !tbaa !5
  %.sroa.011.0.copyload = load i32, ptr @_ZN3JPH5Color7sOrangeE, align 4, !tbaa !17
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %109, double %104, double %105, i32 %.sroa.011.0.copyload, float noundef 1.000000e+00)
  %110 = load ptr, ptr %21, align 8, !tbaa !5
  %.sroa.08.0.copyload = load i32, ptr @_ZN3JPH5Color7sYellowE, align 4, !tbaa !17
  call void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef %110, double %107, double %108, i32 %.sroa.08.0.copyload, float noundef 1.000000e+00)
  %.sroa.05.0.copyload = load double, ptr %15, align 16
  %.sroa.26.0.copyload = load double, ptr %70, align 8, !tbaa !17
  %111 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %8, double %.sroa.05.0.copyload, double %.sroa.26.0.copyload)
  %112 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %8)
  %113 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %114 = fmul float %112, %113
  %115 = fdiv float %111, %114
  %116 = call noundef float @_ZN3JPH4ACosEf(float noundef %115)
  %117 = call noundef float @_ZN3JPH16RadiansToDegreesEf(float noundef %116)
  %118 = fcmp olt float %117, 0x3FB99999A0000000
  br i1 %118, label %122, label %119

119:                                              ; preds = %81
  %120 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.2, i32 noundef 75)
  br i1 %120, label %121, label %122

121:                                              ; preds = %119
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !19
  br label %122

122:                                              ; preds = %121, %119, %81
  %123 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !20
  %124 = fpext float %117 to double
  call void (ptr, ...) %123(ptr noundef nonnull @.str.5, double noundef %124)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #8
  %.sroa.01.0.copyload = load double, ptr %9, align 16
  %.sroa.22.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %.sroa.22.0.copyload = load double, ptr %.sroa.22.0..sroa_idx, align 8, !tbaa !17
  %125 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %14, double %.sroa.01.0.copyload, double %.sroa.22.0.copyload)
  %126 = extractvalue { double, double } %125, 0
  store double %126, ptr %19, align 16
  %127 = getelementptr inbounds i8, ptr %19, i64 8
  %128 = extractvalue { double, double } %125, 1
  store double %128, ptr %127, align 8
  %129 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef 0x3F4A36E2E0000000)
  %130 = call noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef %129)
  br i1 %130, label %134, label %131

131:                                              ; preds = %122
  %132 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.2, i32 noundef 80)
  br i1 %132, label %133, label %134

133:                                              ; preds = %131
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !21
  br label %134

134:                                              ; preds = %133, %131, %122
  %135 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !20
  %136 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %19)
  %137 = fpext float %136 to double
  call void (ptr, ...) %135(ptr noundef nonnull @.str.7, double noundef %137)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #8
  %.sroa.0.0.copyload = load double, ptr %10, align 16
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !17
  %138 = call { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %17, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
  %139 = extractvalue { double, double } %138, 0
  store double %139, ptr %20, align 16
  %140 = getelementptr inbounds i8, ptr %20, i64 8
  %141 = extractvalue { double, double } %138, 1
  store double %141, ptr %140, align 8
  %142 = call noundef float @_ZN3JPH6SquareIfEET_S1_(float noundef 0x3F4A36E2E0000000)
  %143 = call noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef %142)
  br i1 %143, label %147, label %144

144:                                              ; preds = %134
  %145 = call noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.2, i32 noundef 85)
  br i1 %145, label %146, label %147

146:                                              ; preds = %144
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !22
  br label %147

147:                                              ; preds = %146, %144, %134
  %148 = load ptr, ptr @_ZN3JPH5TraceE, align 8, !tbaa !20
  %149 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %20)
  %150 = fpext float %149 to double
  call void (ptr, ...) %148(ptr noundef nonnull @.str.9, double noundef %150)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  br label %151

151:                                              ; preds = %80, %147
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %5) #8
  ret i1 %35
}

; 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: inlinehint mustprogress uwtable
declare dso_local void @_Z9DrawBoxSPPN3JPH13DebugRendererERKNS_5Mat44ERKNS_5AABoxENS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef, ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32), i32, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12DrawSphereSPPN3JPH13DebugRendererENS_4Vec3EfNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef, double, double, float noundef, i32, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH6Sphere9GetRadiusEv(ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH23TransformedConvexObjectINS_5AABoxEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH23TransformedConvexObjectINS_6SphereEEC2ERKNS_5Mat44ERKS1_(ptr noundef nonnull align 16 dereferenceable(72), ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH19EPAPenetrationDepthC2Ev(ptr noundef nonnull align 16 dereferenceable(212)) unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12DrawMarkerSPPN3JPH13DebugRendererENS_4Vec3ENS_5ColorEf(ptr noundef, double, double, i32, float noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z11DrawArrowSPPN3JPH13DebugRendererENS_4Vec3ES2_NS_5ColorEf(ptr noundef, double, double, double, double, i32, float noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec312NormalizedOrES0_(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 } @_ZN3JPH4Vec35sZeroEv() local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZN3JPH4ACosEf(float noundef) local_unnamed_addr #6

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { 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 #5 = { 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 #6 = { 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 #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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 32}
!6 = !{!"_ZTS4Test", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !11, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !12, i64 0}
!12 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !7, i64 0, !13, i64 8, !14, i64 16, !13, i64 24, !15, i64 32, !7, i64 48}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !16, i64 0, !13, i64 8}
!16 = !{!"float", !8, i64 0}
!17 = !{!8, !8, i64 0}
!18 = !{i64 2160217076}
!19 = !{i64 2160217401}
!20 = !{!7, !7, i64 0}
!21 = !{i64 2160217764}
!22 = !{i64 2160218127}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass