; LLVM IR from zig-gamedev/zphysics :: libs/Jolt/Physics/Character (CharacterVirtual)

; 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::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::IgnoreSingleBodyFilterChained" = type { %"class.JPH::BodyFilter", %"class.JPH::BodyID", ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"struct.JPH::CharacterVirtual::Contact" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::BodyID", [4 x i8], ptr, %"class.JPH::SubShapeID", i8, i8, [2 x i8], i64, ptr, i8, i8, i8, [13 x i8] }>
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::CharacterVirtual::ContactCastCollector" = type <{ %"class.JPH::CollisionCollector.5", [8 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", ptr, ptr, ptr, ptr, ptr, [8 x i8] }>
%"class.JPH::CollisionCollector.5" = type { ptr, float, ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT.34" }
%"struct.JPH::ShapeCastT.34" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::TransformedShape" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::RefConst", %"class.JPH::Float3", %"class.JPH::BodyID", %"class.JPH::SubShapeIDCreator" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::StaticArray" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"struct.JPH::PolygonConvexSupport" = type { ptr }
%"struct.JPH::AddConvexRadius" = type <{ ptr, float, [4 x i8] }>
%"class.JPH::CharacterVirtual" = type <{ %"class.JPH::CharacterBase", ptr, ptr, i8, [3 x i8], float, i32, i32, float, float, float, i32, float, float, i8, [3 x i8], float, float, [12 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Array.2", float, i8, [3 x i8], i64, %"class.JPH::BodyID", [4 x i8] }>
%"class.JPH::CharacterBase" = type { ptr, %"class.JPH::RefTarget", ptr, %"class.JPH::RefConst", %"class.JPH::Vec3", %"class.JPH::Plane", float, i32, %"class.JPH::BodyID", %"class.JPH::SubShapeID", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::RefConst.1", i64 }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::RefConst.1" = type { ptr }
%"class.JPH::Array.2" = type { i64, i64, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK3JPH13CharacterBase8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(144)) #2 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) #3

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1140)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4)) #5 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1140)) #6 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %1, double %2, double %3, double %4, ptr noundef nonnull align 16 dereferenceable(115) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(12) %10) #2 align 2 personality ptr @__gxx_personality_v0 {
  %12 = alloca i1, align 1
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca float, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"class.JPH::Mat44", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Quat", align 16
  %27 = alloca %"class.JPH::ShapeCastSettings", align 16
  %28 = alloca float, align 4
  %29 = alloca %"class.JPH::IgnoreSingleBodyFilterChained", align 8
  %30 = alloca %"class.JPH::BodyID", align 4
  %31 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::CharacterVirtual::ContactCastCollector", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"struct.JPH::RShapeCast", 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::TransformedShape", align 16
  %46 = alloca float, align 4
  %47 = alloca %"class.JPH::Mat44", align 16
  %48 = alloca %"class.JPH::TransformedShape", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Quat", align 16
  %51 = alloca %"class.JPH::BodyID", align 4
  %52 = alloca %"class.JPH::SubShapeIDCreator", align 4
  %53 = alloca %"class.JPH::TransformedShape", align 16
  %54 = alloca %"class.JPH::StaticArray", align 16
  %55 = alloca %"class.JPH::Vec3", align 16
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca i8, align 1
  %58 = alloca %"struct.JPH::PolygonConvexSupport", align 8
  %59 = alloca %"struct.JPH::AddConvexRadius", align 8
  %60 = alloca %"class.JPH::Mat44", align 16
  %61 = alloca %"class.JPH::Vec3", align 16
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  store double %1, ptr %65, align 16
  %66 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  store double %2, ptr %66, align 8
  %67 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  store double %3, ptr %67, align 16
  %68 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  store double %4, ptr %68, align 8
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  store ptr %9, ptr %20, align 8, !tbaa !5
  store ptr %10, ptr %21, align 8, !tbaa !5
  %69 = load ptr, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #11
  %70 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  store float %70, ptr %22, align 4, !tbaa !9
  %71 = load float, ptr %22, align 4, !tbaa !9
  %72 = fcmp olt float %71, 0x3E45798EE0000000
  br i1 %72, label %73, label %74

73:                                               ; preds = %11
  store i1 false, ptr %12, align 1
  store i32 1, ptr %23, align 4
  br label %408

74:                                               ; preds = %11
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 %13, i64 16, i1 false), !tbaa.struct !11
  %75 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 21
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %26, ptr align 16 %75, i64 16, i1 false), !tbaa.struct !11
  %76 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 3
  %77 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %76)
  %78 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %79 = load double, ptr %78, align 16
  %80 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %81 = load double, ptr %80, align 8
  %82 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %83 = load double, ptr %82, align 16
  %84 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %85 = load double, ptr %84, align 8
  call void @_ZNK3JPH16CharacterVirtual24GetCenterOfMassTransformENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %24, ptr noundef nonnull align 16 dereferenceable(332) %69, double %79, double %81, double %83, double %85, ptr noundef %77)
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #11
  call void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %27)
  %86 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 3
  %87 = load i8, ptr %86, align 16, !tbaa !13
  %88 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %27, i32 0, i32 1
  store i8 %87, ptr %88, align 16, !tbaa !33
  %89 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %27, i32 0, i32 2
  store i8 0, ptr %89, align 1, !tbaa !38
  %90 = getelementptr inbounds %"class.JPH::CollideSettingsBase", ptr %27, i32 0, i32 0
  store i8 0, ptr %90, align 16, !tbaa !39
  %91 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %27, i32 0, i32 3
  store i8 1, ptr %91, align 2, !tbaa !40
  %92 = getelementptr inbounds %"class.JPH::ShapeCastSettings", ptr %27, i32 0, i32 4
  store i8 0, ptr %92, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  %93 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 10
  %94 = load float, ptr %93, align 8, !tbaa !42
  %95 = load float, ptr %22, align 4, !tbaa !9
  %96 = call noundef float @_ZSt4sqrtf(float noundef %95)
  %97 = fdiv float %94, %96
  store float %97, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #11
  %98 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 28
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 8 %98, i64 4, i1 false), !tbaa.struct !43
  %99 = load ptr, ptr %20, align 8, !tbaa !5
  %100 = getelementptr inbounds %"class.JPH::BodyID", ptr %30, i32 0, i32 0
  %101 = load i32, ptr %100, align 4
  call void @_ZN3JPH29IgnoreSingleBodyFilterChainedC2ENS_6BodyIDERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 %101, ptr noundef nonnull align 8 dereferenceable(8) %99)
  call void @llvm.lifetime.start.p0(i64 128, ptr %31) #11
  invoke void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %31)
          to label %102 unwind label %185

102:                                              ; preds = %74
  %103 = load float, ptr %28, align 4, !tbaa !9
  %104 = fadd float 1.000000e+00, %103
  %105 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %31, i32 0, i32 5
  store float %104, ptr %105, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #11
  %106 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %24)
          to label %107 unwind label %189

107:                                              ; preds = %102
  %108 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, 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 } %106, 0
  store double %111, ptr %110, align 16
  %112 = getelementptr inbounds { double, double }, ptr %109, i32 0, i32 1
  %113 = extractvalue { double, double } %106, 1
  store double %113, ptr %112, align 8
  call void @llvm.lifetime.start.p0(i64 128, ptr %35) #11
  %114 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 2
  %115 = load ptr, ptr %114, align 16, !tbaa !48
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %36, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !11
  %116 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %37, ptr align 16 %116, i64 16, i1 false), !tbaa.struct !11
  %117 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !11
  %118 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %119 = load double, ptr %118, align 16
  %120 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %121 = load double, ptr %120, align 8
  %122 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %123 = load double, ptr %122, align 16
  %124 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %125 = load double, ptr %124, align 8
  %126 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %127 = load double, ptr %126, align 16
  %128 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %129 = load double, ptr %128, align 8
  invoke void @_ZN3JPH16CharacterVirtual20ContactCastCollectorC2EPNS_13PhysicsSystemEPKS0_NS_4Vec3ES6_RKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS8_EEEES6_RNS0_7ContactE(ptr noundef nonnull align 16 dereferenceable(120) %35, ptr noundef %115, ptr noundef %69, double %119, double %121, double %123, double %125, ptr noundef nonnull align 8 dereferenceable(32) %117, double %127, double %129, ptr noundef nonnull align 16 dereferenceable(115) %31)
          to label %130 unwind label %193

130:                                              ; preds = %107
  %131 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %31, i32 0, i32 5
  %132 = load float, ptr %131, align 4, !tbaa !45
  invoke void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEE21ResetEarlyOutFractionEf(ptr noundef nonnull align 8 dereferenceable(24) %35, float noundef %132)
          to label %133 unwind label %197

133:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 144, ptr %39) #11
  %134 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 3
  %135 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %136 unwind label %201

136:                                              ; preds = %133
  %137 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %138 unwind label %201

138:                                              ; preds = %136
  %139 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %140 = getelementptr inbounds %union.anon, ptr %139, i32 0, i32 0
  %141 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 0
  %142 = extractvalue { double, double } %137, 0
  store double %142, ptr %141, align 16
  %143 = getelementptr inbounds { double, double }, ptr %140, i32 0, i32 1
  %144 = extractvalue { double, double } %137, 1
  store double %144, ptr %143, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %41, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !11
  %145 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %146 = load double, ptr %145, align 16
  %147 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %148 = load double, ptr %147, align 8
  %149 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %150 = load double, ptr %149, align 16
  %151 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %152 = load double, ptr %151, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %39, ptr noundef %135, double %146, double %148, ptr noundef nonnull align 16 dereferenceable(64) %24, double %150, double %152)
          to label %153 unwind label %201

153:                                              ; preds = %138
  %154 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 2
  %155 = load ptr, ptr %154, align 16, !tbaa !48
  %156 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1140) %155)
          to label %157 unwind label %201

157:                                              ; preds = %153
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !11
  %158 = load ptr, ptr %18, align 8, !tbaa !5
  %159 = load ptr, ptr %19, align 8, !tbaa !5
  %160 = load ptr, ptr %21, align 8, !tbaa !5
  %161 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %162 = load double, ptr %161, align 16
  %163 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %164 = load double, ptr %163, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %156, ptr noundef nonnull align 16 dereferenceable(144) %39, ptr noundef nonnull align 16 dereferenceable(36) %27, double %162, double %164, ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %158, ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(12) %160)
          to label %165 unwind label %201

165:                                              ; preds = %157
  %166 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 2
  %167 = load ptr, ptr %166, align 8, !tbaa !49
  %168 = icmp ne ptr %167, null
  br i1 %168, label %169, label %205

169:                                              ; preds = %165
  invoke void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEE10SetContextEPKNS_16TransformedShapeE(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef null)
          to label %170 unwind label %201

170:                                              ; preds = %169
  %171 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 2
  %172 = load ptr, ptr %171, align 8, !tbaa !49
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %43, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %44, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !11
  %173 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %174 = load double, ptr %173, align 16
  %175 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %176 = load double, ptr %175, align 8
  %177 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %178 = load double, ptr %177, align 16
  %179 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %180 = load double, ptr %179, align 8
  %181 = load ptr, ptr %172, align 8, !tbaa !50
  %182 = getelementptr inbounds ptr, ptr %181, i64 3
  %183 = load ptr, ptr %182, align 8
  invoke void %183(ptr noundef nonnull align 8 dereferenceable(8) %172, ptr noundef %69, ptr noundef nonnull align 16 dereferenceable(64) %24, double %174, double %176, ptr noundef nonnull align 16 dereferenceable(36) %27, double %178, double %180, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %184 unwind label %201

184:                                              ; preds = %170
  br label %205

185:                                              ; preds = %74
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %32, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %33, align 4
  br label %407

189:                                              ; preds = %102
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %32, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %33, align 4
  br label %406

193:                                              ; preds = %107
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %32, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %33, align 4
  br label %405

197:                                              ; preds = %130
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %32, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %33, align 4
  br label %404

201:                                              ; preds = %205, %170, %169, %157, %153, %138, %136, %133
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %32, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %33, align 4
  br label %403

205:                                              ; preds = %184, %165
  %206 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %31, i32 0, i32 6
  %207 = invoke noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4) %206)
          to label %208 unwind label %201

208:                                              ; preds = %205
  br i1 %207, label %209, label %214

209:                                              ; preds = %208
  %210 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %31, i32 0, i32 8
  %211 = load ptr, ptr %210, align 16, !tbaa !52
  %212 = icmp eq ptr %211, null
  br i1 %212, label %213, label %214

213:                                              ; preds = %209
  store i1 false, ptr %12, align 1
  store i32 1, ptr %23, align 4
  br label %402

214:                                              ; preds = %209, %208
  %215 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %215, ptr align 16 %31, i64 115, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #11
  invoke void @_ZN3JPH16TransformedShapeC2Ev(ptr noundef nonnull align 16 dereferenceable(64) %45)
          to label %216 unwind label %268

216:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  %217 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %69, i32 0, i32 10
  %218 = load float, ptr %217, align 8, !tbaa !42
  store float %218, ptr %46, align 4, !tbaa !9
  %219 = load ptr, ptr %16, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %219, i32 0, i32 8
  %221 = load ptr, ptr %220, align 16, !tbaa !52
  %222 = icmp ne ptr %221, null
  br i1 %222, label %223, label %291

223:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 64, ptr %47) #11
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %224, i32 0, i32 8
  %226 = load ptr, ptr %225, align 16, !tbaa !52
  invoke void @_ZNK3JPH16CharacterVirtual24GetCenterOfMassTransformEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %47, ptr noundef nonnull align 16 dereferenceable(332) %226)
          to label %227 unwind label %272

227:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #11
  %228 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %47)
          to label %229 unwind label %276

229:                                              ; preds = %227
  %230 = getelementptr inbounds %"class.JPH::Vec3", ptr %49, i32 0, i32 0
  %231 = getelementptr inbounds %union.anon, ptr %230, i32 0, i32 0
  %232 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 0
  %233 = extractvalue { double, double } %228, 0
  store double %233, ptr %232, align 16
  %234 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 1
  %235 = extractvalue { double, double } %228, 1
  store double %235, ptr %234, align 8
  %236 = invoke { double, double } @_ZNK3JPH5Mat4413GetQuaternionEv(ptr noundef nonnull align 16 dereferenceable(64) %47)
          to label %237 unwind label %276

237:                                              ; preds = %229
  %238 = getelementptr inbounds %"class.JPH::Quat", ptr %50, i32 0, i32 0
  %239 = getelementptr inbounds %"class.JPH::Vec4", ptr %238, i32 0, i32 0
  %240 = getelementptr inbounds %union.anon.0, ptr %239, i32 0, i32 0
  %241 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 0
  %242 = extractvalue { double, double } %236, 0
  store double %242, ptr %241, align 16
  %243 = getelementptr inbounds { double, double }, ptr %240, i32 0, i32 1
  %244 = extractvalue { double, double } %236, 1
  store double %244, ptr %243, align 8
  %245 = load ptr, ptr %16, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %245, i32 0, i32 8
  %247 = load ptr, ptr %246, align 16, !tbaa !52
  %248 = invoke noundef ptr @_ZNK3JPH13CharacterBase8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(144) %247)
          to label %249 unwind label %276

249:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #11
  invoke void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %250 unwind label %280

250:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  call void @llvm.memset.p0.i64(ptr align 4 %52, i8 0, i64 8, i1 false)
  call void @_ZN3JPH17SubShapeIDCreatorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %52) #11
  %251 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %252 = load double, ptr %251, align 16
  %253 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %254 = load double, ptr %253, align 8
  %255 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %256 = load double, ptr %255, align 16
  %257 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %258 = load double, ptr %257, align 8
  invoke void @_ZN3JPH16TransformedShapeC2ENS_4Vec3ENS_4QuatEPKNS_5ShapeERKNS_6BodyIDERKNS_17SubShapeIDCreatorE(ptr noundef nonnull align 16 dereferenceable(64) %48, double %252, double %254, double %256, double %258, ptr noundef %248, ptr noundef nonnull align 4 dereferenceable(4) %51, ptr noundef nonnull align 4 dereferenceable(8) %52)
          to label %259 unwind label %284

259:                                              ; preds = %250
  %260 = call noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH16TransformedShapeaSEOS0_(ptr noundef nonnull align 16 dereferenceable(64) %45, ptr noundef nonnull align 16 dereferenceable(64) %48) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %48) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #11
  %261 = load ptr, ptr %16, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %261, i32 0, i32 8
  %263 = load ptr, ptr %262, align 16, !tbaa !52
  %264 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %263, i32 0, i32 10
  %265 = load float, ptr %264, align 8, !tbaa !42
  %266 = load float, ptr %46, align 4, !tbaa !9
  %267 = fadd float %266, %265
  store float %267, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #11
  br label %304

268:                                              ; preds = %214
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %32, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %33, align 4
  br label %401

272:                                              ; preds = %223
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %32, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %33, align 4
  br label %290

276:                                              ; preds = %237, %229, %227
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %32, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %33, align 4
  br label %289

280:                                              ; preds = %249
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %32, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %33, align 4
  br label %288

284:                                              ; preds = %250
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %32, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  br label %288

288:                                              ; preds = %284, %280
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #11
  br label %289

289:                                              ; preds = %288, %276
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #11
  br label %290

290:                                              ; preds = %289, %272
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #11
  br label %400

291:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 64, ptr %53) #11
  %292 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 2
  %293 = load ptr, ptr %292, align 16, !tbaa !48
  %294 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1140) %293)
          to label %295 unwind label %300

295:                                              ; preds = %291
  %296 = load ptr, ptr %16, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %296, i32 0, i32 6
  invoke void @_ZNK3JPH13BodyInterface19GetTransformedShapeERKNS_6BodyIDE(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16 %53, ptr noundef nonnull align 8 dereferenceable(24) %294, ptr noundef nonnull align 4 dereferenceable(4) %297)
          to label %298 unwind label %300

298:                                              ; preds = %295
  %299 = call noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH16TransformedShapeaSEOS0_(ptr noundef nonnull align 16 dereferenceable(64) %45, ptr noundef nonnull align 16 dereferenceable(64) %53) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %53) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %53) #11
  br label %304

300:                                              ; preds = %295, %291
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %32, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %53) #11
  br label %400

304:                                              ; preds = %298, %259
  call void @llvm.lifetime.start.p0(i64 528, ptr %54) #11
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %54) #11
  %305 = load ptr, ptr %16, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %305, i32 0, i32 9
  %307 = load ptr, ptr %16, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %307, i32 0, i32 2
  %309 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %308)
          to label %310 unwind label %346

310:                                              ; preds = %304
  %311 = getelementptr inbounds %"class.JPH::Vec3", ptr %55, i32 0, i32 0
  %312 = getelementptr inbounds %union.anon, ptr %311, i32 0, i32 0
  %313 = getelementptr inbounds { double, double }, ptr %312, i32 0, i32 0
  %314 = extractvalue { double, double } %309, 0
  store double %314, ptr %313, align 16
  %315 = getelementptr inbounds { double, double }, ptr %312, i32 0, i32 1
  %316 = extractvalue { double, double } %309, 1
  store double %316, ptr %315, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %34, i64 16, i1 false), !tbaa.struct !11
  %317 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 0
  %318 = load double, ptr %317, align 16
  %319 = getelementptr inbounds { double, double }, ptr %55, i32 0, i32 1
  %320 = load double, ptr %319, align 8
  %321 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %322 = load double, ptr %321, align 16
  %323 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %324 = load double, ptr %323, align 8
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %45, ptr noundef nonnull align 4 dereferenceable(4) %306, double %318, double %320, double %322, double %324, ptr noundef nonnull align 16 dereferenceable(528) %54)
          to label %325 unwind label %346

325:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 1, ptr %57) #11
  store i8 0, ptr %57, align 1, !tbaa !55
  %326 = invoke noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj32EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(528) %54)
          to label %327 unwind label %350

327:                                              ; preds = %325
  %328 = icmp uge i32 %326, 2
  br i1 %328, label %329, label %368

329:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #11
  invoke void @_ZN3JPH20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 16 dereferenceable(528) %54)
          to label %330 unwind label %354

330:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #11
  %331 = load float, ptr %46, align 4, !tbaa !9
  invoke void @_ZN3JPH15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEC2ERKS5_f(ptr noundef nonnull align 8 dereferenceable(12) %59, ptr noundef nonnull align 8 dereferenceable(8) %58, float noundef %331)
          to label %332 unwind label %358

332:                                              ; preds = %330
  %333 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %69, i32 0, i32 3
  %334 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %333)
          to label %335 unwind label %358

335:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 64, ptr %60) #11
  invoke void @_ZNK3JPH5Mat4411GetRotationEv(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %60, ptr noundef nonnull align 16 dereferenceable(64) %24)
          to label %336 unwind label %362

336:                                              ; preds = %335
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %61, ptr align 16 %14, i64 16, i1 false), !tbaa.struct !11
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %337, i32 0, i32 5
  %339 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 0
  %340 = load double, ptr %339, align 16
  %341 = getelementptr inbounds { double, double }, ptr %61, i32 0, i32 1
  %342 = load double, ptr %341, align 8
  %343 = invoke noundef zeroext i1 @_ZN3JPHL35sCorrectFractionForCharacterPaddingINS_15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEEEEbPKNS_5ShapeERKNS_5Mat44ES4_RKT_Rf(ptr noundef %334, ptr noundef nonnull align 16 dereferenceable(64) %60, double %340, double %342, ptr noundef nonnull align 8 dereferenceable(12) %59, ptr noundef nonnull align 4 dereferenceable(4) %338)
          to label %344 unwind label %362

344:                                              ; preds = %336
  %345 = zext i1 %343 to i8
  store i8 %345, ptr %57, align 1, !tbaa !55
  call void @llvm.lifetime.end.p0(i64 64, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %368

346:                                              ; preds = %310, %304
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %32, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %33, align 4
  br label %399

350:                                              ; preds = %325
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %32, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %33, align 4
  br label %398

354:                                              ; preds = %329
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %32, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %33, align 4
  br label %367

358:                                              ; preds = %332, %330
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %32, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %33, align 4
  br label %366

362:                                              ; preds = %336, %335
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %32, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %60) #11
  br label %366

366:                                              ; preds = %362, %358
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #11
  br label %367

367:                                              ; preds = %366, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %398

368:                                              ; preds = %344, %327
  %369 = load i8, ptr %57, align 1, !tbaa !55, !range !57, !noundef !58
  %370 = trunc i8 %369 to i1
  br i1 %370, label %386, label %371

371:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  store float 0.000000e+00, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #11
  %372 = load ptr, ptr %16, align 8, !tbaa !5
  %373 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %372, i32 0, i32 5
  %374 = load float, ptr %373, align 4, !tbaa !45
  %375 = load float, ptr %28, align 4, !tbaa !9
  %376 = fsub float %374, %375
  store float %376, ptr %63, align 4, !tbaa !9
  %377 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %62, ptr noundef nonnull align 4 dereferenceable(4) %63)
          to label %378 unwind label %382

378:                                              ; preds = %371
  %379 = load float, ptr %377, align 4, !tbaa !9
  %380 = load ptr, ptr %16, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %380, i32 0, i32 5
  store float %379, ptr %381, align 4, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %386

382:                                              ; preds = %371
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %32, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %398

386:                                              ; preds = %378, %368
  %387 = load ptr, ptr %16, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %387, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #11
  store float 1.000000e+00, ptr %64, align 4, !tbaa !9
  %389 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %388, ptr noundef nonnull align 4 dereferenceable(4) %64)
          to label %390 unwind label %394

390:                                              ; preds = %386
  %391 = load float, ptr %389, align 4, !tbaa !9
  %392 = load ptr, ptr %16, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %392, i32 0, i32 5
  store float %391, ptr %393, align 4, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #11
  store i1 true, ptr %12, align 1
  store i32 1, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #11
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %54) #11
  call void @llvm.lifetime.end.p0(i64 528, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %45) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #11
  br label %402

394:                                              ; preds = %386
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %32, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #11
  br label %398

398:                                              ; preds = %394, %382, %367, %350
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #11
  br label %399

399:                                              ; preds = %398, %346
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %54) #11
  call void @llvm.lifetime.end.p0(i64 528, ptr %54) #11
  br label %400

400:                                              ; preds = %399, %300, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %45) #11
  br label %401

401:                                              ; preds = %400, %268
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #11
  br label %403

402:                                              ; preds = %390, %213
  call void @llvm.lifetime.end.p0(i64 144, ptr %39) #11
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(120) %35) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr %31) #11
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #11
  br label %408

403:                                              ; preds = %401, %201
  call void @llvm.lifetime.end.p0(i64 144, ptr %39) #11
  br label %404

404:                                              ; preds = %403, %197
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(120) %35) #11
  br label %405

405:                                              ; preds = %404, %193
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #11
  br label %406

406:                                              ; preds = %405, %189
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #11
  br label %407

407:                                              ; preds = %406, %185
  call void @llvm.lifetime.end.p0(i64 128, ptr %31) #11
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  br label %410

408:                                              ; preds = %402, %73
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  %409 = load i1, ptr %12, align 1
  ret i1 %409

410:                                              ; preds = %407
  %411 = load ptr, ptr %32, align 8
  %412 = load i32, ptr %33, align 4
  %413 = insertvalue { ptr, i32 } poison, ptr %411, 0
  %414 = insertvalue { ptr, i32 } %413, i32 %412, 1
  resume { ptr, i32 } %414
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH16CharacterVirtual20ContactCastCollectorC2EPNS_13PhysicsSystemEPKS0_NS_4Vec3ES6_RKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS8_EEEES6_RNS0_7ContactE(ptr noundef nonnull align 16 dereferenceable(120), ptr noundef, ptr noundef, double, double, double, double, ptr noundef nonnull align 8 dereferenceable(32), double, double, ptr noundef nonnull align 16 dereferenceable(115)) unnamed_addr #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) unnamed_addr #8 align 2

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #10

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16TransformedShapeC2ENS_4Vec3ENS_4QuatEPKNS_5ShapeERKNS_6BodyIDERKNS_17SubShapeIDCreatorE(ptr noundef nonnull align 16 dereferenceable(64), double, double, double, double, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH16TransformedShapeaSEOS0_(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 16 dereferenceable(64)) #5 align 2

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

declare void @_ZNK3JPH13BodyInterface19GetTransformedShapeERKNS_6BodyIDE(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #10

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(528)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEC2ERKS5_f(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), float noundef) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3JPHL35sCorrectFractionForCharacterPaddingINS_15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEEEEbPKNS_5ShapeERKNS_5Mat44ES4_RKT_Rf(ptr noundef, ptr noundef nonnull align 16 dereferenceable(64), double, double, ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4)) #8

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZNK3JPH5Mat4411GetRotationEv(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(64)) #9 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)) #5

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 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 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 = { 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 #10 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{i64 0, i64 16, !12}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !29, i64 160}
!14 = !{!"_ZTSN3JPH16CharacterVirtualE", !15, i64 0, !6, i64 144, !6, i64 152, !29, i64 160, !10, i64 164, !19, i64 168, !19, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !19, i64 188, !10, i64 192, !10, i64 196, !30, i64 200, !10, i64 204, !10, i64 208, !21, i64 224, !21, i64 240, !31, i64 256, !21, i64 272, !32, i64 288, !10, i64 312, !30, i64 316, !28, i64 320, !25, i64 328}
!15 = !{!"_ZTSN3JPH13CharacterBaseE", !16, i64 8, !6, i64 16, !20, i64 24, !21, i64 32, !22, i64 48, !10, i64 64, !24, i64 68, !25, i64 72, !26, i64 76, !21, i64 80, !21, i64 96, !21, i64 112, !27, i64 128, !28, i64 136}
!16 = !{!"_ZTSN3JPH9RefTargetINS_13CharacterBaseEEE", !17, i64 0}
!17 = !{!"_ZTSSt6atomicIjE", !18, i64 0}
!18 = !{!"_ZTSSt13__atomic_baseIjE", !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!21 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!22 = !{!"_ZTSN3JPH5PlaneE", !23, i64 0}
!23 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!24 = !{!"_ZTSN3JPH13CharacterBase12EGroundStateE", !7, i64 0}
!25 = !{!"_ZTSN3JPH6BodyIDE", !19, i64 0}
!26 = !{!"_ZTSN3JPH10SubShapeIDE", !19, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !6, i64 0}
!28 = !{!"long", !7, i64 0}
!29 = !{!"_ZTSN3JPH13EBackFaceModeE", !7, i64 0}
!30 = !{!"bool", !7, i64 0}
!31 = !{!"_ZTSN3JPH4QuatE", !23, i64 0}
!32 = !{!"_ZTSN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEEE", !28, i64 0, !28, i64 8, !6, i64 16}
!33 = !{!34, !29, i64 32}
!34 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !35, i64 0, !29, i64 32, !29, i64 33, !30, i64 34, !30, i64 35}
!35 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !36, i64 0, !37, i64 1, !10, i64 4, !10, i64 8, !21, i64 16}
!36 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !7, i64 0}
!37 = !{!"_ZTSN3JPH17ECollectFacesModeE", !7, i64 0}
!38 = !{!34, !29, i64 33}
!39 = !{!35, !36, i64 0}
!40 = !{!34, !30, i64 34}
!41 = !{!34, !30, i64 35}
!42 = !{!14, !10, i64 184}
!43 = !{i64 0, i64 4, !44}
!44 = !{!19, !19, i64 0}
!45 = !{!46, !10, i64 68}
!46 = !{!"_ZTSN3JPH16CharacterVirtual7ContactE", !21, i64 0, !21, i64 16, !21, i64 32, !21, i64 48, !10, i64 64, !10, i64 68, !25, i64 72, !6, i64 80, !26, i64 88, !47, i64 92, !30, i64 93, !28, i64 96, !6, i64 104, !30, i64 112, !30, i64 113, !30, i64 114}
!47 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!48 = !{!15, !6, i64 16}
!49 = !{!14, !6, i64 152}
!50 = !{!51, !51, i64 0}
!51 = !{!"vtable pointer", !8, i64 0}
!52 = !{!46, !6, i64 80}
!53 = !{i64 0, i64 16, !12, i64 16, i64 16, !12, i64 32, i64 16, !12, i64 48, i64 16, !12, i64 64, i64 4, !9, i64 68, i64 4, !9, i64 72, i64 4, !44, i64 80, i64 8, !5, i64 88, i64 4, !44, i64 92, i64 1, !54, i64 93, i64 1, !55, i64 96, i64 8, !56, i64 104, i64 8, !5, i64 112, i64 1, !55, i64 113, i64 1, !55, i64 114, i64 1, !55}
!54 = !{!47, !47, i64 0}
!55 = !{!30, !30, i64 0}
!56 = !{!28, !28, i64 0}
!57 = !{i8 0, i8 2}
!58 = !{}


; 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::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::IgnoreSingleBodyFilterChained" = type { %"class.JPH::BodyFilter", %"class.JPH::BodyID", ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"struct.JPH::CharacterVirtual::Contact" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::BodyID", [4 x i8], ptr, %"class.JPH::SubShapeID", i8, i8, [2 x i8], i64, ptr, i8, i8, i8, [13 x i8] }>
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::CharacterVirtual::ContactCastCollector" = type <{ %"class.JPH::CollisionCollector.5", [8 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", ptr, ptr, ptr, ptr, ptr, [8 x i8] }>
%"class.JPH::CollisionCollector.5" = type { ptr, float, ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT.34" }
%"struct.JPH::ShapeCastT.34" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::TransformedShape" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::RefConst", %"class.JPH::Float3", %"class.JPH::BodyID", %"class.JPH::SubShapeIDCreator" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SubShapeIDCreator" = type { %"class.JPH::SubShapeID", i32 }
%"class.JPH::StaticArray" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"struct.JPH::PolygonConvexSupport" = type { ptr }
%"struct.JPH::AddConvexRadius" = type <{ ptr, float, [4 x i8] }>

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK3JPH13CharacterBase8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(144)) local_unnamed_addr #2 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) #3

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1140)) local_unnamed_addr #5 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH16CharacterVirtual24GetCenterOfMassTransformENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(332), double, double, double, double, ptr noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1140)) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %1, double %2, double %3, double %4, ptr noundef nonnull align 16 dereferenceable(115) %5, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(12) %10) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Mat44", align 16
  %14 = alloca %"class.JPH::ShapeCastSettings", align 16
  %15 = alloca %"class.JPH::IgnoreSingleBodyFilterChained", align 8
  %16 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  %17 = alloca %"class.JPH::CharacterVirtual::ContactCastCollector", align 16
  %18 = alloca %"struct.JPH::RShapeCast", align 16
  %19 = alloca %"class.JPH::TransformedShape", align 16
  %20 = alloca %"class.JPH::Mat44", align 16
  %21 = alloca %"class.JPH::TransformedShape", align 16
  %22 = alloca %"class.JPH::BodyID", align 4
  %23 = alloca %"class.JPH::SubShapeIDCreator", align 8
  %24 = alloca %"class.JPH::TransformedShape", align 16
  %25 = alloca %"class.JPH::StaticArray", align 16
  %26 = alloca %"struct.JPH::PolygonConvexSupport", align 8
  %27 = alloca %"struct.JPH::AddConvexRadius", align 8
  %28 = alloca %"class.JPH::Mat44", align 16
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  store double %3, ptr %12, align 16
  %32 = getelementptr inbounds i8, ptr %12, i64 8
  store double %4, ptr %32, align 8
  %33 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %12)
  %34 = fcmp olt float %33, 0x3E45798EE0000000
  br i1 %34, label %166, label %35

35:                                               ; preds = %11
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #10
  %36 = getelementptr inbounds i8, ptr %0, i64 256
  %.sroa.034.0.copyload = load double, ptr %36, align 16
  %.sroa.235.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 264
  %.sroa.235.0.copyload = load double, ptr %.sroa.235.0..sroa_idx, align 8, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %0, i64 24
  %38 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %37)
  call void @_ZNK3JPH16CharacterVirtual24GetCenterOfMassTransformENS_4Vec3ENS_4QuatEPKNS_5ShapeE(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %13, ptr noundef nonnull align 16 dereferenceable(332) %0, double %1, double %2, double %.sroa.034.0.copyload, double %.sroa.235.0.copyload, ptr noundef %38)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %14) #10
  call void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %14)
  %39 = getelementptr inbounds i8, ptr %0, i64 160
  %40 = load i8, ptr %39, align 16, !tbaa !8
  %41 = getelementptr inbounds i8, ptr %14, i64 32
  store i8 %40, ptr %41, align 16, !tbaa !30
  %42 = getelementptr inbounds i8, ptr %14, i64 33
  store i8 0, ptr %42, align 1, !tbaa !35
  store i8 0, ptr %14, align 16, !tbaa !36
  %43 = getelementptr inbounds i8, ptr %14, i64 34
  store i8 1, ptr %43, align 2, !tbaa !37
  %44 = getelementptr inbounds i8, ptr %14, i64 35
  store i8 0, ptr %44, align 1, !tbaa !38
  %45 = getelementptr inbounds i8, ptr %0, i64 184
  %46 = load float, ptr %45, align 8, !tbaa !39
  %47 = call noundef float @_ZSt4sqrtf(float noundef %33)
  %48 = fdiv float %46, %47
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #10
  %49 = getelementptr inbounds i8, ptr %0, i64 328
  %.sroa.031.0.copyload = load i32, ptr %49, align 8, !tbaa !40
  call void @_ZN3JPH29IgnoreSingleBodyFilterChainedC2ENS_6BodyIDERKNS_10BodyFilterE(ptr noundef nonnull align 8 dereferenceable(24) %15, i32 %.sroa.031.0.copyload, ptr noundef nonnull align 8 dereferenceable(8) %9)
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %16) #10
  invoke void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %16)
          to label %50 unwind label %77

50:                                               ; preds = %35
  %51 = fadd float %48, 1.000000e+00
  %52 = getelementptr inbounds i8, ptr %16, i64 68
  store float %51, ptr %52, align 4, !tbaa !41
  %53 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %13)
          to label %54 unwind label %79

54:                                               ; preds = %50
  %55 = extractvalue { double, double } %53, 0
  %56 = extractvalue { double, double } %53, 1
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %17) #10
  %57 = getelementptr inbounds i8, ptr %0, i64 16
  %58 = load ptr, ptr %57, align 16, !tbaa !44
  %.sroa.026.0.copyload = load double, ptr %12, align 16
  %.sroa.227.0.copyload = load double, ptr %32, align 8, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %0, i64 32
  %.sroa.024.0.copyload = load double, ptr %59, align 16
  %.sroa.225.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 40
  %.sroa.225.0.copyload = load double, ptr %.sroa.225.0..sroa_idx, align 8, !tbaa !5
  call void @_ZN3JPH16CharacterVirtual20ContactCastCollectorC2EPNS_13PhysicsSystemEPKS0_NS_4Vec3ES6_RKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS8_EEEES6_RNS0_7ContactE(ptr noundef nonnull align 16 dereferenceable(120) %17, ptr noundef %58, ptr noundef nonnull %0, double %.sroa.026.0.copyload, double %.sroa.227.0.copyload, double %.sroa.024.0.copyload, double %.sroa.225.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %6, double %55, double %56, ptr noundef nonnull align 16 dereferenceable(115) %16)
  %60 = load float, ptr %52, align 4, !tbaa !41
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEE21ResetEarlyOutFractionEf(ptr noundef nonnull align 8 dereferenceable(24) %17, float noundef %60)
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %18) #10
  %61 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %37)
  %62 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 1.000000e+00)
          to label %63 unwind label %81

63:                                               ; preds = %54
  %64 = extractvalue { double, double } %62, 0
  %65 = extractvalue { double, double } %62, 1
  %.sroa.018.0.copyload = load double, ptr %12, align 16
  %.sroa.219.0.copyload = load double, ptr %32, align 8, !tbaa !5
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %18, ptr noundef %61, double %64, double %65, ptr noundef nonnull align 16 dereferenceable(64) %13, double %.sroa.018.0.copyload, double %.sroa.219.0.copyload)
          to label %66 unwind label %81

66:                                               ; preds = %63
  %67 = load ptr, ptr %57, align 16, !tbaa !44
  %68 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1140) %67)
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %68, ptr noundef nonnull align 16 dereferenceable(144) %18, ptr noundef nonnull align 16 dereferenceable(36) %14, double %55, double %56, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(12) %10)
          to label %69 unwind label %81

69:                                               ; preds = %66
  %70 = getelementptr inbounds i8, ptr %0, i64 152
  %71 = load ptr, ptr %70, align 8, !tbaa !45
  %.not = icmp eq ptr %71, null
  br i1 %.not, label %83, label %72

72:                                               ; preds = %69
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEE10SetContextEPKNS_16TransformedShapeE(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef null)
  %73 = load ptr, ptr %70, align 8, !tbaa !45
  %.sroa.014.0.copyload = load double, ptr %12, align 16
  %.sroa.215.0.copyload = load double, ptr %32, align 8, !tbaa !5
  %74 = load ptr, ptr %73, align 8, !tbaa !46
  %75 = getelementptr inbounds i8, ptr %74, i64 24
  %76 = load ptr, ptr %75, align 8
  invoke void %76(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull %0, ptr noundef nonnull align 16 dereferenceable(64) %13, double %.sroa.014.0.copyload, double %.sroa.215.0.copyload, ptr noundef nonnull align 16 dereferenceable(36) %14, double %55, double %56, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %83 unwind label %81

77:                                               ; preds = %35
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %165

79:                                               ; preds = %50
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %165

81:                                               ; preds = %72, %66, %63, %54
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %164

83:                                               ; preds = %72, %69
  %84 = getelementptr inbounds i8, ptr %16, i64 72
  %85 = call noundef zeroext i1 @_ZNK3JPH6BodyID9IsInvalidEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
  %86 = getelementptr inbounds i8, ptr %16, i64 80
  %87 = load ptr, ptr %86, align 16
  %88 = icmp eq ptr %87, null
  %or.cond = select i1 %85, i1 %88, i1 false
  br i1 %or.cond, label %163, label %89

89:                                               ; preds = %83
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(115) %5, ptr noundef nonnull align 16 dereferenceable(115) %16, i64 115, i1 false), !tbaa.struct !48
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %19) #10
  invoke void @_ZN3JPH16TransformedShapeC2Ev(ptr noundef nonnull align 16 dereferenceable(64) %19)
          to label %90 unwind label %113

90:                                               ; preds = %89
  %91 = load float, ptr %45, align 8, !tbaa !39
  %92 = getelementptr inbounds i8, ptr %5, i64 80
  %93 = load ptr, ptr %92, align 16, !tbaa !54
  %.not75 = icmp eq ptr %93, null
  br i1 %.not75, label %123, label %94

94:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #10
  invoke void @_ZNK3JPH16CharacterVirtual24GetCenterOfMassTransformEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %20, ptr noundef nonnull align 16 dereferenceable(332) %93)
          to label %95 unwind label %115

95:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #10
  %96 = invoke { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %20)
          to label %97 unwind label %117

97:                                               ; preds = %95
  %98 = extractvalue { double, double } %96, 0
  %99 = extractvalue { double, double } %96, 1
  %100 = invoke { double, double } @_ZNK3JPH5Mat4413GetQuaternionEv(ptr noundef nonnull align 16 dereferenceable(64) %20)
          to label %101 unwind label %117

101:                                              ; preds = %97
  %102 = load ptr, ptr %92, align 16, !tbaa !54
  %103 = invoke noundef ptr @_ZNK3JPH13CharacterBase8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(144) %102)
          to label %104 unwind label %117

104:                                              ; preds = %101
  %105 = extractvalue { double, double } %100, 1
  %106 = extractvalue { double, double } %100, 0
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %22)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  store i64 0, ptr %23, align 8
  call void @_ZN3JPH17SubShapeIDCreatorC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %23) #10
  invoke void @_ZN3JPH16TransformedShapeC2ENS_4Vec3ENS_4QuatEPKNS_5ShapeERKNS_6BodyIDERKNS_17SubShapeIDCreatorE(ptr noundef nonnull align 16 dereferenceable(64) %21, double %98, double %99, double %106, double %105, ptr noundef %103, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(8) %23)
          to label %107 unwind label %119

107:                                              ; preds = %104
  %108 = call noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH16TransformedShapeaSEOS0_(ptr noundef nonnull align 16 dereferenceable(64) %19, ptr noundef nonnull align 16 dereferenceable(64) %21) #10
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #10
  %109 = load ptr, ptr %92, align 16, !tbaa !54
  %110 = getelementptr inbounds i8, ptr %109, i64 184
  %111 = load float, ptr %110, align 8, !tbaa !39
  %112 = fadd float %91, %111
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #10
  br label %131

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

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

117:                                              ; preds = %101, %97, %95
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %121

119:                                              ; preds = %104
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #10
  br label %121

121:                                              ; preds = %119, %117
  %.pn = phi { ptr, i32 } [ %120, %119 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #10
  br label %122

122:                                              ; preds = %121, %115
  %.pn.pn = phi { ptr, i32 } [ %.pn, %121 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #10
  br label %161

123:                                              ; preds = %90
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %24) #10
  %124 = load ptr, ptr %57, align 16, !tbaa !44
  %125 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH13PhysicsSystem16GetBodyInterfaceEv(ptr noundef nonnull align 16 dereferenceable(1140) %124)
  %126 = getelementptr inbounds i8, ptr %5, i64 72
  invoke void @_ZNK3JPH13BodyInterface19GetTransformedShapeERKNS_6BodyIDE(ptr dead_on_unwind nonnull writable sret(%"class.JPH::TransformedShape") align 16 %24, ptr noundef nonnull align 8 dereferenceable(24) %125, ptr noundef nonnull align 4 dereferenceable(4) %126)
          to label %127 unwind label %129

127:                                              ; preds = %123
  %128 = call noundef nonnull align 16 dereferenceable(64) ptr @_ZN3JPH16TransformedShapeaSEOS0_(ptr noundef nonnull align 16 dereferenceable(64) %19, ptr noundef nonnull align 16 dereferenceable(64) %24) #10
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %24) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #10
  br label %131

129:                                              ; preds = %123
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #10
  br label %161

131:                                              ; preds = %127, %107
  %.073 = phi float [ %112, %107 ], [ %91, %127 ]
  call void @llvm.lifetime.start.p0(i64 528, ptr nonnull %25) #10
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EEC2Ev(ptr noundef nonnull align 16 dereferenceable(528) %25) #10
  %132 = getelementptr inbounds i8, ptr %5, i64 32
  %133 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %132)
          to label %134 unwind label %147

134:                                              ; preds = %131
  %135 = getelementptr inbounds i8, ptr %5, i64 88
  %136 = extractvalue { double, double } %133, 0
  %137 = extractvalue { double, double } %133, 1
  invoke void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64) %19, ptr noundef nonnull align 4 dereferenceable(4) %135, double %136, double %137, double %55, double %56, ptr noundef nonnull align 16 dereferenceable(528) %25)
          to label %138 unwind label %147

138:                                              ; preds = %134
  %139 = call noundef i32 @_ZNK3JPH11StaticArrayINS_4Vec3ELj32EE4sizeEv(ptr noundef nonnull align 16 dereferenceable(528) %25)
  %140 = icmp ugt i32 %139, 1
  br i1 %140, label %141, label %.critedge

141:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  call void @_ZN3JPH20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 16 dereferenceable(528) %25)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #10
  call void @_ZN3JPH15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEC2ERKS5_f(ptr noundef nonnull align 8 dereferenceable(12) %27, ptr noundef nonnull align 8 dereferenceable(8) %26, float noundef %.073)
  %142 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %37)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %28) #10
  invoke void @_ZNK3JPH5Mat4411GetRotationEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %28, ptr noundef nonnull align 16 dereferenceable(64) %13)
          to label %143 unwind label %149

143:                                              ; preds = %141
  %.sroa.0.0.copyload = load double, ptr %12, align 16
  %.sroa.2.0.copyload = load double, ptr %32, align 8, !tbaa !5
  %144 = getelementptr inbounds i8, ptr %5, i64 68
  %145 = invoke noundef zeroext i1 @_ZN3JPHL35sCorrectFractionForCharacterPaddingINS_15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEEEEbPKNS_5ShapeERKNS_5Mat44ES4_RKT_Rf(ptr noundef %142, ptr noundef nonnull align 16 dereferenceable(64) %28, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload, ptr noundef nonnull align 8 dereferenceable(12) %27, ptr noundef nonnull align 4 dereferenceable(4) %144)
          to label %146 unwind label %149

146:                                              ; preds = %143
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br i1 %145, label %156, label %.critedge

147:                                              ; preds = %134, %131
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %160

149:                                              ; preds = %143, %141
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  br label %160

.critedge:                                        ; preds = %138, %146
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #10
  store float 0.000000e+00, ptr %29, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #10
  %151 = getelementptr inbounds i8, ptr %5, i64 68
  %152 = load float, ptr %151, align 4, !tbaa !41
  %153 = fsub float %152, %48
  store float %153, ptr %30, align 4, !tbaa !49
  %154 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %30)
  %155 = load float, ptr %154, align 4, !tbaa !49
  store float %155, ptr %151, align 4, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #10
  br label %156

156:                                              ; preds = %.critedge, %146
  %157 = getelementptr inbounds i8, ptr %5, i64 68
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #10
  store float 1.000000e+00, ptr %31, align 4, !tbaa !49
  %158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull align 4 dereferenceable(4) %31)
  %159 = load float, ptr %158, align 4, !tbaa !49
  store float %159, ptr %157, align 4, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #10
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %25) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %25) #10
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %19) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #10
  br label %163

160:                                              ; preds = %149, %147
  %.pn78 = phi { ptr, i32 } [ %150, %149 ], [ %148, %147 ]
  call void @_ZN3JPH11StaticArrayINS_4Vec3ELj32EED2Ev(ptr noundef nonnull align 16 dereferenceable(528) %25) #10
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %25) #10
  br label %161

161:                                              ; preds = %160, %129, %122
  %.pn78.pn = phi { ptr, i32 } [ %.pn78, %160 ], [ %.pn.pn, %122 ], [ %130, %129 ]
  call void @_ZN3JPH16TransformedShapeD2Ev(ptr noundef nonnull align 16 dereferenceable(64) %19) #10
  br label %162

162:                                              ; preds = %161, %113
  %.pn78.pn.pn = phi { ptr, i32 } [ %.pn78.pn, %161 ], [ %114, %113 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #10
  br label %164

163:                                              ; preds = %83, %156
  %.0 = xor i1 %or.cond, true
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %18) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(120) %17) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %16) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #10
  br label %166

164:                                              ; preds = %162, %81
  %.pn78.pn.pn.pn = phi { ptr, i32 } [ %.pn78.pn.pn, %162 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %18) #10
  call void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(120) %17) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %17) #10
  br label %165

165:                                              ; preds = %79, %164, %77
  %.pn78.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %78, %77 ], [ %.pn78.pn.pn.pn, %164 ], [ %80, %79 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %16) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #10
  resume { ptr, i32 } %.pn78.pn.pn.pn.pn.pn

166:                                              ; preds = %11, %163
  %.1 = phi i1 [ %.0, %163 ], [ false, %11 ]
  ret i1 %.1
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36)) unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH16CharacterVirtual20ContactCastCollectorC2EPNS_13PhysicsSystemEPKS0_NS_4Vec3ES6_RKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS8_EEEES6_RNS0_7ContactE(ptr noundef nonnull align 16 dereferenceable(120), ptr noundef, ptr noundef, double, double, double, double, ptr noundef nonnull align 8 dereferenceable(32), double, double, ptr noundef nonnull align 16 dereferenceable(115)) unnamed_addr #5 align 2

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

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

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #9

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16TransformedShapeC2ENS_4Vec3ENS_4QuatEPKNS_5ShapeERKNS_6BodyIDERKNS_17SubShapeIDCreatorE(ptr noundef nonnull align 16 dereferenceable(64), double, double, double, double, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #2 align 2

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

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

declare void @_ZNK3JPH13BodyInterface19GetTransformedShapeERKNS_6BodyIDE(ptr dead_on_unwind writable sret(%"class.JPH::TransformedShape") align 16, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #9

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16TransformedShape17GetSupportingFaceERKNS_10SubShapeIDENS_4Vec3ES4_RNS_11StaticArrayIS4_Lj32EEE(ptr noundef nonnull align 16 dereferenceable(64), ptr noundef nonnull align 4 dereferenceable(4), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(528)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 16 dereferenceable(528)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEC2ERKS5_f(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(8), float noundef) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3JPHL35sCorrectFractionForCharacterPaddingINS_15AddConvexRadiusINS_20PolygonConvexSupportINS_11StaticArrayINS_4Vec3ELj32EEEEEEEEEbPKNS_5ShapeERKNS_5Mat44ES4_RKT_Rf(ptr noundef, ptr noundef nonnull align 16 dereferenceable(64), double, double, ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #7

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

; Function Attrs: 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 #4

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 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 = { 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 #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !26, i64 160}
!9 = !{!"_ZTSN3JPH16CharacterVirtualE", !10, i64 0, !15, i64 144, !15, i64 152, !26, i64 160, !20, i64 164, !14, i64 168, !14, i64 172, !20, i64 176, !20, i64 180, !20, i64 184, !14, i64 188, !20, i64 192, !20, i64 196, !27, i64 200, !20, i64 204, !20, i64 208, !17, i64 224, !17, i64 240, !28, i64 256, !17, i64 272, !29, i64 288, !20, i64 312, !27, i64 316, !25, i64 320, !22, i64 328}
!10 = !{!"_ZTSN3JPH13CharacterBaseE", !11, i64 8, !15, i64 16, !16, i64 24, !17, i64 32, !18, i64 48, !20, i64 64, !21, i64 68, !22, i64 72, !23, i64 76, !17, i64 80, !17, i64 96, !17, i64 112, !24, i64 128, !25, i64 136}
!11 = !{!"_ZTSN3JPH9RefTargetINS_13CharacterBaseEEE", !12, i64 0}
!12 = !{!"_ZTSSt6atomicIjE", !13, i64 0}
!13 = !{!"_ZTSSt13__atomic_baseIjE", !14, i64 0}
!14 = !{!"int", !6, i64 0}
!15 = !{!"any pointer", !6, i64 0}
!16 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !15, i64 0}
!17 = !{!"_ZTSN3JPH4Vec3E", !6, i64 0}
!18 = !{!"_ZTSN3JPH5PlaneE", !19, i64 0}
!19 = !{!"_ZTSN3JPH4Vec4E", !6, i64 0}
!20 = !{!"float", !6, i64 0}
!21 = !{!"_ZTSN3JPH13CharacterBase12EGroundStateE", !6, i64 0}
!22 = !{!"_ZTSN3JPH6BodyIDE", !14, i64 0}
!23 = !{!"_ZTSN3JPH10SubShapeIDE", !14, i64 0}
!24 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !15, i64 0}
!25 = !{!"long", !6, i64 0}
!26 = !{!"_ZTSN3JPH13EBackFaceModeE", !6, i64 0}
!27 = !{!"bool", !6, i64 0}
!28 = !{!"_ZTSN3JPH4QuatE", !19, i64 0}
!29 = !{!"_ZTSN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !15, i64 16}
!30 = !{!31, !26, i64 32}
!31 = !{!"_ZTSN3JPH17ShapeCastSettingsE", !32, i64 0, !26, i64 32, !26, i64 33, !27, i64 34, !27, i64 35}
!32 = !{!"_ZTSN3JPH19CollideSettingsBaseE", !33, i64 0, !34, i64 1, !20, i64 4, !20, i64 8, !17, i64 16}
!33 = !{!"_ZTSN3JPH15EActiveEdgeModeE", !6, i64 0}
!34 = !{!"_ZTSN3JPH17ECollectFacesModeE", !6, i64 0}
!35 = !{!31, !26, i64 33}
!36 = !{!32, !33, i64 0}
!37 = !{!31, !27, i64 34}
!38 = !{!31, !27, i64 35}
!39 = !{!9, !20, i64 184}
!40 = !{!14, !14, i64 0}
!41 = !{!42, !20, i64 68}
!42 = !{!"_ZTSN3JPH16CharacterVirtual7ContactE", !17, i64 0, !17, i64 16, !17, i64 32, !17, i64 48, !20, i64 64, !20, i64 68, !22, i64 72, !15, i64 80, !23, i64 88, !43, i64 92, !27, i64 93, !25, i64 96, !15, i64 104, !27, i64 112, !27, i64 113, !27, i64 114}
!43 = !{!"_ZTSN3JPH11EMotionTypeE", !6, i64 0}
!44 = !{!10, !15, i64 16}
!45 = !{!9, !15, i64 152}
!46 = !{!47, !47, i64 0}
!47 = !{!"vtable pointer", !7, i64 0}
!48 = !{i64 0, i64 16, !5, i64 16, i64 16, !5, i64 32, i64 16, !5, i64 48, i64 16, !5, i64 64, i64 4, !49, i64 68, i64 4, !49, i64 72, i64 4, !40, i64 80, i64 8, !50, i64 88, i64 4, !40, i64 92, i64 1, !51, i64 93, i64 1, !52, i64 96, i64 8, !53, i64 104, i64 8, !50, i64 112, i64 1, !52, i64 113, i64 1, !52, i64 114, i64 1, !52}
!49 = !{!20, !20, i64 0}
!50 = !{!15, !15, i64 0}
!51 = !{!43, !43, i64 0}
!52 = !{!27, !27, i64 0}
!53 = !{!25, !25, i64 0}
!54 = !{!42, !15, i64 80}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass