; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Character/Character.ll (ZN3JPH9Character14PostSimulationEfb)

; 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::RefConst.1" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%class.MyCollector = type <{ %"class.JPH::CollisionCollector", %"class.JPH::BodyID", %"class.JPH::SubShapeID", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"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::RefConst" = type { ptr }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::Character" = type <{ %"class.JPH::CharacterBase", %"class.JPH::BodyID", i16, [10 x i8] }>

@_ZN3JPH15PhysicsMaterial8sDefaultE = external global %"class.JPH::RefConst.1", align 8

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH9Character14CheckCollisionENS_4Vec3ENS_4QuatES1_fPKNS_5ShapeES1_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEb(ptr noundef nonnull align 16 dereferenceable(150), double, double, double, double, double, double, float noundef, ptr noundef, ptr noundef byval(%"class.JPH::Vec3") align 16, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) #3 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH9Character14PostSimulationEfb(ptr noundef nonnull align 16 dereferenceable(150) %0, float noundef %1, i1 noundef zeroext %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca i8, align 1
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::Quat", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::BodyLockRead", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Quat", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %class.MyCollector, align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Quat", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::BodyLockRead", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.JPH::Mat44", align 16
  %28 = alloca %"class.JPH::Quat", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Vec3", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %4, align 8, !tbaa !5
  store float %1, ptr %5, align 4, !tbaa !9
  %36 = zext i1 %2 to i8
  store i8 %36, ptr %6, align 1, !tbaa !11
  %37 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #8
  %38 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 2
  %39 = load ptr, ptr %38, align 16, !tbaa !13
  %40 = load i8, ptr %6, align 1, !tbaa !11, !range !28, !noundef !29
  %41 = trunc i8 %40 to i1
  %42 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPHL21sGetBodyLockInterfaceEPKNS_13PhysicsSystemEb(ptr noundef %39, i1 noundef zeroext %41)
  %43 = getelementptr inbounds %"class.JPH::Character", ptr %37, i32 0, i32 1
  call void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(16) %42, ptr noundef nonnull align 4 dereferenceable(4) %43)
  %44 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %45 unwind label %47

45:                                               ; preds = %3
  br i1 %44, label %51, label %46

46:                                               ; preds = %45
  store i32 1, ptr %13, align 4
  br label %82

47:                                               ; preds = %3
  %48 = landingpad { ptr, i32 }
          cleanup
  %49 = extractvalue { ptr, i32 } %48, 0
  store ptr %49, ptr %11, align 8
  %50 = extractvalue { ptr, i32 } %48, 1
  store i32 %50, ptr %12, align 4
  br label %183

51:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %52 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %53 unwind label %166

53:                                               ; preds = %51
  store ptr %52, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #8
  %54 = load ptr, ptr %14, align 8, !tbaa !5
  %55 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %54)
          to label %56 unwind label %170

56:                                               ; preds = %53
  %57 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i32 0, i32 0
  %58 = getelementptr inbounds %union.anon, ptr %57, i32 0, i32 0
  %59 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %60 = extractvalue { double, double } %55, 0
  store double %60, ptr %59, align 16
  %61 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %62 = extractvalue { double, double } %55, 1
  store double %62, ptr %61, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %7, ptr align 16 %15, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #8
  %63 = load ptr, ptr %14, align 8, !tbaa !5
  %64 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %63)
          to label %65 unwind label %174

65:                                               ; preds = %56
  %66 = getelementptr inbounds %"class.JPH::Quat", ptr %16, i32 0, i32 0
  %67 = getelementptr inbounds %"class.JPH::Vec4", ptr %66, i32 0, i32 0
  %68 = getelementptr inbounds %union.anon.0, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %70 = extractvalue { double, double } %64, 0
  store double %70, ptr %69, align 16
  %71 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %72 = extractvalue { double, double } %64, 1
  store double %72, ptr %71, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %8, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #8
  %73 = load ptr, ptr %14, align 8, !tbaa !5
  %74 = invoke { double, double } @_ZNK3JPH4Body17GetLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(122) %73)
          to label %75 unwind label %178

75:                                               ; preds = %65
  %76 = getelementptr inbounds %"class.JPH::Vec3", ptr %17, i32 0, i32 0
  %77 = getelementptr inbounds %union.anon, ptr %76, i32 0, i32 0
  %78 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %79 = extractvalue { double, double } %74, 0
  store double %79, ptr %78, align 16
  %80 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %81 = extractvalue { double, double } %74, 1
  store double %81, ptr %80, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %9, ptr align 16 %17, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  store i32 0, ptr %13, align 4
  br label %82

82:                                               ; preds = %75, %46
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #8
  %83 = load i32, ptr %13, align 4
  switch i32 %83, label %275 [
    i32 0, label %84
  ]

84:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 112, ptr %18) #8
  %85 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %19, ptr align 16 %85, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %20, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !30
  %86 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %87 = load double, ptr %86, align 16
  %88 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %89 = load double, ptr %88, align 8
  %90 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %91 = load double, ptr %90, align 16
  %92 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %93 = load double, ptr %92, align 8
  call void @_ZZN3JPH9Character14PostSimulationEfbEN11MyCollectorC2ENS_4Vec3ES2_(ptr noundef nonnull align 16 dereferenceable(100) %18, double %87, double %89, double %91, double %93)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %21, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %8, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 %9, i64 16, i1 false), !tbaa.struct !30
  %94 = load float, ptr %5, align 4, !tbaa !9
  %95 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 3
  %96 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %97 unwind label %184

97:                                               ; preds = %84
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !30
  %98 = load i8, ptr %6, align 1, !tbaa !11, !range !28, !noundef !29
  %99 = trunc i8 %98 to i1
  %100 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %101 = load double, ptr %100, align 16
  %102 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %103 = load double, ptr %102, align 8
  %104 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %105 = load double, ptr %104, align 16
  %106 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %107 = load double, ptr %106, align 8
  %108 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %109 = load double, ptr %108, align 16
  %110 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %111 = load double, ptr %110, align 8
  invoke void @_ZNK3JPH9Character14CheckCollisionENS_4Vec3ENS_4QuatES1_fPKNS_5ShapeES1_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEb(ptr noundef nonnull align 16 dereferenceable(150) %37, double %101, double %103, double %105, double %107, double %109, double %111, float noundef %94, ptr noundef %96, ptr noundef byval(%"class.JPH::Vec3") align 16 %24, ptr noundef nonnull align 8 dereferenceable(24) %18, i1 noundef zeroext %99)
          to label %112 unwind label %184

112:                                              ; preds = %97
  %113 = getelementptr inbounds %class.MyCollector, ptr %18, i32 0, i32 1
  %114 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %114, ptr align 8 %113, i64 4, i1 false), !tbaa.struct !32
  %115 = getelementptr inbounds %class.MyCollector, ptr %18, i32 0, i32 2
  %116 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %116, ptr align 4 %115, i64 4, i1 false), !tbaa.struct !32
  %117 = getelementptr inbounds %class.MyCollector, ptr %18, i32 0, i32 3
  %118 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %118, ptr align 16 %117, i64 16, i1 false), !tbaa.struct !30
  %119 = getelementptr inbounds %class.MyCollector, ptr %18, i32 0, i32 4
  %120 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %120, ptr align 16 %119, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #8
  %121 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 2
  %122 = load ptr, ptr %121, align 16, !tbaa !13
  %123 = load i8, ptr %6, align 1, !tbaa !11, !range !28, !noundef !29
  %124 = trunc i8 %123 to i1
  %125 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPHL21sGetBodyLockInterfaceEPKNS_13PhysicsSystemEb(ptr noundef %122, i1 noundef zeroext %124)
          to label %126 unwind label %188

126:                                              ; preds = %112
  %127 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 8
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(16) %125, ptr noundef nonnull align 4 dereferenceable(4) %127)
          to label %128 unwind label %188

128:                                              ; preds = %126
  %129 = invoke noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %130 unwind label %192

130:                                              ; preds = %128
  br i1 %129, label %131, label %255

131:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %132 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %133 unwind label %196

133:                                              ; preds = %131
  store ptr %132, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %27) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %28, ptr align 16 %8, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %29, ptr align 16 %7, i64 16, i1 false), !tbaa.struct !30
  %134 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %135 = load double, ptr %134, align 16
  %136 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %137 = load double, ptr %136, align 8
  %138 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %139 = load double, ptr %138, align 16
  %140 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %141 = load double, ptr %140, align 8
  invoke void @_ZN3JPH5Mat4427sInverseRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %27, double %135, double %137, double %139, double %141)
          to label %142 unwind label %200

142:                                              ; preds = %133
  %143 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 5
  %144 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %144, i64 16, i1 false), !tbaa.struct !30
  %145 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %146 = load double, ptr %145, align 16
  %147 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %148 = load double, ptr %147, align 8
  %149 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %27, double %146, double %148)
          to label %150 unwind label %200

150:                                              ; preds = %142
  %151 = getelementptr inbounds %"class.JPH::Vec3", ptr %30, i32 0, i32 0
  %152 = getelementptr inbounds %union.anon, ptr %151, i32 0, i32 0
  %153 = getelementptr inbounds { double, double }, ptr %152, i32 0, i32 0
  %154 = extractvalue { double, double } %149, 0
  store double %154, ptr %153, align 16
  %155 = getelementptr inbounds { double, double }, ptr %152, i32 0, i32 1
  %156 = extractvalue { double, double } %149, 1
  store double %156, ptr %155, align 8
  %157 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %158 = load double, ptr %157, align 16
  %159 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %160 = load double, ptr %159, align 8
  %161 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %143, double %158, double %160)
          to label %162 unwind label %200

162:                                              ; preds = %150
  %163 = fcmp ogt float %161, 0.000000e+00
  br i1 %163, label %164, label %204

164:                                              ; preds = %162
  %165 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 7
  store i32 2, ptr %165, align 4, !tbaa !34
  br label %217

166:                                              ; preds = %51
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %11, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %12, align 4
  br label %182

170:                                              ; preds = %53
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %11, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #8
  br label %182

174:                                              ; preds = %56
  %175 = landingpad { ptr, i32 }
          cleanup
  %176 = extractvalue { ptr, i32 } %175, 0
  store ptr %176, ptr %11, align 8
  %177 = extractvalue { ptr, i32 } %175, 1
  store i32 %177, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #8
  br label %182

178:                                              ; preds = %65
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %11, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #8
  br label %182

182:                                              ; preds = %178, %174, %170, %166
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %183

183:                                              ; preds = %182, %47
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #8
  br label %281

184:                                              ; preds = %97, %84
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %11, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %12, align 4
  br label %280

188:                                              ; preds = %126, %112
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %11, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %12, align 4
  br label %279

192:                                              ; preds = %255, %128
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %11, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %12, align 4
  br label %278

196:                                              ; preds = %131
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %11, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %12, align 4
  br label %254

200:                                              ; preds = %237, %226, %220, %217, %204, %150, %142, %133
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %11, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %12, align 4
  br label %253

204:                                              ; preds = %162
  %205 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 %205, i64 16, i1 false), !tbaa.struct !30
  %206 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %207 = load double, ptr %206, align 16
  %208 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %209 = load double, ptr %208, align 8
  %210 = invoke noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %37, double %207, double %209)
          to label %211 unwind label %200

211:                                              ; preds = %204
  br i1 %210, label %212, label %214

212:                                              ; preds = %211
  %213 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 7
  store i32 1, ptr %213, align 4, !tbaa !34
  br label %216

214:                                              ; preds = %211
  %215 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 7
  store i32 0, ptr %215, align 4, !tbaa !34
  br label %216

216:                                              ; preds = %214, %212
  br label %217

217:                                              ; preds = %216, %164
  %218 = load ptr, ptr %26, align 8, !tbaa !5
  %219 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %218)
          to label %220 unwind label %200

220:                                              ; preds = %217
  %221 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 9
  %222 = load ptr, ptr %219, align 8, !tbaa !35
  %223 = getelementptr inbounds ptr, ptr %222, i64 10
  %224 = load ptr, ptr %223, align 8
  %225 = invoke noundef ptr %224(ptr noundef nonnull align 8 dereferenceable(26) %219, ptr noundef nonnull align 4 dereferenceable(4) %221)
          to label %226 unwind label %200

226:                                              ; preds = %220
  %227 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 13
  %228 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_15PhysicsMaterialEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef %225)
          to label %229 unwind label %200

229:                                              ; preds = %226
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #8
  %230 = load ptr, ptr %26, align 8, !tbaa !5
  %231 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 %231, i64 16, i1 false), !tbaa.struct !30
  %232 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %233 = load double, ptr %232, align 16
  %234 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %235 = load double, ptr %234, align 8
  %236 = invoke { double, double } @_ZNK3JPH4Body16GetPointVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %230, double %233, double %235)
          to label %237 unwind label %249

237:                                              ; preds = %229
  %238 = getelementptr inbounds %"class.JPH::Vec3", ptr %33, i32 0, i32 0
  %239 = getelementptr inbounds %union.anon, ptr %238, i32 0, i32 0
  %240 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 0
  %241 = extractvalue { double, double } %236, 0
  store double %241, ptr %240, align 16
  %242 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 1
  %243 = extractvalue { double, double } %236, 1
  store double %243, ptr %242, align 8
  %244 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %244, ptr align 16 %33, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  %245 = load ptr, ptr %26, align 8, !tbaa !5
  %246 = invoke noundef i64 @_ZNK3JPH4Body11GetUserDataEv(ptr noundef nonnull align 16 dereferenceable(122) %245)
          to label %247 unwind label %200

247:                                              ; preds = %237
  %248 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 14
  store i64 %246, ptr %248, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %274

249:                                              ; preds = %229
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %11, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #8
  br label %253

253:                                              ; preds = %249, %200
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #8
  br label %254

254:                                              ; preds = %253, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %278

255:                                              ; preds = %130
  %256 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 7
  store i32 3, ptr %256, align 4, !tbaa !34
  %257 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 13
  %258 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_15PhysicsMaterialEEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(8) %257, ptr noundef nonnull align 8 dereferenceable(8) @_ZN3JPH15PhysicsMaterial8sDefaultE)
          to label %259 unwind label %192

259:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #8
  %260 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %261 unwind label %270

261:                                              ; preds = %259
  %262 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %263 = getelementptr inbounds %union.anon, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 0
  %265 = extractvalue { double, double } %260, 0
  store double %265, ptr %264, align 16
  %266 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 1
  %267 = extractvalue { double, double } %260, 1
  store double %267, ptr %266, align 8
  %268 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %268, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !30
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  %269 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %37, i32 0, i32 14
  store i64 0, ptr %269, align 8, !tbaa !37
  br label %274

270:                                              ; preds = %259
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %11, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  br label %278

274:                                              ; preds = %261, %247
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  call void @_ZN3JPH18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(100) %18) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %18) #8
  store i32 0, ptr %13, align 4
  br label %275

275:                                              ; preds = %274, %82
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #8
  %276 = load i32, ptr %13, align 4
  switch i32 %276, label %287 [
    i32 0, label %277
    i32 1, label %277
  ]

277:                                              ; preds = %275, %275
  ret void

278:                                              ; preds = %270, %254, %192
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  br label %279

279:                                              ; preds = %278, %188
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  br label %280

280:                                              ; preds = %279, %184
  call void @_ZN3JPH18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(100) %18) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr %18) #8
  br label %281

281:                                              ; preds = %280, %183
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #8
  br label %282

282:                                              ; preds = %281
  %283 = load ptr, ptr %11, align 8
  %284 = load i32, ptr %12, align 4
  %285 = insertvalue { ptr, i32 } poison, ptr %283, 0
  %286 = insertvalue { ptr, i32 } %285, i32 %284, 1
  resume { ptr, i32 } %286

287:                                              ; preds = %275
  unreachable
}

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH9Character14PostSimulationEfbEN11MyCollectorC2ENS_4Vec3ES2_(ptr noundef nonnull align 16 dereferenceable(100), double, double, double, double) unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4427sInverseRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, double, double) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144), double, double) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122)) #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH4Body11GetUserDataEv(ptr noundef nonnull align 16 dereferenceable(122)) #5 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !6, i64 16}
!14 = !{!"_ZTSN3JPH13CharacterBaseE", !15, i64 8, !6, i64 16, !19, i64 24, !20, i64 32, !21, i64 48, !10, i64 64, !23, i64 68, !24, i64 72, !25, i64 76, !20, i64 80, !20, i64 96, !20, i64 112, !26, i64 128, !27, i64 136}
!15 = !{!"_ZTSN3JPH9RefTargetINS_13CharacterBaseEEE", !16, i64 0}
!16 = !{!"_ZTSSt6atomicIjE", !17, i64 0}
!17 = !{!"_ZTSSt13__atomic_baseIjE", !18, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!20 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!21 = !{!"_ZTSN3JPH5PlaneE", !22, i64 0}
!22 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!23 = !{!"_ZTSN3JPH13CharacterBase12EGroundStateE", !7, i64 0}
!24 = !{!"_ZTSN3JPH6BodyIDE", !18, i64 0}
!25 = !{!"_ZTSN3JPH10SubShapeIDE", !18, i64 0}
!26 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !6, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{i64 0, i64 16, !31}
!31 = !{!7, !7, i64 0}
!32 = !{i64 0, i64 4, !33}
!33 = !{!18, !18, i64 0}
!34 = !{!14, !23, i64 68}
!35 = !{!36, !36, i64 0}
!36 = !{!"vtable pointer", !8, i64 0}
!37 = !{!14, !27, i64 136}


; 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::RefConst.1" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::BodyLockRead" = type { %"class.JPH::BodyLockBase" }
%"class.JPH::BodyLockBase" = type { ptr, ptr, ptr }
%class.MyCollector = type <{ %"class.JPH::CollisionCollector", %"class.JPH::BodyID", %"class.JPH::SubShapeID", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, [12 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }

@_ZN3JPH15PhysicsMaterial8sDefaultE = external global %"class.JPH::RefConst.1", align 8

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH9Character14CheckCollisionENS_4Vec3ENS_4QuatES1_fPKNS_5ShapeES1_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEb(ptr noundef nonnull align 16 dereferenceable(150), double, double, double, double, double, double, float noundef, ptr noundef, ptr noundef byval(%"class.JPH::Vec3") align 16, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) local_unnamed_addr #3 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH9Character14PostSimulationEfb(ptr noundef nonnull align 16 dereferenceable(150) %0, float noundef %1, i1 noundef zeroext %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::BodyLockRead", align 8
  %5 = alloca %class.MyCollector, align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::BodyLockRead", align 8
  %8 = alloca %"class.JPH::Mat44", align 16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #8
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load ptr, ptr %9, align 16, !tbaa !5
  %11 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPHL21sGetBodyLockInterfaceEPKNS_13PhysicsSystemEb(ptr noundef %10, i1 noundef zeroext %2)
  %12 = getelementptr inbounds i8, ptr %0, i64 144
  call void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %13 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  br i1 %13, label %14, label %24

14:                                               ; preds = %3
  %15 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %16 unwind label %61

16:                                               ; preds = %14
  %17 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %15)
          to label %18 unwind label %63

18:                                               ; preds = %16
  %19 = extractvalue { double, double } %17, 0
  %20 = extractvalue { double, double } %17, 1
  %21 = invoke { double, double } @_ZNK3JPH4Body11GetRotationEv(ptr noundef nonnull align 16 dereferenceable(122) %15)
          to label %22 unwind label %65

22:                                               ; preds = %18
  %23 = invoke { double, double } @_ZNK3JPH4Body17GetLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(122) %15)
          to label %25 unwind label %67

24:                                               ; preds = %3
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #8
  br label %120

25:                                               ; preds = %22
  %26 = extractvalue { double, double } %21, 1
  %27 = extractvalue { double, double } %21, 0
  %28 = extractvalue { double, double } %23, 0
  %29 = extractvalue { double, double } %23, 1
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %5) #8
  %30 = getelementptr inbounds i8, ptr %0, i64 32
  %.sroa.024.0.copyload = load double, ptr %30, 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 !24
  call void @_ZZN3JPH9Character14PostSimulationEfbEN11MyCollectorC2ENS_4Vec3ES2_(ptr noundef nonnull align 16 dereferenceable(100) %5, double %.sroa.024.0.copyload, double %.sroa.225.0.copyload, double %19, double %20)
  %31 = getelementptr inbounds i8, ptr %0, i64 24
  %32 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %31)
  store double %19, ptr %6, align 16
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  store double %20, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !24
  invoke void @_ZNK3JPH9Character14CheckCollisionENS_4Vec3ENS_4QuatES1_fPKNS_5ShapeES1_RNS_18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEEEb(ptr noundef nonnull align 16 dereferenceable(150) %0, double %19, double %20, double %27, double %26, double %28, double %29, float noundef %1, ptr noundef %32, ptr noundef nonnull byval(%"class.JPH::Vec3") align 16 %6, ptr noundef nonnull align 8 dereferenceable(24) %5, i1 noundef zeroext %2)
          to label %33 unwind label %70

33:                                               ; preds = %25
  %34 = getelementptr inbounds i8, ptr %5, i64 24
  %35 = getelementptr inbounds i8, ptr %0, i64 72
  %36 = getelementptr inbounds i8, ptr %0, i64 76
  %37 = load <2 x i32>, ptr %34, align 8, !tbaa !25
  store <2 x i32> %37, ptr %35, align 8, !tbaa !25
  %38 = getelementptr inbounds i8, ptr %5, i64 32
  %39 = getelementptr inbounds i8, ptr %0, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %39, ptr noundef nonnull align 16 dereferenceable(16) %38, i64 16, i1 false), !tbaa.struct !26
  %40 = getelementptr inbounds i8, ptr %5, i64 48
  %41 = getelementptr inbounds i8, ptr %0, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %41, ptr noundef nonnull align 16 dereferenceable(16) %40, i64 16, i1 false), !tbaa.struct !26
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  %42 = load ptr, ptr %9, align 16, !tbaa !5
  %43 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3JPHL21sGetBodyLockInterfaceEPKNS_13PhysicsSystemEb(ptr noundef %42, i1 noundef zeroext %2)
          to label %44 unwind label %72

44:                                               ; preds = %33
  invoke void @_ZN3JPH12BodyLockReadCI2NS_12BodyLockBaseILb0EKNS_4BodyEEEERKNS_17BodyLockInterfaceERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(16) %43, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %45 unwind label %72

45:                                               ; preds = %44
  %46 = call noundef zeroext i1 @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE9SucceededEv(ptr noundef nonnull align 8 dereferenceable(24) %7)
  br i1 %46, label %47, label %106

47:                                               ; preds = %45
  %48 = invoke noundef nonnull align 16 dereferenceable(122) ptr @_ZNK3JPH12BodyLockBaseILb0EKNS_4BodyEE7GetBodyEv(ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %49 unwind label %76

49:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #8
  invoke void @_ZN3JPH5Mat4427sInverseRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %8, double %27, double %26, double %19, double %20)
          to label %50 unwind label %78

50:                                               ; preds = %49
  %.sroa.06.0.copyload = load double, ptr %39, align 16
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.27.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !24
  %51 = invoke { double, double } @_ZNK3JPH5Mat44mlENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(64) %8, double %.sroa.06.0.copyload, double %.sroa.27.0.copyload)
          to label %52 unwind label %78

52:                                               ; preds = %50
  %53 = getelementptr inbounds i8, ptr %0, i64 48
  %54 = extractvalue { double, double } %51, 0
  %55 = extractvalue { double, double } %51, 1
  %56 = invoke noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16) %53, double %54, double %55)
          to label %57 unwind label %78

57:                                               ; preds = %52
  %58 = fcmp ogt float %56, 0.000000e+00
  br i1 %58, label %59, label %80

59:                                               ; preds = %57
  %60 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 2, ptr %60, align 4, !tbaa !27
  br label %85

61:                                               ; preds = %14
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %69

63:                                               ; preds = %16
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %69

65:                                               ; preds = %18
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %69

67:                                               ; preds = %22
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %69

69:                                               ; preds = %67, %65, %63, %61
  %.pn = phi { ptr, i32 } [ %68, %67 ], [ %66, %65 ], [ %64, %63 ], [ %62, %61 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #8
  br label %124

70:                                               ; preds = %25
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %123

72:                                               ; preds = %44, %33
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %122

74:                                               ; preds = %106
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %121

76:                                               ; preds = %47
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %121

78:                                               ; preds = %92, %87, %85, %52, %50, %49
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %105

80:                                               ; preds = %57
  %.sroa.04.0.copyload = load double, ptr %41, align 16
  %.sroa.25.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 104
  %.sroa.25.0.copyload = load double, ptr %.sroa.25.0..sroa_idx, align 8, !tbaa !24
  %81 = call noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %0, double %.sroa.04.0.copyload, double %.sroa.25.0.copyload)
  %82 = getelementptr inbounds i8, ptr %0, i64 68
  br i1 %81, label %83, label %84

83:                                               ; preds = %80
  store i32 1, ptr %82, align 4, !tbaa !27
  br label %85

84:                                               ; preds = %80
  store i32 0, ptr %82, align 4, !tbaa !27
  br label %85

85:                                               ; preds = %83, %84, %59
  %86 = invoke noundef ptr @_ZNK3JPH4Body8GetShapeEv(ptr noundef nonnull align 16 dereferenceable(122) %48)
          to label %87 unwind label %78

87:                                               ; preds = %85
  %88 = load ptr, ptr %86, align 8, !tbaa !28
  %89 = getelementptr inbounds i8, ptr %88, i64 80
  %90 = load ptr, ptr %89, align 8
  %91 = invoke noundef ptr %90(ptr noundef nonnull align 8 dereferenceable(26) %86, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %92 unwind label %78

92:                                               ; preds = %87
  %93 = getelementptr inbounds i8, ptr %0, i64 128
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_15PhysicsMaterialEEaSEPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef %91)
          to label %95 unwind label %78

95:                                               ; preds = %92
  %.sroa.01.0.copyload = load double, ptr %39, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.27.0..sroa_idx, align 8, !tbaa !24
  %96 = invoke { double, double } @_ZNK3JPH4Body16GetPointVelocityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(122) %48, double %.sroa.01.0.copyload, double %.sroa.2.0.copyload)
          to label %97 unwind label %103

97:                                               ; preds = %95
  %98 = extractvalue { double, double } %96, 0
  %99 = extractvalue { double, double } %96, 1
  %100 = getelementptr inbounds i8, ptr %0, i64 112
  store double %98, ptr %100, align 16
  %.sroa.53.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 120
  store double %99, ptr %.sroa.53.0..sroa_idx, align 8, !tbaa !24
  %101 = call noundef i64 @_ZNK3JPH4Body11GetUserDataEv(ptr noundef nonnull align 16 dereferenceable(122) %48)
  %102 = getelementptr inbounds i8, ptr %0, i64 136
  store i64 %101, ptr %102, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #8
  br label %119

103:                                              ; preds = %95
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %105

105:                                              ; preds = %103, %78
  %.pn55 = phi { ptr, i32 } [ %104, %103 ], [ %79, %78 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #8
  br label %121

106:                                              ; preds = %45
  %107 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 3, ptr %107, align 4, !tbaa !27
  %108 = getelementptr inbounds i8, ptr %0, i64 128
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH8RefConstINS_15PhysicsMaterialEEaSERKS2_(ptr noundef nonnull align 8 dereferenceable(8) %108, ptr noundef nonnull align 8 dereferenceable(8) @_ZN3JPH15PhysicsMaterial8sDefaultE)
          to label %110 unwind label %74

110:                                              ; preds = %106
  %111 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %112 unwind label %117

112:                                              ; preds = %110
  %113 = extractvalue { double, double } %111, 0
  %114 = extractvalue { double, double } %111, 1
  %115 = getelementptr inbounds i8, ptr %0, i64 112
  store double %113, ptr %115, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 120
  store double %114, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !24
  %116 = getelementptr inbounds i8, ptr %0, i64 136
  store i64 0, ptr %116, align 8, !tbaa !30
  br label %119

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

119:                                              ; preds = %112, %97
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  call void @_ZN3JPH18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(100) %5) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %5) #8
  br label %120

120:                                              ; preds = %24, %119
  ret void

121:                                              ; preds = %76, %105, %117, %74
  %.pn55.pn.pn = phi { ptr, i32 } [ %118, %117 ], [ %75, %74 ], [ %.pn55, %105 ], [ %77, %76 ]
  call void @_ZN3JPH12BodyLockBaseILb0EKNS_4BodyEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  br label %122

122:                                              ; preds = %121, %72
  %.pn55.pn.pn.pn = phi { ptr, i32 } [ %.pn55.pn.pn, %121 ], [ %73, %72 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  br label %123

123:                                              ; preds = %122, %70
  %.pn55.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn55.pn.pn.pn, %122 ], [ %71, %70 ]
  call void @_ZN3JPH18CollisionCollectorINS_18CollideShapeResultENS_36CollisionCollectorTraitsCollideShapeEED2Ev(ptr noundef nonnull align 16 dereferenceable(100) %5) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %5) #8
  br label %124

124:                                              ; preds = %123, %69
  %.pn55.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn55.pn.pn.pn.pn, %123 ], [ %.pn, %69 ]
  resume { ptr, i32 } %.pn55.pn.pn.pn.pn.pn
}

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN3JPH9Character14PostSimulationEfbEN11MyCollectorC2ENS_4Vec3ES2_(ptr noundef nonnull align 16 dereferenceable(100), double, double, double, double) unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4427sInverseRotationTranslationENS_4QuatENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double, double, double) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Plane14SignedDistanceENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144), double, double) local_unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK3JPH4Body11GetUserDataEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #5 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 16}
!6 = !{!"_ZTSN3JPH13CharacterBaseE", !7, i64 8, !13, i64 16, !14, i64 24, !15, i64 32, !16, i64 48, !18, i64 64, !19, i64 68, !20, i64 72, !21, i64 76, !15, i64 80, !15, i64 96, !15, i64 112, !22, i64 128, !23, i64 136}
!7 = !{!"_ZTSN3JPH9RefTargetINS_13CharacterBaseEEE", !8, i64 0}
!8 = !{!"_ZTSSt6atomicIjE", !9, i64 0}
!9 = !{!"_ZTSSt13__atomic_baseIjE", !10, i64 0}
!10 = !{!"int", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C++ TBAA"}
!13 = !{!"any pointer", !11, i64 0}
!14 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !13, i64 0}
!15 = !{!"_ZTSN3JPH4Vec3E", !11, i64 0}
!16 = !{!"_ZTSN3JPH5PlaneE", !17, i64 0}
!17 = !{!"_ZTSN3JPH4Vec4E", !11, i64 0}
!18 = !{!"float", !11, i64 0}
!19 = !{!"_ZTSN3JPH13CharacterBase12EGroundStateE", !11, i64 0}
!20 = !{!"_ZTSN3JPH6BodyIDE", !10, i64 0}
!21 = !{!"_ZTSN3JPH10SubShapeIDE", !10, i64 0}
!22 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !13, i64 0}
!23 = !{!"long", !11, i64 0}
!24 = !{!11, !11, i64 0}
!25 = !{!10, !10, i64 0}
!26 = !{i64 0, i64 16, !24}
!27 = !{!6, !19, i64 68}
!28 = !{!29, !29, i64 0}
!29 = !{!"vtable pointer", !12, i64 0}
!30 = !{!6, !23, i64 136}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass