; 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::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Array.28" = type { %"class.JPH::STLTempAllocator.29", i64, i64, ptr }
%"class.JPH::STLTempAllocator.29" = type { ptr }
%"class.JPH::Array.40" = type { %"class.JPH::STLTempAllocator.41", i64, i64, ptr }
%"class.JPH::STLTempAllocator.41" = type { ptr }
%"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::RefConst" = type { ptr }
%"class.JPH::Plane" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::RefConst.1" = type { ptr }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"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: 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: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16)) #3 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(115), ptr noundef nonnull align 8 dereferenceable(32), 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)) #5 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332), ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef, ptr noundef, 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), ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16CharacterVirtual13MoveToContactENS_4Vec3ERKNS0_7ContactERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332), double, double, ptr noundef nonnull align 16 dereferenceable(115), 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), ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3JPH16CharacterVirtual10WalkStairsEfNS_4Vec3ES1_S1_S1_RKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %0, float noundef %1, double %2, double %3, double %4, double %5, double %6, double %7, ptr noundef byval(%"class.JPH::Vec3") align 16 %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #5 align 2 personality ptr @__gxx_personality_v0 {
  %15 = alloca i1, align 1
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca ptr, align 8
  %20 = alloca float, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  %28 = alloca %"class.JPH::Array.28", align 8
  %29 = alloca %"class.JPH::STLTempAllocator.29", align 8
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"class.JPH::Vec3", align 16
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"class.JPH::Vec3", 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 %"class.JPH::Vec3", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::Vec3", align 16
  %42 = alloca %"class.JPH::Array.40", align 8
  %43 = alloca %"class.JPH::STLTempAllocator.41", align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"class.JPH::Vec3", align 16
  %49 = alloca %"class.JPH::Vec3", align 16
  %50 = alloca %"class.JPH::Vec3", align 16
  %51 = alloca %"class.JPH::Vec3", align 16
  %52 = alloca %"class.JPH::Vec3", align 16
  %53 = alloca %"class.JPH::Vec3", align 16
  %54 = alloca %"class.JPH::Vec3", align 16
  %55 = alloca float, align 4
  %56 = alloca i8, align 1
  %57 = alloca float, align 4
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca %"class.JPH::Vec3", align 16
  %63 = alloca %"class.JPH::Vec3", align 16
  %64 = alloca %"class.JPH::Vec3", align 16
  %65 = alloca %"class.JPH::Vec3", align 16
  %66 = alloca %"class.JPH::Vec3", align 16
  %67 = alloca %"class.JPH::Vec3", align 16
  %68 = alloca %"class.JPH::Vec3", align 16
  %69 = alloca %"class.JPH::Vec3", align 16
  %70 = alloca %"class.JPH::Vec3", align 16
  %71 = alloca float, align 4
  %72 = alloca %"class.JPH::Vec3", align 16
  %73 = alloca %"class.JPH::Vec3", align 16
  %74 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  %75 = alloca %"class.JPH::Vec3", align 16
  %76 = alloca %"class.JPH::Vec3", align 16
  %77 = alloca %"class.JPH::Vec3", align 16
  %78 = alloca %"class.JPH::Vec3", align 16
  %79 = alloca %"class.JPH::Vec3", align 16
  %80 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  store double %2, ptr %80, align 16
  %81 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  store double %3, ptr %81, align 8
  %82 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  store double %4, ptr %82, align 16
  %83 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  store double %5, ptr %83, align 8
  %84 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  store double %6, ptr %84, align 16
  %85 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  store double %7, ptr %85, align 8
  store ptr %0, ptr %19, align 8, !tbaa !5
  store float %1, ptr %20, align 4, !tbaa !9
  store ptr %9, ptr %21, align 8, !tbaa !5
  store ptr %10, ptr %22, align 8, !tbaa !5
  store ptr %11, ptr %23, align 8, !tbaa !5
  store ptr %12, ptr %24, align 8, !tbaa !5
  store ptr %13, ptr %25, align 8, !tbaa !5
  %86 = load ptr, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %26, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 128, ptr %27) #9
  call void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %27)
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %87 = load ptr, ptr %25, align 8, !tbaa !5
  call void @_ZN3JPH16STLTempAllocatorINS_16CharacterVirtual14IgnoredContactEEC2ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %87)
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(8) %29)
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  %88 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %86, i32 0, i32 20
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %30, ptr align 16 %88, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %31, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !11
  %89 = load ptr, ptr %21, align 8, !tbaa !5
  %90 = load ptr, ptr %22, align 8, !tbaa !5
  %91 = load ptr, ptr %23, align 8, !tbaa !5
  %92 = load ptr, ptr %24, align 8, !tbaa !5
  %93 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %94 = load double, ptr %93, align 16
  %95 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %96 = load double, ptr %95, align 8
  %97 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %98 = load double, ptr %97, align 16
  %99 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %100 = load double, ptr %99, align 8
  %101 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %86, double %94, double %96, double %98, double %100, ptr noundef nonnull align 16 dereferenceable(115) %27, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 8 dereferenceable(12) %92)
          to label %102 unwind label %108

102:                                              ; preds = %14
  br i1 %101, label %103, label %117

103:                                              ; preds = %102
  %104 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %27, i32 0, i32 5
  %105 = load float, ptr %104, align 4, !tbaa !13
  %106 = fcmp olt float %105, 0x3EB0C6F7A0000000
  br i1 %106, label %107, label %112

107:                                              ; preds = %103
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %551

108:                                              ; preds = %112, %14
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %32, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %33, align 4
  br label %553

112:                                              ; preds = %103
  %113 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %27, i32 0, i32 5
  %114 = load float, ptr %113, align 4, !tbaa !13
  %115 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef %114)
          to label %116 unwind label %108

116:                                              ; preds = %112
  br label %117

117:                                              ; preds = %116, %102
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #9
  %118 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %86, i32 0, i32 20
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %36, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !11
  %119 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %120 = load double, ptr %119, align 16
  %121 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %122 = load double, ptr %121, align 8
  %123 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %118, double %120, double %122)
          to label %124 unwind label %191

124:                                              ; preds = %117
  %125 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %126 = getelementptr inbounds %union.anon, ptr %125, i32 0, i32 0
  %127 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 0
  %128 = extractvalue { double, double } %123, 0
  store double %128, ptr %127, align 16
  %129 = getelementptr inbounds { double, double }, ptr %126, i32 0, i32 1
  %130 = extractvalue { double, double } %123, 1
  store double %130, ptr %129, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #9
  %131 = load float, ptr %20, align 4, !tbaa !9
  %132 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef %131)
          to label %133 unwind label %195

133:                                              ; preds = %124
  %134 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %135 = getelementptr inbounds %union.anon, ptr %134, i32 0, i32 0
  %136 = getelementptr inbounds { double, double }, ptr %135, i32 0, i32 0
  %137 = extractvalue { double, double } %132, 0
  store double %137, ptr %136, align 16
  %138 = getelementptr inbounds { double, double }, ptr %135, i32 0, i32 1
  %139 = extractvalue { double, double } %132, 1
  store double %139, ptr %138, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #9
  %140 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %86, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %40, ptr align 16 %140, i64 16, i1 false), !tbaa.struct !11
  %141 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %142 = load double, ptr %141, align 16
  %143 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %144 = load double, ptr %143, align 8
  %145 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %37, double %142, double %144)
          to label %146 unwind label %199

146:                                              ; preds = %133
  %147 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %86, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %41, ptr align 16 %147, i64 16, i1 false), !tbaa.struct !11
  %148 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %149 = load double, ptr %148, align 16
  %150 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %151 = load double, ptr %150, align 8
  %152 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %145, double %149, double %151)
          to label %153 unwind label %199

153:                                              ; preds = %146
  %154 = getelementptr inbounds %"class.JPH::Vec3", ptr %39, i32 0, i32 0
  %155 = getelementptr inbounds %union.anon, ptr %154, i32 0, i32 0
  %156 = getelementptr inbounds { double, double }, ptr %155, i32 0, i32 0
  %157 = extractvalue { double, double } %152, 0
  store double %157, ptr %156, align 16
  %158 = getelementptr inbounds { double, double }, ptr %155, i32 0, i32 1
  %159 = extractvalue { double, double } %152, 1
  store double %159, ptr %158, align 8
  %160 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %161 = load double, ptr %160, align 16
  %162 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %163 = load double, ptr %162, align 8
  %164 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %37, double %161, double %163)
          to label %165 unwind label %199

165:                                              ; preds = %153
  %166 = getelementptr inbounds %"class.JPH::Vec3", ptr %38, i32 0, i32 0
  %167 = getelementptr inbounds %union.anon, ptr %166, i32 0, i32 0
  %168 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 0
  %169 = extractvalue { double, double } %164, 0
  store double %169, ptr %168, align 16
  %170 = getelementptr inbounds { double, double }, ptr %167, i32 0, i32 1
  %171 = extractvalue { double, double } %164, 1
  store double %171, ptr %170, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %172 = load ptr, ptr %25, align 8, !tbaa !5
  invoke void @_ZN3JPH16STLTempAllocatorINS_4Vec3EEC2ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %172)
          to label %173 unwind label %203

173:                                              ; preds = %165
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %174 unwind label %203

174:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  %175 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %86, i32 0, i32 23
  %176 = invoke noundef i64 @_ZNK3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %175)
          to label %177 unwind label %207

177:                                              ; preds = %174
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(32) %42, i64 noundef %176)
          to label %178 unwind label %207

178:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %179 = getelementptr inbounds %"class.JPH::CharacterVirtual", ptr %86, i32 0, i32 23
  store ptr %179, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %180 = load ptr, ptr %44, align 8, !tbaa !5
  %181 = invoke noundef ptr @_ZN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %180)
          to label %182 unwind label %211

182:                                              ; preds = %178
  store ptr %181, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %183 = load ptr, ptr %44, align 8, !tbaa !5
  %184 = invoke noundef ptr @_ZN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %183)
          to label %185 unwind label %215

185:                                              ; preds = %182
  store ptr %184, ptr %46, align 8, !tbaa !5
  br label %186

186:                                              ; preds = %267, %185
  %187 = load ptr, ptr %45, align 8, !tbaa !5
  %188 = load ptr, ptr %46, align 8, !tbaa !5
  %189 = icmp ne ptr %187, %188
  br i1 %189, label %219, label %190

190:                                              ; preds = %186
  store i32 2, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %272

191:                                              ; preds = %117
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %32, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %33, align 4
  br label %550

195:                                              ; preds = %124
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %32, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %33, align 4
  br label %549

199:                                              ; preds = %153, %146, %133
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %32, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %33, align 4
  br label %548

203:                                              ; preds = %173, %165
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %32, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  br label %547

207:                                              ; preds = %272, %177, %174
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %32, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %33, align 4
  br label %546

211:                                              ; preds = %178
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %32, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %33, align 4
  br label %271

215:                                              ; preds = %182
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %32, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %33, align 4
  br label %270

219:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %220 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %220, ptr %47, align 8, !tbaa !5
  %221 = load ptr, ptr %47, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %221, i32 0, i32 15
  %223 = load i8, ptr %222, align 16, !tbaa !22, !range !23, !noundef !24
  %224 = trunc i8 %223 to i1
  br i1 %224, label %225, label %266

225:                                              ; preds = %219
  %226 = load ptr, ptr %47, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %226, i32 0, i32 3
  %228 = load ptr, ptr %47, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %228, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %49, ptr align 16 %229, i64 16, i1 false), !tbaa.struct !11
  %230 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %231 = load double, ptr %230, align 16
  %232 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %233 = load double, ptr %232, align 8
  %234 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %38, double %231, double %233)
          to label %235 unwind label %262

235:                                              ; preds = %225
  %236 = getelementptr inbounds %"class.JPH::Vec3", ptr %48, i32 0, i32 0
  %237 = getelementptr inbounds %union.anon, ptr %236, i32 0, i32 0
  %238 = getelementptr inbounds { double, double }, ptr %237, i32 0, i32 0
  %239 = extractvalue { double, double } %234, 0
  store double %239, ptr %238, align 16
  %240 = getelementptr inbounds { double, double }, ptr %237, i32 0, i32 1
  %241 = extractvalue { double, double } %234, 1
  store double %241, ptr %240, align 8
  %242 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %243 = load double, ptr %242, align 16
  %244 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %245 = load double, ptr %244, align 8
  %246 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %227, double %243, double %245)
          to label %247 unwind label %262

247:                                              ; preds = %235
  %248 = fcmp olt float %246, 0.000000e+00
  br i1 %248, label %249, label %266

249:                                              ; preds = %247
  %250 = load ptr, ptr %47, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %250, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 %251, i64 16, i1 false), !tbaa.struct !11
  %252 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 0
  %253 = load double, ptr %252, align 16
  %254 = getelementptr inbounds { double, double }, ptr %50, i32 0, i32 1
  %255 = load double, ptr %254, align 8
  %256 = invoke noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %86, double %253, double %255)
          to label %257 unwind label %262

257:                                              ; preds = %249
  br i1 %256, label %258, label %266

258:                                              ; preds = %257
  %259 = load ptr, ptr %47, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %259, i32 0, i32 3
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 16 dereferenceable(16) %260)
          to label %261 unwind label %262

261:                                              ; preds = %258
  br label %266

262:                                              ; preds = %258, %249, %235, %225
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %32, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %270

266:                                              ; preds = %261, %257, %247, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %267

267:                                              ; preds = %266
  %268 = load ptr, ptr %45, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %268, i32 1
  store ptr %269, ptr %45, align 8, !tbaa !5
  br label %186

270:                                              ; preds = %262, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %271

271:                                              ; preds = %270, %211
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  br label %546

272:                                              ; preds = %190
  %273 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %274 unwind label %207

274:                                              ; preds = %272
  br i1 %273, label %275, label %276

275:                                              ; preds = %274
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %545

276:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %52, ptr align 16 %37, i64 16, i1 false), !tbaa.struct !11
  %277 = load float, ptr %20, align 4, !tbaa !9
  %278 = load ptr, ptr %21, align 8, !tbaa !5
  %279 = load ptr, ptr %22, align 8, !tbaa !5
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  %281 = load ptr, ptr %24, align 8, !tbaa !5
  %282 = load ptr, ptr %25, align 8, !tbaa !5
  %283 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 0
  %284 = load double, ptr %283, align 16
  %285 = getelementptr inbounds { double, double }, ptr %52, i32 0, i32 1
  %286 = load double, ptr %285, align 8
  invoke void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %86, ptr noundef nonnull align 16 dereferenceable(16) %51, double %284, double %286, float noundef %277, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(8) %278, ptr noundef nonnull align 8 dereferenceable(8) %279, ptr noundef nonnull align 8 dereferenceable(8) %280, ptr noundef nonnull align 8 dereferenceable(12) %281, ptr noundef nonnull align 8 dereferenceable(8) %282)
          to label %287 unwind label %305

287:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !11
  %288 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 0
  %289 = load double, ptr %288, align 16
  %290 = getelementptr inbounds { double, double }, ptr %54, i32 0, i32 1
  %291 = load double, ptr %290, align 8
  %292 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %51, double %289, double %291)
          to label %293 unwind label %309

293:                                              ; preds = %287
  %294 = getelementptr inbounds %"class.JPH::Vec3", ptr %53, i32 0, i32 0
  %295 = getelementptr inbounds %union.anon, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 0
  %297 = extractvalue { double, double } %292, 0
  store double %297, ptr %296, align 16
  %298 = getelementptr inbounds { double, double }, ptr %295, i32 0, i32 1
  %299 = extractvalue { double, double } %292, 1
  store double %299, ptr %298, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %300 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %53)
          to label %301 unwind label %313

301:                                              ; preds = %293
  store float %300, ptr %55, align 4, !tbaa !9
  %302 = load float, ptr %55, align 4, !tbaa !9
  %303 = fcmp olt float %302, 0x3E45798EE0000000
  br i1 %303, label %304, label %317

304:                                              ; preds = %301
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %541

305:                                              ; preds = %276
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %32, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %33, align 4
  br label %544

309:                                              ; preds = %287
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %32, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %33, align 4
  br label %543

313:                                              ; preds = %293
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %32, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %33, align 4
  br label %542

317:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #9
  store i8 0, ptr %56, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %318 = invoke noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %17)
          to label %319 unwind label %332

319:                                              ; preds = %317
  %320 = fmul float 0xBFA99999A0000000, %318
  store float %320, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  store ptr %42, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %321 = load ptr, ptr %58, align 8, !tbaa !5
  %322 = invoke noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %321)
          to label %323 unwind label %336

323:                                              ; preds = %319
  store ptr %322, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %324 = load ptr, ptr %58, align 8, !tbaa !5
  %325 = invoke noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %324)
          to label %326 unwind label %340

326:                                              ; preds = %323
  store ptr %325, ptr %60, align 8, !tbaa !5
  br label %327

327:                                              ; preds = %364, %326
  %328 = load ptr, ptr %59, align 8, !tbaa !5
  %329 = load ptr, ptr %60, align 8, !tbaa !5
  %330 = icmp ne ptr %328, %329
  br i1 %330, label %344, label %331

331:                                              ; preds = %327
  store i32 4, ptr %34, align 4
  br label %367

332:                                              ; preds = %317
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %32, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %33, align 4
  br label %540

336:                                              ; preds = %319
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %32, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %33, align 4
  br label %369

340:                                              ; preds = %323
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %32, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %33, align 4
  br label %368

344:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %345 = load ptr, ptr %59, align 8, !tbaa !5
  store ptr %345, ptr %61, align 8, !tbaa !5
  %346 = load ptr, ptr %61, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %62, ptr align 16 %53, i64 16, i1 false), !tbaa.struct !11
  %347 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 0
  %348 = load double, ptr %347, align 16
  %349 = getelementptr inbounds { double, double }, ptr %62, i32 0, i32 1
  %350 = load double, ptr %349, align 8
  %351 = invoke noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %346, double %348, double %350)
          to label %352 unwind label %356

352:                                              ; preds = %344
  %353 = load float, ptr %57, align 4, !tbaa !9
  %354 = fcmp olt float %351, %353
  br i1 %354, label %355, label %360

355:                                              ; preds = %352
  store i8 1, ptr %56, align 1, !tbaa !25
  store i32 4, ptr %34, align 4
  br label %361

356:                                              ; preds = %344
  %357 = landingpad { ptr, i32 }
          cleanup
  %358 = extractvalue { ptr, i32 } %357, 0
  store ptr %358, ptr %32, align 8
  %359 = extractvalue { ptr, i32 } %357, 1
  store i32 %359, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %368

360:                                              ; preds = %352
  store i32 0, ptr %34, align 4
  br label %361

361:                                              ; preds = %360, %355
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  %362 = load i32, ptr %34, align 4
  switch i32 %362, label %367 [
    i32 0, label %363
  ]

363:                                              ; preds = %361
  br label %364

364:                                              ; preds = %363
  %365 = load ptr, ptr %59, align 8, !tbaa !5
  %366 = getelementptr inbounds %"class.JPH::Vec3", ptr %365, i32 1
  store ptr %366, ptr %59, align 8, !tbaa !5
  br label %327

367:                                              ; preds = %361, %331
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  br label %370

368:                                              ; preds = %356, %340
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  br label %369

369:                                              ; preds = %368, %336
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  br label %540

370:                                              ; preds = %367
  %371 = load i8, ptr %56, align 1, !tbaa !25, !range !23, !noundef !24
  %372 = trunc i8 %371 to i1
  br i1 %372, label %374, label %373

373:                                              ; preds = %370
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %539

374:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #9
  %375 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %26)
          to label %376 unwind label %410

376:                                              ; preds = %374
  %377 = getelementptr inbounds %"class.JPH::Vec3", ptr %64, i32 0, i32 0
  %378 = getelementptr inbounds %union.anon, ptr %377, i32 0, i32 0
  %379 = getelementptr inbounds { double, double }, ptr %378, i32 0, i32 0
  %380 = extractvalue { double, double } %375, 0
  store double %380, ptr %379, align 16
  %381 = getelementptr inbounds { double, double }, ptr %378, i32 0, i32 1
  %382 = extractvalue { double, double } %375, 1
  store double %382, ptr %381, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 16 %8, i64 16, i1 false), !tbaa.struct !11
  %383 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %384 = load double, ptr %383, align 16
  %385 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %386 = load double, ptr %385, align 8
  %387 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %64, double %384, double %386)
          to label %388 unwind label %410

388:                                              ; preds = %376
  %389 = getelementptr inbounds %"class.JPH::Vec3", ptr %63, i32 0, i32 0
  %390 = getelementptr inbounds %union.anon, ptr %389, i32 0, i32 0
  %391 = getelementptr inbounds { double, double }, ptr %390, i32 0, i32 0
  %392 = extractvalue { double, double } %387, 0
  store double %392, ptr %391, align 16
  %393 = getelementptr inbounds { double, double }, ptr %390, i32 0, i32 1
  %394 = extractvalue { double, double } %387, 1
  store double %394, ptr %393, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %66, ptr align 16 %51, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %67, ptr align 16 %63, i64 16, i1 false), !tbaa.struct !11
  %395 = load ptr, ptr %21, align 8, !tbaa !5
  %396 = load ptr, ptr %22, align 8, !tbaa !5
  %397 = load ptr, ptr %23, align 8, !tbaa !5
  %398 = load ptr, ptr %24, align 8, !tbaa !5
  %399 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %400 = load double, ptr %399, align 16
  %401 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %402 = load double, ptr %401, align 8
  %403 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 0
  %404 = load double, ptr %403, align 16
  %405 = getelementptr inbounds { double, double }, ptr %67, i32 0, i32 1
  %406 = load double, ptr %405, align 8
  %407 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %86, double %400, double %402, double %404, double %406, ptr noundef nonnull align 16 dereferenceable(115) %27, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(8) %395, ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef nonnull align 8 dereferenceable(8) %397, ptr noundef nonnull align 8 dereferenceable(12) %398)
          to label %408 unwind label %414

408:                                              ; preds = %388
  br i1 %407, label %418, label %409

409:                                              ; preds = %408
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %537

410:                                              ; preds = %376, %374
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %32, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #9
  br label %538

414:                                              ; preds = %525, %519, %515, %426, %418, %388
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %32, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %33, align 4
  br label %538

418:                                              ; preds = %408
  %419 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %27, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %68, ptr align 16 %419, i64 16, i1 false), !tbaa.struct !11
  %420 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 0
  %421 = load double, ptr %420, align 16
  %422 = getelementptr inbounds { double, double }, ptr %68, i32 0, i32 1
  %423 = load double, ptr %422, align 8
  %424 = invoke noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %86, double %421, double %423)
          to label %425 unwind label %414

425:                                              ; preds = %418
  br i1 %424, label %426, label %515

426:                                              ; preds = %425
  %427 = invoke noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef 0x3D71979980000000)
          to label %428 unwind label %414

428:                                              ; preds = %426
  br i1 %427, label %429, label %430

429:                                              ; preds = %428
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %537

430:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %69, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !11
  %431 = load float, ptr %20, align 4, !tbaa !9
  %432 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef %431)
          to label %433 unwind label %470

433:                                              ; preds = %430
  %434 = getelementptr inbounds %"class.JPH::Vec3", ptr %70, i32 0, i32 0
  %435 = getelementptr inbounds %union.anon, ptr %434, i32 0, i32 0
  %436 = getelementptr inbounds { double, double }, ptr %435, i32 0, i32 0
  %437 = extractvalue { double, double } %432, 0
  store double %437, ptr %436, align 16
  %438 = getelementptr inbounds { double, double }, ptr %435, i32 0, i32 1
  %439 = extractvalue { double, double } %432, 1
  store double %439, ptr %438, align 8
  %440 = load float, ptr %20, align 4, !tbaa !9
  %441 = load ptr, ptr %21, align 8, !tbaa !5
  %442 = load ptr, ptr %22, align 8, !tbaa !5
  %443 = load ptr, ptr %23, align 8, !tbaa !5
  %444 = load ptr, ptr %24, align 8, !tbaa !5
  %445 = load ptr, ptr %25, align 8, !tbaa !5
  %446 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 0
  %447 = load double, ptr %446, align 16
  %448 = getelementptr inbounds { double, double }, ptr %70, i32 0, i32 1
  %449 = load double, ptr %448, align 8
  invoke void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %86, ptr noundef nonnull align 16 dereferenceable(16) %69, double %447, double %449, float noundef %440, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(8) %441, ptr noundef nonnull align 8 dereferenceable(8) %442, ptr noundef nonnull align 8 dereferenceable(8) %443, ptr noundef nonnull align 8 dereferenceable(12) %444, ptr noundef nonnull align 8 dereferenceable(8) %445)
          to label %450 unwind label %470

450:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %72) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %73, ptr align 16 %35, i64 16, i1 false), !tbaa.struct !11
  %451 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %452 = load double, ptr %451, align 16
  %453 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %454 = load double, ptr %453, align 8
  %455 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %69, double %452, double %454)
          to label %456 unwind label %474

456:                                              ; preds = %450
  %457 = getelementptr inbounds %"class.JPH::Vec3", ptr %72, i32 0, i32 0
  %458 = getelementptr inbounds %union.anon, ptr %457, i32 0, i32 0
  %459 = getelementptr inbounds { double, double }, ptr %458, i32 0, i32 0
  %460 = extractvalue { double, double } %455, 0
  store double %460, ptr %459, align 16
  %461 = getelementptr inbounds { double, double }, ptr %458, i32 0, i32 1
  %462 = extractvalue { double, double } %455, 1
  store double %462, ptr %461, align 8
  %463 = invoke noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %72)
          to label %464 unwind label %474

464:                                              ; preds = %456
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  store float %463, ptr %71, align 4, !tbaa !9
  %465 = load float, ptr %71, align 4, !tbaa !9
  %466 = load float, ptr %55, align 4, !tbaa !9
  %467 = fadd float %466, 0x3E45798EE0000000
  %468 = fcmp ole float %465, %467
  br i1 %468, label %469, label %478

469:                                              ; preds = %464
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %510

470:                                              ; preds = %433, %430
  %471 = landingpad { ptr, i32 }
          cleanup
  %472 = extractvalue { ptr, i32 } %471, 0
  store ptr %472, ptr %32, align 8
  %473 = extractvalue { ptr, i32 } %471, 1
  store i32 %473, ptr %33, align 4
  br label %514

474:                                              ; preds = %456, %450
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %32, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %72) #9
  br label %513

478:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 128, ptr %74) #9
  invoke void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %74)
          to label %479 unwind label %495

479:                                              ; preds = %478
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %75, ptr align 16 %69, i64 16, i1 false), !tbaa.struct !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %76, ptr align 16 %63, i64 16, i1 false), !tbaa.struct !11
  %480 = load ptr, ptr %21, align 8, !tbaa !5
  %481 = load ptr, ptr %22, align 8, !tbaa !5
  %482 = load ptr, ptr %23, align 8, !tbaa !5
  %483 = load ptr, ptr %24, align 8, !tbaa !5
  %484 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 0
  %485 = load double, ptr %484, align 16
  %486 = getelementptr inbounds { double, double }, ptr %75, i32 0, i32 1
  %487 = load double, ptr %486, align 8
  %488 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 0
  %489 = load double, ptr %488, align 16
  %490 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 1
  %491 = load double, ptr %490, align 8
  %492 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %86, double %485, double %487, double %489, double %491, ptr noundef nonnull align 16 dereferenceable(115) %74, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(8) %480, ptr noundef nonnull align 8 dereferenceable(8) %481, ptr noundef nonnull align 8 dereferenceable(8) %482, ptr noundef nonnull align 8 dereferenceable(12) %483)
          to label %493 unwind label %495

493:                                              ; preds = %479
  br i1 %492, label %499, label %494

494:                                              ; preds = %493
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %509

495:                                              ; preds = %499, %479, %478
  %496 = landingpad { ptr, i32 }
          cleanup
  %497 = extractvalue { ptr, i32 } %496, 0
  store ptr %497, ptr %32, align 8
  %498 = extractvalue { ptr, i32 } %496, 1
  store i32 %498, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 128, ptr %74) #9
  br label %513

499:                                              ; preds = %493
  %500 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %74, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %77, ptr align 16 %500, i64 16, i1 false), !tbaa.struct !11
  %501 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 0
  %502 = load double, ptr %501, align 16
  %503 = getelementptr inbounds { double, double }, ptr %77, i32 0, i32 1
  %504 = load double, ptr %503, align 8
  %505 = invoke noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %86, double %502, double %504)
          to label %506 unwind label %495

506:                                              ; preds = %499
  br i1 %505, label %507, label %508

507:                                              ; preds = %506
  store i1 false, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %509

508:                                              ; preds = %506
  store i32 0, ptr %34, align 4
  br label %509

509:                                              ; preds = %508, %507, %494
  call void @llvm.lifetime.end.p0(i64 128, ptr %74) #9
  br label %510

510:                                              ; preds = %509, %469
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #9
  %511 = load i32, ptr %34, align 4
  switch i32 %511, label %537 [
    i32 0, label %512
  ]

512:                                              ; preds = %510
  br label %515

513:                                              ; preds = %495, %474
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  br label %514

514:                                              ; preds = %513, %470
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #9
  br label %538

515:                                              ; preds = %512, %425
  %516 = getelementptr inbounds %"struct.JPH::CharacterVirtual::Contact", ptr %27, i32 0, i32 5
  %517 = load float, ptr %516, align 4, !tbaa !13
  %518 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %63, float noundef %517)
          to label %519 unwind label %414

519:                                              ; preds = %515
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %78, ptr align 16 %63, i64 16, i1 false), !tbaa.struct !11
  %520 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 0
  %521 = load double, ptr %520, align 16
  %522 = getelementptr inbounds { double, double }, ptr %78, i32 0, i32 1
  %523 = load double, ptr %522, align 8
  %524 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %51, double %521, double %523)
          to label %525 unwind label %414

525:                                              ; preds = %519
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %79, ptr align 16 %51, i64 16, i1 false), !tbaa.struct !11
  %526 = load ptr, ptr %21, align 8, !tbaa !5
  %527 = load ptr, ptr %22, align 8, !tbaa !5
  %528 = load ptr, ptr %23, align 8, !tbaa !5
  %529 = load ptr, ptr %24, align 8, !tbaa !5
  %530 = load ptr, ptr %25, align 8, !tbaa !5
  %531 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 0
  %532 = load double, ptr %531, align 16
  %533 = getelementptr inbounds { double, double }, ptr %79, i32 0, i32 1
  %534 = load double, ptr %533, align 8
  invoke void @_ZN3JPH16CharacterVirtual13MoveToContactENS_4Vec3ERKNS0_7ContactERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %86, double %532, double %534, ptr noundef nonnull align 16 dereferenceable(115) %27, ptr noundef nonnull align 8 dereferenceable(8) %526, ptr noundef nonnull align 8 dereferenceable(8) %527, ptr noundef nonnull align 8 dereferenceable(8) %528, ptr noundef nonnull align 8 dereferenceable(12) %529, ptr noundef nonnull align 8 dereferenceable(8) %530)
          to label %535 unwind label %414

535:                                              ; preds = %525
  %536 = getelementptr inbounds %"class.JPH::CharacterBase", ptr %86, i32 0, i32 7
  store i32 0, ptr %536, align 4, !tbaa !26
  store i1 true, ptr %15, align 1
  store i32 1, ptr %34, align 4
  br label %537

537:                                              ; preds = %535, %510, %429, %409
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  br label %539

538:                                              ; preds = %514, %414, %410
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #9
  br label %540

539:                                              ; preds = %537, %373
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  br label %541

540:                                              ; preds = %538, %369, %332
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #9
  br label %542

541:                                              ; preds = %539, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #9
  br label %545

542:                                              ; preds = %540, %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  br label %543

543:                                              ; preds = %542, %309
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #9
  br label %544

544:                                              ; preds = %543, %305
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #9
  br label %546

545:                                              ; preds = %541, %275
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  br label %551

546:                                              ; preds = %544, %271, %207
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %547

547:                                              ; preds = %546, %203
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #9
  br label %548

548:                                              ; preds = %547, %199
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #9
  br label %549

549:                                              ; preds = %548, %195
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #9
  br label %550

550:                                              ; preds = %549, %191
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #9
  br label %553

551:                                              ; preds = %545, %107
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  %552 = load i1, ptr %15, align 1
  ret i1 %552

553:                                              ; preds = %550, %108
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 128, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #9
  br label %554

554:                                              ; preds = %553
  %555 = load ptr, ptr %32, align 8
  %556 = load i32, ptr %33, align 4
  %557 = insertvalue { ptr, i32 } poison, ptr %555, 0
  %558 = insertvalue { ptr, i32 } %557, i32 %556, 1
  resume { ptr, i32 } %558
}

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

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

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

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

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

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

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

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::Array.28" = type { %"class.JPH::STLTempAllocator.29", i64, i64, ptr }
%"class.JPH::STLTempAllocator.29" = type { ptr }
%"class.JPH::Array.40" = type { %"class.JPH::STLTempAllocator.41", i64, i64, ptr }
%"class.JPH::STLTempAllocator.41" = type { ptr }

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332), double, double, double, double, ptr noundef nonnull align 16 dereferenceable(115), ptr noundef nonnull align 8 dereferenceable(32), 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 #4 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: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332), ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef, ptr noundef, 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), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH16CharacterVirtual13MoveToContactENS_4Vec3ERKNS0_7ContactERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332), double, double, ptr noundef nonnull align 16 dereferenceable(115), 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), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3JPH16CharacterVirtual10WalkStairsEfNS_4Vec3ES1_S1_S1_RKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %0, float noundef %1, double %2, double %3, double %4, double %5, double %6, double %7, ptr nocapture noundef readonly byval(%"class.JPH::Vec3") align 16 %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  %19 = alloca %"class.JPH::Array.28", align 8
  %20 = alloca %"class.JPH::STLTempAllocator.29", align 8
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Array.40", align 8
  %24 = alloca %"class.JPH::STLTempAllocator.41", align 8
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Vec3", align 16
  %31 = alloca %"struct.JPH::CharacterVirtual::Contact", align 16
  store double %4, ptr %15, align 16
  %32 = getelementptr inbounds i8, ptr %15, i64 8
  store double %5, ptr %32, align 8
  store double %6, ptr %16, align 16
  %33 = getelementptr inbounds i8, ptr %16, i64 8
  store double %7, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  store double %2, ptr %17, align 16
  %.sroa.2110.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  store double %3, ptr %.sroa.2110.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %18) #8
  call void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %18)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  call void @_ZN3JPH16STLTempAllocatorINS_16CharacterVirtual14IgnoredContactEEC2ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %13)
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %20)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  %34 = getelementptr inbounds i8, ptr %0, i64 240
  %.sroa.073.0.copyload = load double, ptr %34, align 16
  %.sroa.274.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 248
  %.sroa.274.0.copyload = load double, ptr %.sroa.274.0..sroa_idx, align 8, !tbaa !5
  %35 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %.sroa.073.0.copyload, double %.sroa.274.0.copyload, double %2, double %3, ptr noundef nonnull align 16 dereferenceable(115) %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12)
          to label %36 unwind label %41

36:                                               ; preds = %14
  br i1 %35, label %37, label %45

37:                                               ; preds = %36
  %38 = getelementptr inbounds i8, ptr %18, i64 68
  %39 = load float, ptr %38, align 4, !tbaa !8
  %40 = fcmp olt float %39, 0x3EB0C6F7A0000000
  br i1 %40, label %186, label %43

41:                                               ; preds = %14
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %187

43:                                               ; preds = %37
  %44 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef %39)
  %.sroa.061.0.copyload.pre = load double, ptr %17, align 16
  %.sroa.262.0.copyload.pre = load double, ptr %.sroa.2110.0..sroa_idx, align 8, !tbaa !5
  br label %45

45:                                               ; preds = %43, %36
  %.sroa.262.0.copyload = phi double [ %.sroa.262.0.copyload.pre, %43 ], [ %3, %36 ]
  %.sroa.061.0.copyload = phi double [ %.sroa.061.0.copyload.pre, %43 ], [ %2, %36 ]
  %46 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %34, double %.sroa.061.0.copyload, double %.sroa.262.0.copyload)
          to label %47 unwind label %72

47:                                               ; preds = %45
  %48 = extractvalue { double, double } %46, 0
  %49 = extractvalue { double, double } %46, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #8
  %50 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef %1)
          to label %51 unwind label %74

51:                                               ; preds = %47
  %52 = extractvalue { double, double } %50, 0
  store double %52, ptr %21, align 16
  %53 = getelementptr inbounds i8, ptr %21, i64 8
  %54 = extractvalue { double, double } %50, 1
  store double %54, ptr %53, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #8
  %55 = getelementptr inbounds i8, ptr %0, i64 32
  %.sroa.057.0.copyload = load double, ptr %55, align 16
  %.sroa.258.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 40
  %.sroa.258.0.copyload = load double, ptr %.sroa.258.0..sroa_idx, align 8, !tbaa !5
  %56 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %.sroa.057.0.copyload, double %.sroa.258.0.copyload)
  %.sroa.055.0.copyload = load double, ptr %55, align 16
  %.sroa.256.0.copyload = load double, ptr %.sroa.258.0..sroa_idx, align 8, !tbaa !5
  %57 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef %56, double %.sroa.055.0.copyload, double %.sroa.256.0.copyload)
          to label %58 unwind label %76

58:                                               ; preds = %51
  %59 = extractvalue { double, double } %57, 0
  %60 = extractvalue { double, double } %57, 1
  %61 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %21, double %59, double %60)
          to label %62 unwind label %76

62:                                               ; preds = %58
  %63 = extractvalue { double, double } %61, 0
  store double %63, ptr %22, align 16
  %64 = getelementptr inbounds i8, ptr %22, i64 8
  %65 = extractvalue { double, double } %61, 1
  store double %65, ptr %64, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  call void @_ZN3JPH16STLTempAllocatorINS_4Vec3EEC2ERNS_13TempAllocatorE(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %13)
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  %66 = getelementptr inbounds i8, ptr %0, i64 288
  %67 = call noundef i64 @_ZNK3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %66)
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(32) %23, i64 noundef %67)
          to label %68 unwind label %78

68:                                               ; preds = %62
  %69 = call noundef ptr @_ZN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %66)
  %70 = call noundef ptr @_ZN3JPH5ArrayINS_16CharacterVirtual7ContactENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %66)
  %.not156 = icmp eq ptr %69, %70
  br i1 %.not156, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %97, %68
  %71 = call noundef zeroext i1 @_ZNK3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %23)
  br i1 %71, label %182, label %99

72:                                               ; preds = %45
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %187

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

76:                                               ; preds = %58, %51
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %184

78:                                               ; preds = %62
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %183

.lr.ph:                                           ; preds = %68, %97
  %.0132157 = phi ptr [ %98, %97 ], [ %69, %68 ]
  %80 = getelementptr inbounds i8, ptr %.0132157, i64 112
  %81 = load i8, ptr %80, align 16, !tbaa !19, !range !20, !noundef !21
  %82 = trunc nuw i8 %81 to i1
  br i1 %82, label %83, label %97

83:                                               ; preds = %.lr.ph
  %84 = getelementptr inbounds i8, ptr %.0132157, i64 48
  %85 = getelementptr inbounds i8, ptr %.0132157, i64 16
  %.sroa.040.0.copyload = load double, ptr %85, align 16
  %.sroa.241.0..sroa_idx = getelementptr inbounds i8, ptr %.0132157, i64 24
  %.sroa.241.0.copyload = load double, ptr %.sroa.241.0..sroa_idx, align 8, !tbaa !5
  %86 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %22, double %.sroa.040.0.copyload, double %.sroa.241.0.copyload)
          to label %87 unwind label %95

87:                                               ; preds = %83
  %88 = extractvalue { double, double } %86, 0
  %89 = extractvalue { double, double } %86, 1
  %90 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %84, double %88, double %89)
  %91 = fcmp olt float %90, 0.000000e+00
  br i1 %91, label %92, label %97

92:                                               ; preds = %87
  %.sroa.038.0.copyload = load double, ptr %84, align 16
  %.sroa.239.0..sroa_idx = getelementptr inbounds i8, ptr %.0132157, i64 56
  %.sroa.239.0.copyload = load double, ptr %.sroa.239.0..sroa_idx, align 8, !tbaa !5
  %93 = call noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %0, double %.sroa.038.0.copyload, double %.sroa.239.0.copyload)
  br i1 %93, label %94, label %97

94:                                               ; preds = %92
  invoke void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 16 dereferenceable(16) %84)
          to label %97 unwind label %95

95:                                               ; preds = %94, %83
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %183

97:                                               ; preds = %94, %92, %87, %.lr.ph
  %98 = getelementptr inbounds i8, ptr %.0132157, i64 128
  %.not = icmp eq ptr %98, %70
  br i1 %.not, label %._crit_edge, label %.lr.ph

99:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #8
  store double %48, ptr %25, align 16
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %25, i64 8
  store double %49, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !5
  %.sroa.036.0.copyload = load double, ptr %21, align 16
  %.sroa.237.0.copyload = load double, ptr %53, align 8, !tbaa !5
  invoke void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %0, ptr noundef nonnull align 16 dereferenceable(16) %25, double %.sroa.036.0.copyload, double %.sroa.237.0.copyload, float noundef %1, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %100 unwind label %108

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #8
  %101 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %25, double %48, double %49)
          to label %102 unwind label %110

102:                                              ; preds = %100
  %103 = extractvalue { double, double } %101, 0
  store double %103, ptr %26, align 16
  %104 = getelementptr inbounds i8, ptr %26, i64 8
  %105 = extractvalue { double, double } %101, 1
  store double %105, ptr %104, align 8
  %106 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %26)
  %107 = fcmp olt float %106, 0x3E45798EE0000000
  br i1 %107, label %.critedge154, label %112

108:                                              ; preds = %99
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %181

110:                                              ; preds = %100
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %180

112:                                              ; preds = %102
  %113 = call noundef float @_ZNK3JPH4Vec36LengthEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %114 = fmul float %113, 0xBFA99999A0000000
  %115 = call noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(32) %23)
  %116 = call noundef ptr @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(32) %23)
  %.not138.not158 = icmp eq ptr %115, %116
  br i1 %.not138.not158, label %.critedge154, label %.lr.ph162

117:                                              ; preds = %.lr.ph162
  %118 = getelementptr inbounds i8, ptr %.0136159, i64 16
  %.not138.not = icmp eq ptr %118, %116
  br i1 %.not138.not, label %.critedge154, label %.lr.ph162

.lr.ph162:                                        ; preds = %112, %117
  %.0136159 = phi ptr [ %118, %117 ], [ %115, %112 ]
  %.sroa.022.0.copyload = load double, ptr %26, align 16
  %.sroa.223.0.copyload = load double, ptr %104, align 8, !tbaa !5
  %119 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %.0136159, double %.sroa.022.0.copyload, double %.sroa.223.0.copyload)
  %120 = fcmp uge float %119, %114
  br i1 %120, label %117, label %121

121:                                              ; preds = %.lr.ph162
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #8
  %122 = invoke { double, double } @_ZNK3JPH4Vec3ngEv(ptr noundef nonnull align 16 dereferenceable(16) %17)
          to label %123 unwind label %134

123:                                              ; preds = %121
  %124 = extractvalue { double, double } %122, 0
  store double %124, ptr %28, align 16
  %125 = getelementptr inbounds i8, ptr %28, i64 8
  %126 = extractvalue { double, double } %122, 1
  store double %126, ptr %125, align 8
  %.sroa.020.0.copyload = load double, ptr %8, align 16
  %.sroa.221.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  %.sroa.221.0.copyload = load double, ptr %.sroa.221.0..sroa_idx, align 8, !tbaa !5
  %127 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %28, double %.sroa.020.0.copyload, double %.sroa.221.0.copyload)
          to label %128 unwind label %134

128:                                              ; preds = %123
  %129 = extractvalue { double, double } %127, 0
  store double %129, ptr %27, align 16
  %130 = getelementptr inbounds i8, ptr %27, i64 8
  %131 = extractvalue { double, double } %127, 1
  store double %131, ptr %130, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #8
  %.sroa.018.0.copyload = load double, ptr %25, align 16
  %.sroa.219.0.copyload = load double, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !5
  %132 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %.sroa.018.0.copyload, double %.sroa.219.0.copyload, double %129, double %131, ptr noundef nonnull align 16 dereferenceable(115) %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12)
          to label %133 unwind label %136

133:                                              ; preds = %128
  br i1 %132, label %138, label %178

134:                                              ; preds = %123, %121
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #8
  br label %179

136:                                              ; preds = %171, %128
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %179

138:                                              ; preds = %133
  %139 = getelementptr inbounds i8, ptr %18, i64 48
  %.sroa.014.0.copyload = load double, ptr %139, align 16
  %.sroa.215.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 56
  %.sroa.215.0.copyload = load double, ptr %.sroa.215.0..sroa_idx, align 8, !tbaa !5
  %140 = call noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %0, double %.sroa.014.0.copyload, double %.sroa.215.0.copyload)
  br i1 %140, label %141, label %171

141:                                              ; preds = %138
  %142 = call noundef zeroext i1 @_ZNK3JPH4Vec310IsNearZeroEf(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 0x3D71979980000000)
  br i1 %142, label %178, label %143

143:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #8
  store double %48, ptr %29, align 16
  %.sroa.8.0..sroa_idx65 = getelementptr inbounds i8, ptr %29, i64 8
  store double %49, ptr %.sroa.8.0..sroa_idx65, align 8, !tbaa !5
  %144 = invoke { double, double } @_ZNK3JPH4Vec3dvEf(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef %1)
          to label %145 unwind label %157

145:                                              ; preds = %143
  %146 = extractvalue { double, double } %144, 0
  %147 = extractvalue { double, double } %144, 1
  invoke void @_ZNK3JPH16CharacterVirtual9MoveShapeERNS_4Vec3ES1_fPNS_5ArrayINS0_7ContactENS_12STLAllocatorIS4_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %0, ptr noundef nonnull align 16 dereferenceable(16) %29, double %146, double %147, float noundef %1, ptr noundef null, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %148 unwind label %157

148:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #8
  %149 = invoke { double, double } @_ZNK3JPH4Vec3miES0_(ptr noundef nonnull align 16 dereferenceable(16) %29, double %48, double %49)
          to label %150 unwind label %159

150:                                              ; preds = %148
  %151 = extractvalue { double, double } %149, 0
  store double %151, ptr %30, align 16
  %152 = getelementptr inbounds i8, ptr %30, i64 8
  %153 = extractvalue { double, double } %149, 1
  store double %153, ptr %152, align 8
  %154 = call noundef float @_ZNK3JPH4Vec38LengthSqEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #8
  %155 = fadd float %106, 0x3E45798EE0000000
  %156 = fcmp ugt float %154, %155
  br i1 %156, label %161, label %.critedge

157:                                              ; preds = %145, %143
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %170

159:                                              ; preds = %148
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #8
  br label %170

161:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %31) #8
  invoke void @_ZN3JPH16CharacterVirtual7ContactC2Ev(ptr noundef nonnull align 16 dereferenceable(115) %31)
          to label %162 unwind label %165

162:                                              ; preds = %161
  %.sroa.08.0.copyload = load double, ptr %29, align 16
  %.sroa.29.0.copyload = load double, ptr %.sroa.8.0..sroa_idx65, align 8, !tbaa !5
  %163 = invoke noundef zeroext i1 @_ZNK3JPH16CharacterVirtual23GetFirstContactForSweepENS_4Vec3ES1_RNS0_7ContactERKNS_5ArrayINS0_14IgnoredContactENS_16STLTempAllocatorIS5_EEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %.sroa.08.0.copyload, double %.sroa.29.0.copyload, double %129, double %131, ptr noundef nonnull align 16 dereferenceable(115) %31, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12)
          to label %164 unwind label %165

164:                                              ; preds = %162
  br i1 %163, label %167, label %.critedge152

165:                                              ; preds = %162, %161
  %166 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %31) #8
  br label %170

167:                                              ; preds = %164
  %168 = getelementptr inbounds i8, ptr %31, i64 48
  %.sroa.04.0.copyload = load double, ptr %168, align 16
  %.sroa.25.0..sroa_idx = getelementptr inbounds i8, ptr %31, i64 56
  %.sroa.25.0.copyload = load double, ptr %.sroa.25.0..sroa_idx, align 8, !tbaa !5
  %169 = call noundef zeroext i1 @_ZNK3JPH13CharacterBase15IsSlopeTooSteepENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(144) %0, double %.sroa.04.0.copyload, double %.sroa.25.0.copyload)
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #8
  br i1 %169, label %178, label %171

170:                                              ; preds = %159, %165, %157
  %.pn.pn = phi { ptr, i32 } [ %158, %157 ], [ %166, %165 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #8
  br label %179

171:                                              ; preds = %167, %138
  %172 = getelementptr inbounds i8, ptr %18, i64 68
  %173 = load float, ptr %172, align 4, !tbaa !8
  %174 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3mLEf(ptr noundef nonnull align 16 dereferenceable(16) %27, float noundef %173)
  %.sroa.02.0.copyload = load double, ptr %27, align 16
  %.sroa.23.0.copyload = load double, ptr %130, align 8, !tbaa !5
  %175 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN3JPH4Vec3pLES0_(ptr noundef nonnull align 16 dereferenceable(16) %25, double %.sroa.02.0.copyload, double %.sroa.23.0.copyload)
  %.sroa.0.0.copyload = load double, ptr %25, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !5
  invoke void @_ZN3JPH16CharacterVirtual13MoveToContactENS_4Vec3ERKNS0_7ContactERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterERNS_13TempAllocatorE(ptr noundef nonnull align 16 dereferenceable(332) %0, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload, ptr noundef nonnull align 16 dereferenceable(115) %18, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(12) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %176 unwind label %136

176:                                              ; preds = %171
  %177 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 0, ptr %177, align 4, !tbaa !22
  br label %178

.critedge:                                        ; preds = %150
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #8
  br label %178

.critedge152:                                     ; preds = %164
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #8
  br label %178

178:                                              ; preds = %.critedge152, %.critedge, %141, %133, %167, %176
  %.2 = phi i1 [ true, %176 ], [ false, %167 ], [ false, %133 ], [ false, %141 ], [ false, %.critedge ], [ false, %.critedge152 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #8
  br label %.critedge154

179:                                              ; preds = %170, %136, %134
  %.pn141 = phi { ptr, i32 } [ %137, %136 ], [ %.pn.pn, %170 ], [ %135, %134 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #8
  br label %180

.critedge154:                                     ; preds = %117, %112, %178, %102
  %.4 = phi i1 [ false, %102 ], [ %.2, %178 ], [ false, %112 ], [ false, %117 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #8
  br label %182

180:                                              ; preds = %179, %110
  %.pn141.pn = phi { ptr, i32 } [ %.pn141, %179 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #8
  br label %181

181:                                              ; preds = %180, %108
  %.pn141.pn.pn = phi { ptr, i32 } [ %.pn141.pn, %180 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #8
  br label %183

182:                                              ; preds = %._crit_edge, %.critedge154
  %.5 = phi i1 [ %.4, %.critedge154 ], [ false, %._crit_edge ]
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  br label %186

183:                                              ; preds = %181, %95, %78
  %.pn145 = phi { ptr, i32 } [ %96, %95 ], [ %.pn141.pn.pn, %181 ], [ %79, %78 ]
  call void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #8
  br label %184

184:                                              ; preds = %183, %76
  %.pn145.pn = phi { ptr, i32 } [ %.pn145, %183 ], [ %77, %76 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  br label %185

185:                                              ; preds = %184, %74
  %.pn145.pn.pn = phi { ptr, i32 } [ %.pn145.pn, %184 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  br label %187

186:                                              ; preds = %37, %182
  %.6 = phi i1 [ %.5, %182 ], [ false, %37 ]
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  ret i1 %.6

187:                                              ; preds = %72, %185, %41
  %.pn145.pn.pn.pn.pn = phi { ptr, i32 } [ %42, %41 ], [ %.pn145.pn.pn, %185 ], [ %73, %72 ]
  call void @_ZN3JPH5ArrayINS_16CharacterVirtual14IgnoredContactENS_16STLTempAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  resume { ptr, i32 } %.pn145.pn.pn.pn.pn
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_4Vec3ENS_16STLTempAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #3 align 2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !11, i64 68}
!9 = !{!"_ZTSN3JPH16CharacterVirtual7ContactE", !10, i64 0, !10, i64 16, !10, i64 32, !10, i64 48, !11, i64 64, !11, i64 68, !12, i64 72, !14, i64 80, !15, i64 88, !16, i64 92, !17, i64 93, !18, i64 96, !14, i64 104, !17, i64 112, !17, i64 113, !17, i64 114}
!10 = !{!"_ZTSN3JPH4Vec3E", !6, i64 0}
!11 = !{!"float", !6, i64 0}
!12 = !{!"_ZTSN3JPH6BodyIDE", !13, i64 0}
!13 = !{!"int", !6, i64 0}
!14 = !{!"any pointer", !6, i64 0}
!15 = !{!"_ZTSN3JPH10SubShapeIDE", !13, i64 0}
!16 = !{!"_ZTSN3JPH11EMotionTypeE", !6, i64 0}
!17 = !{!"bool", !6, i64 0}
!18 = !{!"long", !6, i64 0}
!19 = !{!9, !17, i64 112}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!23, !30, i64 68}
!23 = !{!"_ZTSN3JPH13CharacterBaseE", !24, i64 8, !14, i64 16, !27, i64 24, !10, i64 32, !28, i64 48, !11, i64 64, !30, i64 68, !12, i64 72, !15, i64 76, !10, i64 80, !10, i64 96, !10, i64 112, !31, i64 128, !18, i64 136}
!24 = !{!"_ZTSN3JPH9RefTargetINS_13CharacterBaseEEE", !25, i64 0}
!25 = !{!"_ZTSSt6atomicIjE", !26, i64 0}
!26 = !{!"_ZTSSt13__atomic_baseIjE", !13, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !14, i64 0}
!28 = !{!"_ZTSN3JPH5PlaneE", !29, i64 0}
!29 = !{!"_ZTSN3JPH4Vec4E", !6, i64 0}
!30 = !{!"_ZTSN3JPH13CharacterBase12EGroundStateE", !6, i64 0}
!31 = !{!"_ZTSN3JPH8RefConstINS_15PhysicsMaterialEEE", !14, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass