; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/General/TwoDFunnelTest.ll (ZN14TwoDFunnelTest10InitializeEv)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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::Ref" = type { ptr }
%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 }

; 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 @_ZN14TwoDFunnelTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::RefConst", align 8
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.JPH::BodyCreationSettings", align 16
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::Quat", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyID", align 4
  %12 = alloca %"class.JPH::BodyCreationSettings", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Quat", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::BodyID", align 4
  %17 = alloca [3 x %"class.JPH::Ref"], align 16
  %18 = alloca ptr, align 8
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::BodyCreationSettings", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Quat", align 16
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %28 = load ptr, ptr %2, align 8
  %29 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test11CreateFloorEf(ptr noundef nonnull align 8 dereferenceable(112) %28, float noundef 2.000000e+02)
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #10
  %30 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0x3FB99999A0000000, float noundef 1.000000e+01, float noundef 1.000000e+00)
          to label %31 unwind label %173

31:                                               ; preds = %1
  %32 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 0
  %33 = load double, ptr %32, align 16
  %34 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 1
  %35 = load double, ptr %34, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %30, double %33, double %35, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %36 unwind label %173

36:                                               ; preds = %31
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef %30)
  %37 = getelementptr inbounds %class.Test, ptr %28, i32 0, i32 3
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %7) #10
  %39 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %40 unwind label %177

40:                                               ; preds = %36
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %8, float noundef -1.200000e+01, float noundef 8.000000e+00, float noundef -5.000000e+00)
          to label %41 unwind label %177

41:                                               ; preds = %40
  %42 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %43 unwind label %177

43:                                               ; preds = %41
  %44 = getelementptr inbounds %"class.JPH::Vec3", ptr %10, i32 0, i32 0
  %45 = getelementptr inbounds %union.anon, ptr %44, i32 0, i32 0
  %46 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %47 = extractvalue { double, double } %42, 0
  store double %47, ptr %46, align 16
  %48 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %49 = extractvalue { double, double } %42, 1
  store double %49, ptr %48, align 8
  %50 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %51 = load double, ptr %50, align 16
  %52 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %53 = load double, ptr %52, align 8
  %54 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %51, double %53, float noundef 0x3FE41B2F80000000)
          to label %55 unwind label %177

55:                                               ; preds = %43
  %56 = getelementptr inbounds %"class.JPH::Quat", ptr %9, 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 %8, i32 0, i32 0
  %64 = load double, ptr %63, align 16
  %65 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 1
  %66 = load double, ptr %65, align 8
  %67 = getelementptr inbounds { double, double }, ptr %9, i32 0, i32 0
  %68 = load double, ptr %67, align 16
  %69 = getelementptr inbounds { double, double }, ptr %9, 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) %7, ptr noundef %39, double %64, double %66, double %68, double %70, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %71 unwind label %177

71:                                               ; preds = %55
  %72 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 16 dereferenceable(256) %7, i32 noundef 1)
          to label %73 unwind label %181

73:                                               ; preds = %71
  %74 = getelementptr inbounds %"class.JPH::BodyID", ptr %11, i32 0, i32 0
  store i32 %72, ptr %74, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %7) #10
  %75 = getelementptr inbounds %class.Test, ptr %28, i32 0, i32 3
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %12) #10
  %77 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %78 unwind label %186

78:                                               ; preds = %73
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 1.200000e+01, float noundef 8.000000e+00, float noundef -5.000000e+00)
          to label %79 unwind label %186

79:                                               ; preds = %78
  %80 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %81 unwind label %186

81:                                               ; preds = %79
  %82 = getelementptr inbounds %"class.JPH::Vec3", ptr %15, i32 0, i32 0
  %83 = getelementptr inbounds %union.anon, ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 0
  %85 = extractvalue { double, double } %80, 0
  store double %85, ptr %84, align 16
  %86 = getelementptr inbounds { double, double }, ptr %83, i32 0, i32 1
  %87 = extractvalue { double, double } %80, 1
  store double %87, ptr %86, align 8
  %88 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 0
  %89 = load double, ptr %88, align 16
  %90 = getelementptr inbounds { double, double }, ptr %15, i32 0, i32 1
  %91 = load double, ptr %90, align 8
  %92 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %89, double %91, float noundef 0xBFE41B2F80000000)
          to label %93 unwind label %186

93:                                               ; preds = %81
  %94 = getelementptr inbounds %"class.JPH::Quat", ptr %14, i32 0, i32 0
  %95 = getelementptr inbounds %"class.JPH::Vec4", ptr %94, i32 0, i32 0
  %96 = getelementptr inbounds %union.anon.4, ptr %95, i32 0, i32 0
  %97 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %98 = extractvalue { double, double } %92, 0
  store double %98, ptr %97, align 16
  %99 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %100 = extractvalue { double, double } %92, 1
  store double %100, ptr %99, align 8
  %101 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %102 = load double, ptr %101, align 16
  %103 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %104 = load double, ptr %103, align 8
  %105 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %106 = load double, ptr %105, align 16
  %107 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %108 = load double, ptr %107, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %12, ptr noundef %77, double %102, double %104, double %106, double %108, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %109 unwind label %186

109:                                              ; preds = %93
  %110 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %76, ptr noundef nonnull align 16 dereferenceable(256) %12, i32 noundef 1)
          to label %111 unwind label %190

111:                                              ; preds = %109
  %112 = getelementptr inbounds %"class.JPH::BodyID", ptr %16, i32 0, i32 0
  store i32 %110, ptr %112, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %12) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %12) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #10
  store ptr %17, ptr %18, align 8
  %113 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %114 unwind label %195

114:                                              ; preds = %111
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %113, float noundef 5.000000e-01, ptr noundef null)
          to label %115 unwind label %199

115:                                              ; preds = %114
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef %113)
          to label %116 unwind label %195

116:                                              ; preds = %115
  %117 = getelementptr inbounds %"class.JPH::Ref", ptr %17, i64 1
  store ptr %117, ptr %18, align 8
  %118 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %119 unwind label %195

119:                                              ; preds = %116
  %120 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e-01)
          to label %121 unwind label %203

121:                                              ; preds = %119
  %122 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i32 0, i32 0
  %123 = getelementptr inbounds %union.anon, ptr %122, i32 0, i32 0
  %124 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 0
  %125 = extractvalue { double, double } %120, 0
  store double %125, ptr %124, align 16
  %126 = getelementptr inbounds { double, double }, ptr %123, i32 0, i32 1
  %127 = extractvalue { double, double } %120, 1
  store double %127, ptr %126, align 8
  %128 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %129 = load double, ptr %128, align 16
  %130 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %131 = load double, ptr %130, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %118, double %129, double %131, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %132 unwind label %203

132:                                              ; preds = %121
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef %118)
          to label %133 unwind label %195

133:                                              ; preds = %132
  %134 = getelementptr inbounds %"class.JPH::Ref", ptr %17, i64 2
  store ptr %134, ptr %18, align 8
  %135 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %136 unwind label %195

136:                                              ; preds = %133
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %135, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, ptr noundef null)
          to label %137 unwind label %207

137:                                              ; preds = %136
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %134, ptr noundef %135)
          to label %138 unwind label %195

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 256, ptr %20) #10
  %139 = getelementptr inbounds [3 x %"class.JPH::Ref"], ptr %17, i64 0, i64 0
  %140 = invoke noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %139)
          to label %141 unwind label %219

141:                                              ; preds = %138
  %142 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %143 unwind label %219

143:                                              ; preds = %141
  %144 = getelementptr inbounds %"class.JPH::Vec3", ptr %21, i32 0, i32 0
  %145 = getelementptr inbounds %union.anon, ptr %144, i32 0, i32 0
  %146 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 0
  %147 = extractvalue { double, double } %142, 0
  store double %147, ptr %146, align 16
  %148 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 1
  %149 = extractvalue { double, double } %142, 1
  store double %149, ptr %148, align 8
  %150 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %151 unwind label %219

151:                                              ; preds = %143
  %152 = getelementptr inbounds %"class.JPH::Quat", ptr %22, i32 0, i32 0
  %153 = getelementptr inbounds %"class.JPH::Vec4", ptr %152, i32 0, i32 0
  %154 = getelementptr inbounds %union.anon.4, ptr %153, i32 0, i32 0
  %155 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 0
  %156 = extractvalue { double, double } %150, 0
  store double %156, ptr %155, align 16
  %157 = getelementptr inbounds { double, double }, ptr %154, i32 0, i32 1
  %158 = extractvalue { double, double } %150, 1
  store double %158, ptr %157, align 8
  %159 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %160 = load double, ptr %159, align 16
  %161 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %162 = load double, ptr %161, align 8
  %163 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %164 = load double, ptr %163, align 16
  %165 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %166 = load double, ptr %165, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %20, ptr noundef %140, double %160, double %162, double %164, double %166, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %167 unwind label %219

167:                                              ; preds = %151
  %168 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %20, i32 0, i32 8
  store i8 35, ptr %168, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store i32 0, ptr %23, align 4, !tbaa !35
  br label %169

169:                                              ; preds = %273, %167
  %170 = load i32, ptr %23, align 4, !tbaa !35
  %171 = icmp slt i32 %170, 20
  br i1 %171, label %223, label %172

172:                                              ; preds = %169
  store i32 2, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %276

173:                                              ; preds = %31, %1
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %5, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %30) #10
  br label %294

177:                                              ; preds = %55, %43, %41, %40, %36
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %5, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %6, align 4
  br label %185

181:                                              ; preds = %71
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %5, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %7) #10
  br label %185

185:                                              ; preds = %181, %177
  call void @llvm.lifetime.end.p0(i64 256, ptr %7) #10
  br label %293

186:                                              ; preds = %93, %81, %79, %78, %73
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %5, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %6, align 4
  br label %194

190:                                              ; preds = %109
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %5, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %12) #10
  br label %194

194:                                              ; preds = %190, %186
  call void @llvm.lifetime.end.p0(i64 256, ptr %12) #10
  br label %293

195:                                              ; preds = %137, %133, %132, %116, %115, %111
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %5, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %6, align 4
  br label %211

199:                                              ; preds = %114
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %5, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %6, align 4
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %113) #10
  br label %211

203:                                              ; preds = %121, %119
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %5, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %118) #10
  br label %211

207:                                              ; preds = %136
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %5, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %6, align 4
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %135) #10
  br label %211

211:                                              ; preds = %207, %203, %199, %195
  %212 = load ptr, ptr %18, align 8
  %213 = icmp eq ptr %17, %212
  br i1 %213, label %218, label %214

214:                                              ; preds = %214, %211
  %215 = phi ptr [ %212, %211 ], [ %216, %214 ]
  %216 = getelementptr inbounds %"class.JPH::Ref", ptr %215, i64 -1
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %216) #10
  %217 = icmp eq ptr %216, %17
  br i1 %217, label %218, label %214

218:                                              ; preds = %214, %211
  br label %292

219:                                              ; preds = %151, %143, %141, %138
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %5, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %6, align 4
  br label %284

223:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !35
  br label %224

224:                                              ; preds = %260, %223
  %225 = load i32, ptr %25, align 4, !tbaa !35
  %226 = icmp slt i32 %225, 10
  br i1 %226, label %228, label %227

227:                                              ; preds = %224
  store i32 5, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %272

228:                                              ; preds = %224
  %229 = load i32, ptr %23, align 4, !tbaa !35
  %230 = load i32, ptr %25, align 4, !tbaa !35
  %231 = mul nsw i32 %229, %230
  %232 = sext i32 %231 to i64
  %233 = call noundef i64 @_ZSt4sizeIN3JPH3RefINS0_5ShapeEEELm3EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  %234 = urem i64 %232, %233
  %235 = getelementptr inbounds [3 x %"class.JPH::Ref"], ptr %17, i64 0, i64 %234
  %236 = invoke noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %235)
          to label %237 unwind label %263

237:                                              ; preds = %228
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %20, ptr noundef %236)
          to label %238 unwind label %263

238:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #10
  %239 = invoke noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4002A000000000000000)
          to label %240 unwind label %267

240:                                              ; preds = %238
  %241 = fneg float %239
  %242 = load i32, ptr %23, align 4, !tbaa !35
  %243 = sitofp i32 %242 to float
  %244 = fadd float %241, %243
  %245 = invoke noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4002A000000000000000)
          to label %246 unwind label %267

246:                                              ; preds = %240
  %247 = load i32, ptr %25, align 4, !tbaa !35
  %248 = sitofp i32 %247 to float
  %249 = fadd float %245, %248
  %250 = invoke noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4001A000000000000000)
          to label %251 unwind label %267

251:                                              ; preds = %246
  %252 = fneg float %250
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %26, float noundef %244, float noundef %249, float noundef %252)
          to label %253 unwind label %267

253:                                              ; preds = %251
  %254 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %20, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %254, ptr align 16 %26, i64 16, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  %255 = getelementptr inbounds %class.Test, ptr %28, i32 0, i32 3
  %256 = load ptr, ptr %255, align 8, !tbaa !9
  %257 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %256, ptr noundef nonnull align 16 dereferenceable(256) %20, i32 noundef 0)
          to label %258 unwind label %263

258:                                              ; preds = %253
  %259 = getelementptr inbounds %"class.JPH::BodyID", ptr %27, i32 0, i32 0
  store i32 %257, ptr %259, align 4
  br label %260

260:                                              ; preds = %258
  %261 = load i32, ptr %25, align 4, !tbaa !35
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %25, align 4, !tbaa !35
  br label %224, !llvm.loop !38

263:                                              ; preds = %253, %237, %228
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %5, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %6, align 4
  br label %271

267:                                              ; preds = %251, %246, %240, %238
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %5, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  br label %271

271:                                              ; preds = %267, %263
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #10
  br label %284

272:                                              ; preds = %227
  br label %273

273:                                              ; preds = %272
  %274 = load i32, ptr %23, align 4, !tbaa !35
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %23, align 4, !tbaa !35
  br label %169, !llvm.loop !40

276:                                              ; preds = %172
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #10
  %277 = getelementptr inbounds [3 x %"class.JPH::Ref"], ptr %17, i32 0, i32 0
  %278 = getelementptr inbounds %"class.JPH::Ref", ptr %277, i64 3
  br label %279

279:                                              ; preds = %279, %276
  %280 = phi ptr [ %278, %276 ], [ %281, %279 ]
  %281 = getelementptr inbounds %"class.JPH::Ref", ptr %280, i64 -1
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %281) #10
  %282 = icmp eq ptr %281, %277
  br i1 %282, label %283, label %279

283:                                              ; preds = %279
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #10
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #10
  ret void

284:                                              ; preds = %271, %219
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #10
  %285 = getelementptr inbounds [3 x %"class.JPH::Ref"], ptr %17, i32 0, i32 0
  %286 = getelementptr inbounds %"class.JPH::Ref", ptr %285, i64 3
  br label %287

287:                                              ; preds = %287, %284
  %288 = phi ptr [ %286, %284 ], [ %289, %287 ]
  %289 = getelementptr inbounds %"class.JPH::Ref", ptr %288, i64 -1
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %289) #10
  %290 = icmp eq ptr %289, %285
  br i1 %290, label %291, label %287

291:                                              ; preds = %287
  br label %292

292:                                              ; preds = %291, %218
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #10
  br label %293

293:                                              ; preds = %292, %194, %185
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #10
  br label %294

294:                                              ; preds = %293, %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #10
  br label %295

295:                                              ; preds = %294
  %296 = load ptr, ptr %5, align 8
  %297 = load i32, ptr %6, align 4
  %298 = insertvalue { ptr, i32 } poison, ptr %296, 0
  %299 = insertvalue { ptr, i32 } %298, i32 %297, 1
  resume { ptr, i32 } %299
}

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 noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #3 align 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 #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) #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

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 nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisZEv() #3 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; 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) #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 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"="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 = { 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 #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 = { 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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 24}
!10 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 56}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !13, i64 0}
!13 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !6, i64 48}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!19, !28, i64 97}
!19 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !20, i64 0, !21, i64 16, !20, i64 32, !20, i64 48, !14, i64 64, !23, i64 72, !24, i64 80, !27, i64 96, !28, i64 97, !11, i64 98, !11, i64 99, !11, i64 100, !11, i64 101, !11, i64 102, !29, i64 103, !11, i64 104, !11, i64 105, !17, i64 108, !17, i64 112, !17, i64 116, !17, i64 120, !17, i64 124, !17, i64 128, !17, i64 132, !26, i64 136, !26, i64 140, !30, i64 144, !17, i64 148, !31, i64 160, !33, i64 240, !34, i64 248}
!20 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!21 = !{!"_ZTSN3JPH4QuatE", !22, i64 0}
!22 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!23 = !{!"short", !7, i64 0}
!24 = !{!"_ZTSN3JPH14CollisionGroupE", !25, i64 0, !26, i64 8, !26, i64 12}
!25 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!26 = !{!"int", !7, i64 0}
!27 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!28 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!29 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!30 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!31 = !{!"_ZTSN3JPH14MassPropertiesE", !17, i64 0, !32, i64 16}
!32 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!33 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!34 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!35 = !{!26, !26, i64 0}
!36 = !{i64 0, i64 16, !37}
!37 = !{!7, !7, i64 0}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}


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

%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"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::Ref" = 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: mustprogress uwtable
define dso_local void @_ZN14TwoDFunnelTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::RefConst", align 8
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::BodyCreationSettings", align 16
  %5 = alloca %"class.JPH::Vec3", align 16
  %6 = alloca %"class.JPH::BodyCreationSettings", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca [3 x %"class.JPH::Ref"], align 16
  %9 = alloca %"class.JPH::BodyCreationSettings", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = 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 8, ptr nonnull %2) #10
  %12 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 0x3FB99999A0000000, float noundef 1.000000e+01, float noundef 1.000000e+00)
          to label %13 unwind label %87

13:                                               ; preds = %1
  %14 = load double, ptr %3, align 16
  %15 = getelementptr inbounds i8, ptr %3, i64 8
  %16 = load double, ptr %15, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %12, double %14, double %16, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %17 unwind label %87

17:                                               ; preds = %13
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull %12)
  %18 = getelementptr inbounds i8, ptr %0, i64 24
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #10
  %20 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %5, float noundef -1.200000e+01, float noundef 8.000000e+00, float noundef -5.000000e+00)
          to label %21 unwind label %89

21:                                               ; preds = %17
  %22 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %23 unwind label %89

23:                                               ; preds = %21
  %24 = extractvalue { double, double } %22, 0
  %25 = extractvalue { double, double } %22, 1
  %26 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %24, double %25, float noundef 0x3FE41B2F80000000)
          to label %27 unwind label %89

27:                                               ; preds = %23
  %28 = extractvalue { double, double } %26, 0
  %29 = extractvalue { double, double } %26, 1
  %30 = load double, ptr %5, align 16
  %31 = getelementptr inbounds i8, ptr %5, i64 8
  %32 = load double, ptr %31, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %4, ptr noundef %20, double %30, double %32, double %28, double %29, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %33 unwind label %89

33:                                               ; preds = %27
  %34 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 16 dereferenceable(256) %4, i32 noundef 1)
          to label %35 unwind label %91

35:                                               ; preds = %33
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #10
  %36 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %6) #10
  %37 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %2)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 1.200000e+01, float noundef 8.000000e+00, float noundef -5.000000e+00)
          to label %38 unwind label %94

38:                                               ; preds = %35
  %39 = invoke { double, double } @_ZN3JPH4Vec36sAxisZEv()
          to label %40 unwind label %94

40:                                               ; preds = %38
  %41 = extractvalue { double, double } %39, 0
  %42 = extractvalue { double, double } %39, 1
  %43 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %41, double %42, float noundef 0xBFE41B2F80000000)
          to label %44 unwind label %94

44:                                               ; preds = %40
  %45 = extractvalue { double, double } %43, 0
  %46 = extractvalue { double, double } %43, 1
  %47 = load double, ptr %7, align 16
  %48 = getelementptr inbounds i8, ptr %7, i64 8
  %49 = load double, ptr %48, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %6, ptr noundef %37, double %47, double %49, double %45, double %46, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %50 unwind label %94

50:                                               ; preds = %44
  %51 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 16 dereferenceable(256) %6, i32 noundef 1)
          to label %52 unwind label %96

52:                                               ; preds = %50
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %6) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %6) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #10
  %53 = invoke noundef ptr @_ZN3JPH11SphereShapenwEm(i64 noundef 48)
          to label %54 unwind label %104

54:                                               ; preds = %52
  invoke void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %53, float noundef 5.000000e-01, ptr noundef null)
          to label %55 unwind label %.thread

55:                                               ; preds = %54
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull %53)
          to label %56 unwind label %104

56:                                               ; preds = %55
  %57 = getelementptr inbounds i8, ptr %8, i64 8
  %58 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %59 unwind label %.thread68

59:                                               ; preds = %56
  %60 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 5.000000e-01)
          to label %61 unwind label %100

61:                                               ; preds = %59
  %62 = extractvalue { double, double } %60, 0
  %63 = extractvalue { double, double } %60, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %58, double %62, double %63, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %64 unwind label %100

64:                                               ; preds = %61
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull %58)
          to label %65 unwind label %.thread68

65:                                               ; preds = %64
  %66 = getelementptr inbounds i8, ptr %8, i64 16
  %67 = invoke noundef ptr @_ZN3JPH12CapsuleShapenwEm(i64 noundef 56)
          to label %68 unwind label %.thread68

68:                                               ; preds = %65
  invoke void @_ZN3JPH12CapsuleShapeC2EffPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(56) %67, float noundef 0x3FC99999A0000000, float noundef 0x3FD3333340000000, ptr noundef null)
          to label %69 unwind label %102

69:                                               ; preds = %68
  invoke void @_ZN3JPH3RefINS_5ShapeEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %66, ptr noundef nonnull %67)
          to label %70 unwind label %.thread68

70:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %9) #10
  %71 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %8)
  %72 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %73 unwind label %108

73:                                               ; preds = %70
  %74 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %75 unwind label %108

75:                                               ; preds = %73
  %76 = extractvalue { double, double } %72, 1
  %77 = extractvalue { double, double } %72, 0
  %78 = extractvalue { double, double } %74, 0
  %79 = extractvalue { double, double } %74, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %9, ptr noundef %71, double %77, double %76, double %78, double %79, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %80 unwind label %108

80:                                               ; preds = %75
  %81 = getelementptr inbounds i8, ptr %9, i64 97
  store i8 35, ptr %81, align 1, !tbaa !17
  br label %.preheader

.preheader:                                       ; preds = %80, %110
  %indvars.iv58 = phi i64 [ 0, %80 ], [ %indvars.iv.next59, %110 ]
  %82 = trunc nuw nsw i64 %indvars.iv58 to i32
  %83 = uitofp nneg i32 %82 to float
  br label %111

84:                                               ; preds = %110
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %9) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %9) #10
  %85 = getelementptr inbounds i8, ptr %8, i64 16
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #10
  %86 = getelementptr inbounds i8, ptr %8, i64 8
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %86) #10
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret void

87:                                               ; preds = %13, %1
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %12) #10
  br label %138

89:                                               ; preds = %27, %23, %21, %17
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %93

91:                                               ; preds = %33
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %4) #10
  br label %93

93:                                               ; preds = %91, %89
  %.pn = phi { ptr, i32 } [ %92, %91 ], [ %90, %89 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #10
  br label %137

94:                                               ; preds = %44, %40, %38, %35
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %98

96:                                               ; preds = %50
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %6) #10
  br label %98

98:                                               ; preds = %96, %94
  %.pn40 = phi { ptr, i32 } [ %97, %96 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %6) #10
  br label %137

.thread:                                          ; preds = %54
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11SphereShapedlEPv(ptr noundef %53) #10
  br label %.loopexit

100:                                              ; preds = %61, %59
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %58) #10
  br label %.preheader52.preheader

102:                                              ; preds = %68
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH12CapsuleShapedlEPv(ptr noundef %67) #10
  br label %.preheader52.preheader

.thread68:                                        ; preds = %69, %65, %64, %56
  %.036.ph = phi ptr [ %57, %56 ], [ %57, %64 ], [ %66, %65 ], [ %66, %69 ]
  %lpad.thr_comm = landingpad { ptr, i32 }
          cleanup
  br label %.preheader52.preheader

104:                                              ; preds = %52, %55
  %lpad.thr_comm.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.preheader52.preheader:                           ; preds = %100, %102, %.thread68
  %.pn4266 = phi { ptr, i32 } [ %lpad.thr_comm, %.thread68 ], [ %101, %100 ], [ %103, %102 ]
  %.13765 = phi ptr [ %.036.ph, %.thread68 ], [ %57, %100 ], [ %66, %102 ]
  br label %.preheader52

.preheader52:                                     ; preds = %.preheader52.preheader, %.preheader52
  %105 = phi ptr [ %106, %.preheader52 ], [ %.13765, %.preheader52.preheader ]
  %106 = getelementptr inbounds i8, ptr %105, i64 -8
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #10
  %107 = icmp eq ptr %106, %8
  br i1 %107, label %.loopexit, label %.preheader52

108:                                              ; preds = %75, %73, %70
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.loopexit

110:                                              ; preds = %129
  %indvars.iv.next59 = add nuw nsw i64 %indvars.iv58, 1
  %exitcond61.not = icmp eq i64 %indvars.iv.next59, 20
  br i1 %exitcond61.not, label %84, label %.preheader, !llvm.loop !34

111:                                              ; preds = %.preheader, %129
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %129 ]
  %112 = mul nuw nsw i64 %indvars.iv, %indvars.iv58
  %113 = call noundef i64 @_ZSt4sizeIN3JPH3RefINS0_5ShapeEEELm3EEmRAT0__KT_(ptr noundef nonnull align 8 dereferenceable(24) %8) #10
  %114 = urem i64 %112, %113
  %115 = getelementptr inbounds [3 x %"class.JPH::Ref"], ptr %8, i64 0, i64 %114
  %116 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %115)
  invoke void @_ZN3JPH20BodyCreationSettings8SetShapeEPKNS_5ShapeE(ptr noundef nonnull align 16 dereferenceable(256) %9, ptr noundef %116)
          to label %117 unwind label %130

117:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #10
  %118 = call noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4002A000000000000000)
  %119 = fsub float %83, %118
  %120 = call noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4002A000000000000000)
  %121 = trunc nuw nsw i64 %indvars.iv to i32
  %122 = uitofp nneg i32 %121 to float
  %123 = fadd float %120, %122
  %124 = call noundef float @_ZN3JPH8literalsli2_rEe(x86_fp80 noundef 0xK4001A000000000000000)
  %125 = fneg float %124
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef %119, float noundef %123, float noundef %125)
          to label %126 unwind label %132

126:                                              ; preds = %117
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %9, ptr noundef nonnull align 16 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !36
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %127, ptr noundef nonnull align 16 dereferenceable(256) %9, i32 noundef 0)
          to label %129 unwind label %130

129:                                              ; preds = %126
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 10
  br i1 %exitcond.not, label %110, label %111, !llvm.loop !38

130:                                              ; preds = %126, %111
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %134

132:                                              ; preds = %117
  %133 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  br label %134

134:                                              ; preds = %132, %130
  %.pn44 = phi { ptr, i32 } [ %131, %130 ], [ %133, %132 ]
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %9) #10
  br label %.loopexit.loopexit

.loopexit.loopexit:                               ; preds = %134, %108
  %.pn44.pn = phi { ptr, i32 } [ %.pn44, %134 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %9) #10
  %135 = getelementptr inbounds i8, ptr %8, i64 16
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %135) #10
  %136 = getelementptr inbounds i8, ptr %8, i64 8
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %136) #10
  call void @_ZN3JPH3RefINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader52, %104, %.loopexit.loopexit, %.thread
  %.pn44.pn.pn = phi { ptr, i32 } [ %lpad.thr_comm.split-lp, %104 ], [ %99, %.thread ], [ %.pn44.pn, %.loopexit.loopexit ], [ %.pn4266, %.preheader52 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  br label %137

137:                                              ; preds = %.loopexit, %98, %93
  %.pn44.pn.pn.pn = phi { ptr, i32 } [ %.pn44.pn.pn, %.loopexit ], [ %.pn40, %98 ], [ %.pn, %93 ]
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #10
  br label %138

138:                                              ; preds = %137, %87
  %.pn44.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn44.pn.pn.pn, %137 ], [ %88, %87 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn44.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 noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #3 align 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 #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

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 nounwind uwtable
declare dso_local noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisZEv() local_unnamed_addr #3 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 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"="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 = { 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 #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 = { 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 = { 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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !7, i64 24}
!6 = !{!"_ZTS4Test", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !11, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !12, i64 0}
!12 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !7, i64 0, !13, i64 8, !14, i64 16, !13, i64 24, !15, i64 32, !7, i64 48}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !16, i64 0, !13, i64 8}
!16 = !{!"float", !8, i64 0}
!17 = !{!18, !27, i64 97}
!18 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !19, i64 0, !20, i64 16, !19, i64 32, !19, i64 48, !13, i64 64, !22, i64 72, !23, i64 80, !26, i64 96, !27, i64 97, !10, i64 98, !10, i64 99, !10, i64 100, !10, i64 101, !10, i64 102, !28, i64 103, !10, i64 104, !10, i64 105, !16, i64 108, !16, i64 112, !16, i64 116, !16, i64 120, !16, i64 124, !16, i64 128, !16, i64 132, !25, i64 136, !25, i64 140, !29, i64 144, !16, i64 148, !30, i64 160, !32, i64 240, !33, i64 248}
!19 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!20 = !{!"_ZTSN3JPH4QuatE", !21, i64 0}
!21 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!22 = !{!"short", !8, i64 0}
!23 = !{!"_ZTSN3JPH14CollisionGroupE", !24, i64 0, !25, i64 8, !25, i64 12}
!24 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !7, i64 0}
!25 = !{!"int", !8, i64 0}
!26 = !{!"_ZTSN3JPH11EMotionTypeE", !8, i64 0}
!27 = !{!"_ZTSN3JPH12EAllowedDOFsE", !8, i64 0}
!28 = !{!"_ZTSN3JPH14EMotionQualityE", !8, i64 0}
!29 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !8, i64 0}
!30 = !{!"_ZTSN3JPH14MassPropertiesE", !16, i64 0, !31, i64 16}
!31 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!32 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !7, i64 0}
!33 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !7, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{i64 0, i64 16, !37}
!37 = !{!8, !8, i64 0}
!38 = distinct !{!38, !35}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass