; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General/AllowedDOFsTest.ll (ZN15AllowedDOFsTest10InitializeEv)

; 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> }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.9", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.9" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::DistanceConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::SpringSettings" = type { i8, %union.anon.11, float }
%union.anon.11 = type { float }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.28 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.28 = type { i64, [8 x i8] }
%"class.JPH::STLAllocator.26" = type { i8 }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%class.AllowedDOFsTest = type { %class.Test, %"class.JPH::Array" }
%"class.JPH::Array" = type { i64, i64, ptr }

@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15AllowedDOFsTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::RefConst", align 8
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Quat", align 16
  %14 = alloca %"class.JPH::BodyID", align 4
  %15 = alloca %"class.JPH::DistanceConstraintSettings", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::BodyID", align 4
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.JPH::STLAllocator.26", align 1
  store ptr %0, ptr %2, align 8, !tbaa !5
  %23 = load ptr, ptr %2, align 8
  %24 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %23, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 16, ptr %3) #11
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 5.000000e-01, float noundef 1.000000e+00, float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #11
  %25 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 %3, i64 16, i1 false), !tbaa.struct !9
  %26 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  %27 = load double, ptr %26, align 16
  %28 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  %29 = load double, ptr %28, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %25, double %27, double %29, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %30 unwind label %35

30:                                               ; preds = %1
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef %25)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store i32 1, ptr %8, align 4, !tbaa !11
  br label %31

31:                                               ; preds = %217, %30
  %32 = load i32, ptr %8, align 4, !tbaa !11
  %33 = icmp sle i32 %32, 63
  br i1 %33, label %39, label %34

34:                                               ; preds = %31
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  br label %225

35:                                               ; preds = %1
  %36 = landingpad { ptr, i32 }
          cleanup
  %37 = extractvalue { ptr, i32 } %36, 0
  store ptr %37, ptr %6, align 8
  %38 = extractvalue { ptr, i32 } %36, 1
  store i32 %38, ptr %7, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %25) #11
  br label %226

39:                                               ; preds = %31
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  %40 = load i32, ptr %8, align 4, !tbaa !11
  %41 = and i32 %40, 7
  %42 = sitofp i32 %41 to float
  %43 = call float @llvm.fmuladd.f32(float 1.000000e+01, float %42, float -3.500000e+01)
  store float %43, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  %44 = load i32, ptr %8, align 4, !tbaa !11
  %45 = ashr i32 %44, 3
  %46 = and i32 %45, 7
  %47 = sitofp i32 %46 to float
  %48 = call float @llvm.fmuladd.f32(float 1.000000e+01, float %47, float -3.500000e+01)
  store float %48, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 256, ptr %11) #11
  %49 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %50 unwind label %134

50:                                               ; preds = %39
  %51 = load float, ptr %9, align 4, !tbaa !13
  %52 = load float, ptr %10, align 4, !tbaa !13
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef %51, float noundef 1.000000e+01, float noundef %52)
          to label %53 unwind label %134

53:                                               ; preds = %50
  %54 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %55 unwind label %134

55:                                               ; preds = %53
  %56 = getelementptr inbounds %"class.JPH::Quat", ptr %13, i32 0, i32 0
  %57 = getelementptr inbounds %"class.JPH::Vec4", ptr %56, i32 0, i32 0
  %58 = getelementptr inbounds %union.anon.4, ptr %57, i32 0, i32 0
  %59 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 0
  %60 = extractvalue { double, double } %54, 0
  store double %60, ptr %59, align 16
  %61 = getelementptr inbounds { double, double }, ptr %58, i32 0, i32 1
  %62 = extractvalue { double, double } %54, 1
  store double %62, ptr %61, align 8
  %63 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %64 = load double, ptr %63, align 16
  %65 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %66 = load double, ptr %65, align 8
  %67 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %68 = load double, ptr %67, align 16
  %69 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %70 = load double, ptr %69, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef %49, double %64, double %66, double %68, double %70, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %71 unwind label %134

71:                                               ; preds = %55
  %72 = load i32, ptr %8, align 4, !tbaa !11
  %73 = trunc i32 %72 to i8
  %74 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %11, i32 0, i32 8
  store i8 %73, ptr %74, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %75 = getelementptr inbounds %class.Test, ptr %23, i32 0, i32 3
  %76 = load ptr, ptr %75, align 8, !tbaa !33
  %77 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %76, ptr noundef nonnull align 16 dereferenceable(256) %11, i32 noundef 0)
          to label %78 unwind label %138

78:                                               ; preds = %71
  %79 = getelementptr inbounds %"class.JPH::BodyID", ptr %14, i32 0, i32 0
  store i32 %77, ptr %79, align 4
  %80 = getelementptr inbounds %class.AllowedDOFsTest, ptr %23, i32 0, i32 1
  invoke void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %80, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %81 unwind label %138

81:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 112, ptr %15) #11
  invoke void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112) %15)
          to label %82 unwind label %142

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #11
  %83 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %11, i32 0, i32 0
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef 5.000000e+00, float noundef 5.000000e+00, float noundef 5.000000e+00)
          to label %84 unwind label %146

84:                                               ; preds = %82
  %85 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %86 = load double, ptr %85, align 16
  %87 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %88 = load double, ptr %87, align 8
  %89 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %83, double %86, double %88)
          to label %90 unwind label %146

90:                                               ; preds = %84
  %91 = getelementptr inbounds %"class.JPH::Vec3", ptr %16, i32 0, i32 0
  %92 = getelementptr inbounds %union.anon, ptr %91, i32 0, i32 0
  %93 = getelementptr inbounds { double, double }, ptr %92, i32 0, i32 0
  %94 = extractvalue { double, double } %89, 0
  store double %94, ptr %93, align 16
  %95 = getelementptr inbounds { double, double }, ptr %92, i32 0, i32 1
  %96 = extractvalue { double, double } %89, 1
  store double %96, ptr %95, align 8
  %97 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %15, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %97, ptr align 16 %16, i64 16, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #11
  %98 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %11, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %19, ptr align 16 %3, i64 16, i1 false), !tbaa.struct !9
  %99 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %100 = load double, ptr %99, align 16
  %101 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %102 = load double, ptr %101, align 8
  %103 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %98, double %100, double %102)
          to label %104 unwind label %150

104:                                              ; preds = %90
  %105 = getelementptr inbounds %"class.JPH::Vec3", ptr %18, i32 0, i32 0
  %106 = getelementptr inbounds %union.anon, ptr %105, i32 0, i32 0
  %107 = getelementptr inbounds { double, double }, ptr %106, i32 0, i32 0
  %108 = extractvalue { double, double } %103, 0
  store double %108, ptr %107, align 16
  %109 = getelementptr inbounds { double, double }, ptr %106, i32 0, i32 1
  %110 = extractvalue { double, double } %103, 1
  store double %110, ptr %109, align 8
  %111 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %15, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %111, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #11
  %112 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %15, i32 0, i32 5
  store float 0.000000e+00, ptr %112, align 16, !tbaa !39
  %113 = invoke noundef float @_ZSt4sqrtf(float noundef 3.000000e+00)
          to label %114 unwind label %154

114:                                              ; preds = %104
  %115 = call float @llvm.fmuladd.f32(float %113, float 5.000000e+00, float 1.000000e+00)
  %116 = getelementptr inbounds %"class.JPH::DistanceConstraintSettings", ptr %15, i32 0, i32 6
  store float %115, ptr %116, align 4, !tbaa !50
  %117 = getelementptr inbounds %class.Test, ptr %23, i32 0, i32 2
  %118 = load ptr, ptr %117, align 8, !tbaa !51
  %119 = getelementptr inbounds %class.Test, ptr %23, i32 0, i32 3
  %120 = load ptr, ptr %119, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  invoke void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %121 unwind label %158

121:                                              ; preds = %114
  %122 = invoke noundef ptr @_ZN3JPH13BodyInterface16CreateConstraintEPKNS_25TwoBodyConstraintSettingsERKNS_6BodyIDES6_(ptr noundef nonnull align 8 dereferenceable(24) %120, ptr noundef %15, ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %123 unwind label %158

123:                                              ; preds = %121
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %118, ptr noundef %122)
          to label %124 unwind label %158

124:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %125 unwind label %162

125:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #11
  %126 = load i32, ptr %8, align 4, !tbaa !11
  %127 = trunc i32 %126 to i8
  %128 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %127, i8 noundef zeroext 1)
          to label %129 unwind label %166

129:                                              ; preds = %125
  %130 = icmp eq i8 %128, 1
  br i1 %130, label %131, label %170

131:                                              ; preds = %129
  %132 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.2)
          to label %133 unwind label %166

133:                                              ; preds = %131
  br label %170

134:                                              ; preds = %55, %53, %50, %39
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %6, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %7, align 4
  br label %224

138:                                              ; preds = %78, %71
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %6, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %7, align 4
  br label %223

142:                                              ; preds = %81
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %6, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %7, align 4
  br label %222

146:                                              ; preds = %84, %82
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %6, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #11
  br label %221

150:                                              ; preds = %90
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %6, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #11
  br label %221

154:                                              ; preds = %104
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %6, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %7, align 4
  br label %221

158:                                              ; preds = %123, %121, %114
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %6, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  br label %221

162:                                              ; preds = %124
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %6, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #11
  br label %220

166:                                              ; preds = %215, %212, %206, %203, %197, %194, %188, %185, %179, %176, %170, %131, %125
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %6, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %7, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #11
  br label %220

170:                                              ; preds = %133, %129
  %171 = load i32, ptr %8, align 4, !tbaa !11
  %172 = trunc i32 %171 to i8
  %173 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %172, i8 noundef zeroext 2)
          to label %174 unwind label %166

174:                                              ; preds = %170
  %175 = icmp eq i8 %173, 2
  br i1 %175, label %176, label %179

176:                                              ; preds = %174
  %177 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.3)
          to label %178 unwind label %166

178:                                              ; preds = %176
  br label %179

179:                                              ; preds = %178, %174
  %180 = load i32, ptr %8, align 4, !tbaa !11
  %181 = trunc i32 %180 to i8
  %182 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %181, i8 noundef zeroext 4)
          to label %183 unwind label %166

183:                                              ; preds = %179
  %184 = icmp eq i8 %182, 4
  br i1 %184, label %185, label %188

185:                                              ; preds = %183
  %186 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.4)
          to label %187 unwind label %166

187:                                              ; preds = %185
  br label %188

188:                                              ; preds = %187, %183
  %189 = load i32, ptr %8, align 4, !tbaa !11
  %190 = trunc i32 %189 to i8
  %191 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %190, i8 noundef zeroext 8)
          to label %192 unwind label %166

192:                                              ; preds = %188
  %193 = icmp eq i8 %191, 8
  br i1 %193, label %194, label %197

194:                                              ; preds = %192
  %195 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.5)
          to label %196 unwind label %166

196:                                              ; preds = %194
  br label %197

197:                                              ; preds = %196, %192
  %198 = load i32, ptr %8, align 4, !tbaa !11
  %199 = trunc i32 %198 to i8
  %200 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %199, i8 noundef zeroext 16)
          to label %201 unwind label %166

201:                                              ; preds = %197
  %202 = icmp eq i8 %200, 16
  br i1 %202, label %203, label %206

203:                                              ; preds = %201
  %204 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.6)
          to label %205 unwind label %166

205:                                              ; preds = %203
  br label %206

206:                                              ; preds = %205, %201
  %207 = load i32, ptr %8, align 4, !tbaa !11
  %208 = trunc i32 %207 to i8
  %209 = invoke noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %208, i8 noundef zeroext 32)
          to label %210 unwind label %166

210:                                              ; preds = %206
  %211 = icmp eq i8 %209, 32
  br i1 %211, label %212, label %215

212:                                              ; preds = %210
  %213 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef @.str.7)
          to label %214 unwind label %166

214:                                              ; preds = %212
  br label %215

215:                                              ; preds = %214, %210
  invoke void @_ZN4Test12SetBodyLabelERKN3JPH6BodyIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(112) %23, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %216 unwind label %166

216:                                              ; preds = %215
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #11
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %15) #11
  call void @llvm.lifetime.end.p0(i64 112, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  br label %217

217:                                              ; preds = %216
  %218 = load i32, ptr %8, align 4, !tbaa !11
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %8, align 4, !tbaa !11
  br label %31, !llvm.loop !52

220:                                              ; preds = %166, %162
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #11
  br label %221

221:                                              ; preds = %220, %158, %154, %150, %146
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %15) #11
  br label %222

222:                                              ; preds = %221, %142
  call void @llvm.lifetime.end.p0(i64 112, ptr %15) #11
  br label %223

223:                                              ; preds = %222, %138
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #11
  br label %224

224:                                              ; preds = %223, %134
  call void @llvm.lifetime.end.p0(i64 256, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #11
  br label %226

225:                                              ; preds = %34
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #11
  ret void

226:                                              ; preds = %224, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %3) #11
  br label %227

227:                                              ; preds = %226
  %228 = load ptr, ptr %6, align 8
  %229 = load i32, ptr %7, align 4
  %230 = insertvalue { ptr, i32 } poison, ptr %228, 0
  %231 = insertvalue { ptr, i32 } %230, i32 %229, 1
  resume { ptr, i32 } %231
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) #2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #4 align 2

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) #6 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #8

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) #2

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

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface16CreateConstraintEPKNS_25TwoBodyConstraintSettingsERKNS_6BodyIDES6_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext, i8 noundef zeroext) #10

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Test12SetBodyLabelERKN3JPH6BodyIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256)) unnamed_addr #9 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 16, !10}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !25, i64 97}
!16 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !17, i64 0, !18, i64 16, !17, i64 32, !17, i64 48, !20, i64 64, !21, i64 72, !22, i64 80, !24, i64 96, !25, i64 97, !26, i64 98, !26, i64 99, !26, i64 100, !26, i64 101, !26, i64 102, !27, i64 103, !26, i64 104, !26, i64 105, !14, i64 108, !14, i64 112, !14, i64 116, !14, i64 120, !14, i64 124, !14, i64 128, !14, i64 132, !12, i64 136, !12, i64 140, !28, i64 144, !14, i64 148, !29, i64 160, !31, i64 240, !32, i64 248}
!17 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!18 = !{!"_ZTSN3JPH4QuatE", !19, i64 0}
!19 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!20 = !{!"long", !7, i64 0}
!21 = !{!"short", !7, i64 0}
!22 = !{!"_ZTSN3JPH14CollisionGroupE", !23, i64 0, !12, i64 8, !12, i64 12}
!23 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!24 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!25 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!28 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!29 = !{!"_ZTSN3JPH14MassPropertiesE", !14, i64 0, !30, i64 16}
!30 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!31 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!32 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!33 = !{!34, !6, i64 24}
!34 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !26, i64 48, !35, i64 56}
!35 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !36, i64 0}
!36 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !20, i64 8, !37, i64 16, !20, i64 24, !38, i64 32, !6, i64 48}
!37 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!38 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !14, i64 0, !20, i64 8}
!39 = !{!40, !14, i64 80}
!40 = !{!"_ZTSN3JPH26DistanceConstraintSettingsE", !41, i64 0, !47, i64 40, !17, i64 48, !17, i64 64, !14, i64 80, !14, i64 84, !48, i64 88}
!41 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !42, i64 0}
!42 = !{!"_ZTSN3JPH18ConstraintSettingsE", !43, i64 0, !44, i64 8, !26, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !14, i64 28, !20, i64 32}
!43 = !{!"_ZTSN3JPH18SerializableObjectE"}
!44 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !45, i64 0}
!45 = !{!"_ZTSSt6atomicIjE", !46, i64 0}
!46 = !{!"_ZTSSt13__atomic_baseIjE", !12, i64 0}
!47 = !{!"_ZTSN3JPH16EConstraintSpaceE", !7, i64 0}
!48 = !{!"_ZTSN3JPH14SpringSettingsE", !49, i64 0, !7, i64 4, !14, i64 8}
!49 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!50 = !{!40, !14, i64 84}
!51 = !{!34, !6, i64 16}
!52 = distinct !{!52, !53}
!53 = !{!"llvm.loop.mustprogress"}


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

%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.9", %"class.JPH::RefConst" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.4 }
%union.anon.4 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.5", i32, i32 }
%"class.JPH::RefConst.5" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.9" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::DistanceConstraintSettings" = type <{ %"class.JPH::TwoBodyConstraintSettings", i32, [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, %"class.JPH::SpringSettings", [12 x i8] }>
%"class.JPH::TwoBodyConstraintSettings" = type { %"class.JPH::ConstraintSettings" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.10", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.10" = type { %"struct.std::atomic.6" }
%"struct.std::atomic.6" = type { %"struct.std::__atomic_base.7" }
%"struct.std::__atomic_base.7" = type { i32 }
%"class.JPH::SpringSettings" = type { i8, %union.anon.11, float }
%union.anon.11 = type { float }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.28 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.28 = type { i64, [8 x i8] }
%"class.JPH::STLAllocator.26" = type { i8 }

@.str.1 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15AllowedDOFsTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(136) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::Vec3", align 16
  %3 = alloca %"class.JPH::RefConst", align 8
  %4 = alloca %"class.JPH::BodyCreationSettings", align 16
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca %"class.JPH::BodyID", align 4
  %7 = alloca %"class.JPH::DistanceConstraintSettings", align 16
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::BodyID", align 4
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.JPH::STLAllocator.26", align 1
  %12 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %0, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #10
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %2, float noundef 5.000000e-01, float noundef 1.000000e+00, float noundef 2.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #10
  %13 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  %.sroa.019.0.copyload = load double, ptr %2, align 16
  %.sroa.220.0..sroa_idx = getelementptr inbounds i8, ptr %2, i64 8
  %.sroa.220.0.copyload = load double, ptr %.sroa.220.0..sroa_idx, align 8, !tbaa !5
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %13, double %.sroa.019.0.copyload, double %.sroa.220.0.copyload, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %14 unwind label %26

14:                                               ; preds = %1
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %13)
  %15 = getelementptr inbounds i8, ptr %5, i64 8
  %16 = getelementptr inbounds i8, ptr %4, i64 97
  %17 = getelementptr inbounds i8, ptr %0, i64 24
  %18 = getelementptr inbounds i8, ptr %0, i64 112
  %19 = getelementptr inbounds i8, ptr %8, i64 8
  %20 = getelementptr inbounds i8, ptr %7, i64 48
  %.sroa.53.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 56
  %21 = getelementptr inbounds i8, ptr %7, i64 64
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 72
  %22 = getelementptr inbounds i8, ptr %7, i64 80
  %23 = getelementptr inbounds i8, ptr %7, i64 84
  %24 = getelementptr inbounds i8, ptr %0, i64 16
  br label %28

25:                                               ; preds = %115
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  ret void

26:                                               ; preds = %1
  %27 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %13) #10
  br label %122

28:                                               ; preds = %14, %115
  %.02835 = phi i32 [ 1, %14 ], [ %116, %115 ]
  %29 = and i32 %.02835, 7
  %30 = uitofp nneg i32 %29 to float
  %31 = call float @llvm.fmuladd.f32(float %30, float 1.000000e+01, float -3.500000e+01)
  %32 = lshr i32 %.02835, 3
  %33 = uitofp nneg i32 %32 to float
  %34 = call float @llvm.fmuladd.f32(float %33, float 1.000000e+01, float -3.500000e+01)
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #10
  %35 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef %31, float noundef 1.000000e+01, float noundef %34)
          to label %36 unwind label %73

36:                                               ; preds = %28
  %37 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %38 unwind label %73

38:                                               ; preds = %36
  %39 = extractvalue { double, double } %37, 0
  %40 = extractvalue { double, double } %37, 1
  %41 = load double, ptr %5, align 16
  %42 = load double, ptr %15, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %4, ptr noundef %35, double %41, double %42, double %39, double %40, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %43 unwind label %73

43:                                               ; preds = %38
  %44 = trunc nuw i32 %.02835 to i8
  store i8 %44, ptr %16, align 1, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #10
  %45 = load ptr, ptr %17, align 8, !tbaa !29
  %46 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 16 dereferenceable(256) %4, i32 noundef 0)
          to label %47 unwind label %75

47:                                               ; preds = %43
  store i32 %46, ptr %6, align 4
  invoke void @_ZN3JPH5ArrayINS_6BodyIDENS_12STLAllocatorIS1_EEE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %48 unwind label %75

48:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %7) #10
  invoke void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7)
          to label %49 unwind label %77

49:                                               ; preds = %48
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef 5.000000e+00, float noundef 5.000000e+00, float noundef 5.000000e+00)
          to label %50 unwind label %79

50:                                               ; preds = %49
  %51 = load double, ptr %8, align 16
  %52 = load double, ptr %19, align 8
  %53 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %51, double %52)
          to label %54 unwind label %79

54:                                               ; preds = %50
  %55 = extractvalue { double, double } %53, 0
  %56 = extractvalue { double, double } %53, 1
  store double %55, ptr %20, align 16
  store double %56, ptr %.sroa.53.0..sroa_idx, align 8, !tbaa !5
  %.sroa.0.0.copyload = load double, ptr %2, align 16
  %.sroa.2.0.copyload = load double, ptr %.sroa.220.0..sroa_idx, align 8, !tbaa !5
  %57 = invoke { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
          to label %58 unwind label %81

58:                                               ; preds = %54
  %59 = extractvalue { double, double } %57, 0
  %60 = extractvalue { double, double } %57, 1
  store double %59, ptr %21, align 16
  store double %60, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  store float 0.000000e+00, ptr %22, align 16, !tbaa !35
  %61 = call noundef float @_ZSt4sqrtf(float noundef 3.000000e+00)
  %62 = call float @llvm.fmuladd.f32(float %61, float 5.000000e+00, float 1.000000e+00)
  store float %62, ptr %23, align 4, !tbaa !46
  %63 = load ptr, ptr %24, align 8, !tbaa !47
  %64 = load ptr, ptr %17, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  call void @_ZN3JPH6BodyIDC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %65 = invoke noundef ptr @_ZN3JPH13BodyInterface16CreateConstraintEPKNS_25TwoBodyConstraintSettingsERKNS_6BodyIDES6_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull %7, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %66 unwind label %83

66:                                               ; preds = %58
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %63, ptr noundef %65)
          to label %67 unwind label %83

67:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEC2IS5_EEPKcRKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %68 unwind label %85

68:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #10
  %69 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 1)
  %70 = icmp eq i8 %69, 1
  br i1 %70, label %71, label %89

71:                                               ; preds = %68
  %72 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.2)
          to label %89 unwind label %87

73:                                               ; preds = %38, %36, %28
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %121

75:                                               ; preds = %47, %43
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %120

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

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

81:                                               ; preds = %54
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %118

83:                                               ; preds = %66, %58
  %84 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  br label %118

85:                                               ; preds = %67
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #10
  br label %117

87:                                               ; preds = %114, %112, %107, %102, %97, %92, %71
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #10
  br label %117

89:                                               ; preds = %71, %68
  %90 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 2)
  %91 = icmp eq i8 %90, 2
  br i1 %91, label %92, label %94

92:                                               ; preds = %89
  %93 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.3)
          to label %94 unwind label %87

94:                                               ; preds = %92, %89
  %95 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 4)
  %96 = icmp eq i8 %95, 4
  br i1 %96, label %97, label %99

97:                                               ; preds = %94
  %98 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.4)
          to label %99 unwind label %87

99:                                               ; preds = %97, %94
  %100 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 8)
  %101 = icmp eq i8 %100, 8
  br i1 %101, label %102, label %104

102:                                              ; preds = %99
  %103 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.5)
          to label %104 unwind label %87

104:                                              ; preds = %102, %99
  %105 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 16)
  %106 = icmp eq i8 %105, 16
  br i1 %106, label %107, label %109

107:                                              ; preds = %104
  %108 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.6)
          to label %109 unwind label %87

109:                                              ; preds = %107, %104
  %110 = call noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext %44, i8 noundef zeroext 32)
  %111 = icmp eq i8 %110, 32
  br i1 %111, label %112, label %114

112:                                              ; preds = %109
  %113 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.7)
          to label %114 unwind label %87

114:                                              ; preds = %112, %109
  invoke void @_ZN4Test12SetBodyLabelERKN3JPH6BodyIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(112) %0, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %115 unwind label %87

115:                                              ; preds = %114
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #10
  %116 = add nuw nsw i32 %.02835, 1
  %exitcond.not = icmp eq i32 %116, 64
  br i1 %exitcond.not, label %25, label %28, !llvm.loop !48

117:                                              ; preds = %87, %85
  %.pn = phi { ptr, i32 } [ %88, %87 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #10
  br label %118

118:                                              ; preds = %117, %83, %81, %79
  %.pn.pn = phi { ptr, i32 } [ %.pn, %117 ], [ %84, %83 ], [ %82, %81 ], [ %80, %79 ]
  call void @_ZN3JPH18ConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(112) %7) #10
  br label %119

119:                                              ; preds = %118, %77
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %118 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %7) #10
  br label %120

120:                                              ; preds = %119, %75
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %119 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #10
  br label %121

121:                                              ; preds = %120, %73
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %120 ], [ %74, %73 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #10
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  br label %122

122:                                              ; preds = %121, %26
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %121 ], [ %27, %26 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112), float noundef) local_unnamed_addr #2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH26DistanceConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(112)) unnamed_addr #6 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 #3 align 2

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

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

declare noundef ptr @_ZN3JPH13BodyInterface16CreateConstraintEPKNS_25TwoBodyConstraintSettingsERKNS_6BodyIDES6_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZN3JPHanENS_12EAllowedDOFsES0_(i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #9

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcEN3JPH12STLAllocatorIcEEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Test12SetBodyLabelERKN3JPH6BodyIDERKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !20, i64 97}
!9 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !10, i64 0, !11, i64 16, !10, i64 32, !10, i64 48, !13, i64 64, !14, i64 72, !15, i64 80, !19, i64 96, !20, i64 97, !21, i64 98, !21, i64 99, !21, i64 100, !21, i64 101, !21, i64 102, !22, i64 103, !21, i64 104, !21, i64 105, !23, i64 108, !23, i64 112, !23, i64 116, !23, i64 120, !23, i64 124, !23, i64 128, !23, i64 132, !18, i64 136, !18, i64 140, !24, i64 144, !23, i64 148, !25, i64 160, !27, i64 240, !28, i64 248}
!10 = !{!"_ZTSN3JPH4Vec3E", !6, i64 0}
!11 = !{!"_ZTSN3JPH4QuatE", !12, i64 0}
!12 = !{!"_ZTSN3JPH4Vec4E", !6, i64 0}
!13 = !{!"long", !6, i64 0}
!14 = !{!"short", !6, i64 0}
!15 = !{!"_ZTSN3JPH14CollisionGroupE", !16, i64 0, !18, i64 8, !18, i64 12}
!16 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !17, i64 0}
!17 = !{!"any pointer", !6, i64 0}
!18 = !{!"int", !6, i64 0}
!19 = !{!"_ZTSN3JPH11EMotionTypeE", !6, i64 0}
!20 = !{!"_ZTSN3JPH12EAllowedDOFsE", !6, i64 0}
!21 = !{!"bool", !6, i64 0}
!22 = !{!"_ZTSN3JPH14EMotionQualityE", !6, i64 0}
!23 = !{!"float", !6, i64 0}
!24 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !6, i64 0}
!25 = !{!"_ZTSN3JPH14MassPropertiesE", !23, i64 0, !26, i64 16}
!26 = !{!"_ZTSN3JPH5Mat44E", !6, i64 0}
!27 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !17, i64 0}
!28 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !17, i64 0}
!29 = !{!30, !17, i64 24}
!30 = !{!"_ZTS4Test", !17, i64 8, !17, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !21, i64 48, !31, i64 56}
!31 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !32, i64 0}
!32 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !17, i64 0, !13, i64 8, !33, i64 16, !13, i64 24, !34, i64 32, !17, i64 48}
!33 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !17, i64 0}
!34 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !23, i64 0, !13, i64 8}
!35 = !{!36, !23, i64 80}
!36 = !{!"_ZTSN3JPH26DistanceConstraintSettingsE", !37, i64 0, !43, i64 40, !10, i64 48, !10, i64 64, !23, i64 80, !23, i64 84, !44, i64 88}
!37 = !{!"_ZTSN3JPH25TwoBodyConstraintSettingsE", !38, i64 0}
!38 = !{!"_ZTSN3JPH18ConstraintSettingsE", !39, i64 0, !40, i64 8, !21, i64 12, !18, i64 16, !18, i64 20, !18, i64 24, !23, i64 28, !13, i64 32}
!39 = !{!"_ZTSN3JPH18SerializableObjectE"}
!40 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !41, i64 0}
!41 = !{!"_ZTSSt6atomicIjE", !42, i64 0}
!42 = !{!"_ZTSSt13__atomic_baseIjE", !18, i64 0}
!43 = !{!"_ZTSN3JPH16EConstraintSpaceE", !6, i64 0}
!44 = !{!"_ZTSN3JPH14SpringSettingsE", !45, i64 0, !6, i64 4, !23, i64 8}
!45 = !{!"_ZTSN3JPH11ESpringModeE", !6, i64 0}
!46 = !{!36, !23, i64 84}
!47 = !{!30, !17, i64 16}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,SROAPass,SimplifyCFGPass,TailCallElimPass