; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Shapes/MeshShapeUserDataTest.ll (ZN21MeshShapeUserDataTest10InitializeEv)

; 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.std::linear_congruential_engine" = type { i64 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Triangle" = type { [3 x %"class.JPH::Float3"], i32, i32 }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.7" }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon, i8, [7 x i8] }>
%union.anon = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.6 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.10", %"class.JPH::Array.13", %"class.JPH::Array.16", i32, float, i8, i32 }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.JPH::Array.16" = type { i64, i64, ptr }
%"class.JPH::Vec3" = type { %union.anon.19 }
%union.anon.19 = type { <4 x float> }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.20 }
%union.anon.20 = 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.21", %"class.JPH::RefConst.22" }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.21" = type { ptr }
%"class.JPH::RefConst.22" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%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 @_ZN21MeshShapeUserDataTest10InitializeEv(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.std::linear_congruential_engine", align 8
  %4 = alloca i32, align 4
  %5 = alloca [2 x %"class.JPH::Array"], align 16
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca %"class.JPH::Float3", align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %"class.JPH::Float3", align 4
  %17 = alloca %"class.JPH::Float3", align 4
  %18 = alloca %"class.JPH::Float3", align 4
  %19 = alloca %"class.JPH::Triangle", align 4
  %20 = alloca %"class.JPH::Triangle", align 4
  %21 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.JPH::MeshShapeSettings", align 8
  %27 = alloca %"class.JPH::Array.16", align 8
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Quat", align 16
  %30 = alloca %"class.JPH::Result", align 8
  %31 = alloca %"class.JPH::BodyCreationSettings", align 16
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::Quat", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::BodyID", align 4
  %36 = alloca %"class.JPH::BodyCreationSettings", align 16
  %37 = alloca %"class.JPH::Vec3", align 16
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca %"class.JPH::Quat", align 16
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca %"class.JPH::BodyID", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %42 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #11
  call void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3)
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #11
  store i32 0, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %5) #11
  %43 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %5, i32 0, i32 0
  %44 = getelementptr inbounds %"class.JPH::Array", ptr %43, i64 2
  br label %45

45:                                               ; preds = %45, %1
  %46 = phi ptr [ %43, %1 ], [ %47, %45 ]
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #11
  %47 = getelementptr inbounds %"class.JPH::Array", ptr %46, i64 1
  %48 = icmp eq ptr %47, %44
  br i1 %48, label %49, label %45

49:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #11
  store i32 -10, ptr %6, align 4, !tbaa !9
  br label %50

50:                                               ; preds = %130, %49
  %51 = load i32, ptr %6, align 4, !tbaa !9
  %52 = icmp slt i32 %51, 10
  br i1 %52, label %54, label %53

53:                                               ; preds = %50
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  br label %133

54:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  store i32 -10, ptr %8, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %98, %54
  %56 = load i32, ptr %8, align 4, !tbaa !9
  %57 = icmp slt i32 %56, 10
  br i1 %57, label %59, label %58

58:                                               ; preds = %55
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  br label %129

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  %60 = load i32, ptr %6, align 4, !tbaa !9
  %61 = sitofp i32 %60 to float
  %62 = fmul float 1.000000e+01, %61
  store float %62, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  %63 = load i32, ptr %8, align 4, !tbaa !9
  %64 = sitofp i32 %63 to float
  %65 = fmul float 1.000000e+01, %64
  store float %65, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %66 = load float, ptr %9, align 4, !tbaa !11
  %67 = fadd float %66, 1.000000e+01
  store float %67, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %68 = load float, ptr %10, align 4, !tbaa !11
  %69 = fadd float %68, 1.000000e+01
  store float %69, ptr %12, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 12, ptr %13) #11
  %70 = load float, ptr %9, align 4, !tbaa !11
  %71 = load float, ptr %10, align 4, !tbaa !11
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %13, float noundef %70, float noundef 0.000000e+00, float noundef %71)
          to label %72 unwind label %101

72:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 12, ptr %16) #11
  %73 = load float, ptr %11, align 4, !tbaa !11
  %74 = load float, ptr %10, align 4, !tbaa !11
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %16, float noundef %73, float noundef 0.000000e+00, float noundef %74)
          to label %75 unwind label %105

75:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #11
  %76 = load float, ptr %9, align 4, !tbaa !11
  %77 = load float, ptr %12, align 4, !tbaa !11
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %17, float noundef %76, float noundef 0.000000e+00, float noundef %77)
          to label %78 unwind label %109

78:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 12, ptr %18) #11
  %79 = load float, ptr %11, align 4, !tbaa !11
  %80 = load float, ptr %12, align 4, !tbaa !11
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %18, float noundef %79, float noundef 0.000000e+00, float noundef %80)
          to label %81 unwind label %113

81:                                               ; preds = %78
  %82 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %83 unwind label %113

83:                                               ; preds = %81
  %84 = and i64 %82, 1
  %85 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %5, i64 0, i64 %84
  call void @llvm.lifetime.start.p0(i64 44, ptr %19) #11
  %86 = load i32, ptr %4, align 4, !tbaa !9
  %87 = add i32 %86, 1
  store i32 %87, ptr %4, align 4, !tbaa !9
  invoke void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44) %19, ptr noundef nonnull align 4 dereferenceable(12) %13, ptr noundef nonnull align 4 dereferenceable(12) %17, ptr noundef nonnull align 4 dereferenceable(12) %18, i32 noundef 0, i32 noundef %86)
          to label %88 unwind label %117

88:                                               ; preds = %83
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %85, ptr noundef nonnull align 4 dereferenceable(44) %19)
          to label %89 unwind label %117

89:                                               ; preds = %88
  call void @llvm.lifetime.end.p0(i64 44, ptr %19) #11
  %90 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %91 unwind label %113

91:                                               ; preds = %89
  %92 = and i64 %90, 1
  %93 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %5, i64 0, i64 %92
  call void @llvm.lifetime.start.p0(i64 44, ptr %20) #11
  %94 = load i32, ptr %4, align 4, !tbaa !9
  %95 = add i32 %94, 1
  store i32 %95, ptr %4, align 4, !tbaa !9
  invoke void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44) %20, ptr noundef nonnull align 4 dereferenceable(12) %13, ptr noundef nonnull align 4 dereferenceable(12) %18, ptr noundef nonnull align 4 dereferenceable(12) %16, i32 noundef 0, i32 noundef %94)
          to label %96 unwind label %121

96:                                               ; preds = %91
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 4 dereferenceable(44) %20)
          to label %97 unwind label %121

97:                                               ; preds = %96
  call void @llvm.lifetime.end.p0(i64 44, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, 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 %98

98:                                               ; preds = %97
  %99 = load i32, ptr %8, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %8, align 4, !tbaa !9
  br label %55, !llvm.loop !13

101:                                              ; preds = %59
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %14, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %15, align 4
  br label %128

105:                                              ; preds = %72
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %14, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %15, align 4
  br label %127

109:                                              ; preds = %75
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %14, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %15, align 4
  br label %126

113:                                              ; preds = %89, %81, %78
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %14, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %15, align 4
  br label %125

117:                                              ; preds = %88, %83
  %118 = landingpad { ptr, i32 }
          cleanup
  %119 = extractvalue { ptr, i32 } %118, 0
  store ptr %119, ptr %14, align 8
  %120 = extractvalue { ptr, i32 } %118, 1
  store i32 %120, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %19) #11
  br label %125

121:                                              ; preds = %96, %91
  %122 = landingpad { ptr, i32 }
          cleanup
  %123 = extractvalue { ptr, i32 } %122, 0
  store ptr %123, ptr %14, align 8
  %124 = extractvalue { ptr, i32 } %122, 1
  store i32 %124, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 44, ptr %20) #11
  br label %125

125:                                              ; preds = %121, %117, %113
  call void @llvm.lifetime.end.p0(i64 12, ptr %18) #11
  br label %126

126:                                              ; preds = %125, %109
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #11
  br label %127

127:                                              ; preds = %126, %105
  call void @llvm.lifetime.end.p0(i64 12, ptr %16) #11
  br label %128

128:                                              ; preds = %127, %101
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, 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 @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  br label %353

129:                                              ; preds = %58
  br label %130

130:                                              ; preds = %129
  %131 = load i32, ptr %6, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %6, align 4, !tbaa !9
  br label %50, !llvm.loop !15

133:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 88, ptr %21) #11
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21)
          to label %134 unwind label %147

134:                                              ; preds = %133
  %135 = getelementptr inbounds i8, ptr %21, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %135)
          to label %136 unwind label %151

136:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  store ptr %5, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  %137 = load ptr, ptr %22, align 8, !tbaa !5
  %138 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %137, i64 0, i64 0
  store ptr %138, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %139 = load ptr, ptr %22, align 8, !tbaa !5
  %140 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %139, i64 0, i64 0
  %141 = getelementptr inbounds %"class.JPH::Array", ptr %140, i64 2
  store ptr %141, ptr %24, align 8, !tbaa !5
  br label %142

142:                                              ; preds = %198, %136
  %143 = load ptr, ptr %23, align 8, !tbaa !5
  %144 = load ptr, ptr %24, align 8, !tbaa !5
  %145 = icmp ne ptr %143, %144
  br i1 %145, label %155, label %146

146:                                              ; preds = %142
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %225

147:                                              ; preds = %133
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %14, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %15, align 4
  br label %352

151:                                              ; preds = %134
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %14, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %15, align 4
  br label %351

155:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %156 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %156, ptr %25, align 8, !tbaa !5
  %157 = load ptr, ptr %25, align 8, !tbaa !5
  %158 = invoke noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %157)
          to label %159 unwind label %201

159:                                              ; preds = %155
  %160 = load ptr, ptr %25, align 8, !tbaa !5
  %161 = invoke noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %160)
          to label %162 unwind label %201

162:                                              ; preds = %159
  invoke void @_ZSt7shuffleIPN3JPH8TriangleERSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEvT_S6_OT0_(ptr noundef %158, ptr noundef %161, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %163 unwind label %201

163:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 152, ptr %26) #11
  %164 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %26, ptr noundef nonnull align 8 dereferenceable(24) %164, ptr noundef %27)
          to label %165 unwind label %205

165:                                              ; preds = %163
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  %166 = getelementptr inbounds %"class.JPH::MeshShapeSettings", ptr %26, i32 0, i32 6
  store i8 1, ptr %166, align 8, !tbaa !16
  %167 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %168 unwind label %209

168:                                              ; preds = %165
  %169 = getelementptr inbounds %"class.JPH::Vec3", ptr %28, i32 0, i32 0
  %170 = getelementptr inbounds %union.anon.19, ptr %169, i32 0, i32 0
  %171 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 0
  %172 = extractvalue { double, double } %167, 0
  store double %172, ptr %171, align 16
  %173 = getelementptr inbounds { double, double }, ptr %170, i32 0, i32 1
  %174 = extractvalue { double, double } %167, 1
  store double %174, ptr %173, align 8
  %175 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %176 unwind label %209

176:                                              ; preds = %168
  %177 = getelementptr inbounds %"class.JPH::Quat", ptr %29, i32 0, i32 0
  %178 = getelementptr inbounds %"class.JPH::Vec4", ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds %union.anon.20, ptr %178, i32 0, i32 0
  %180 = getelementptr inbounds { double, double }, ptr %179, i32 0, i32 0
  %181 = extractvalue { double, double } %175, 0
  store double %181, ptr %180, align 16
  %182 = getelementptr inbounds { double, double }, ptr %179, i32 0, i32 1
  %183 = extractvalue { double, double } %175, 1
  store double %183, ptr %182, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %30) #11
  invoke void @_ZNK3JPH17MeshShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8 %30, ptr noundef nonnull align 8 dereferenceable(152) %26)
          to label %184 unwind label %213

184:                                              ; preds = %176
  %185 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %30)
          to label %186 unwind label %217

186:                                              ; preds = %184
  %187 = invoke noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %185)
          to label %188 unwind label %217

188:                                              ; preds = %186
  %189 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %190 = load double, ptr %189, align 16
  %191 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %192 = load double, ptr %191, align 8
  %193 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %194 = load double, ptr %193, align 16
  %195 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %196 = load double, ptr %195, align 8
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %21, double %190, double %192, double %194, double %196, ptr noundef %187, i32 noundef 0)
          to label %197 unwind label %217

197:                                              ; preds = %188
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %30) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #11
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %26) #11
  call void @llvm.lifetime.end.p0(i64 152, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %198

198:                                              ; preds = %197
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = getelementptr inbounds %"class.JPH::Array", ptr %199, i32 1
  store ptr %200, ptr %23, align 8, !tbaa !5
  br label %142

201:                                              ; preds = %162, %159, %155
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %14, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %15, align 4
  br label %224

205:                                              ; preds = %163
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %14, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %15, align 4
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #11
  br label %223

209:                                              ; preds = %168, %165
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %14, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %15, align 4
  br label %222

213:                                              ; preds = %176
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %14, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %15, align 4
  br label %221

217:                                              ; preds = %188, %186, %184
  %218 = landingpad { ptr, i32 }
          cleanup
  %219 = extractvalue { ptr, i32 } %218, 0
  store ptr %219, ptr %14, align 8
  %220 = extractvalue { ptr, i32 } %218, 1
  store i32 %220, ptr %15, align 4
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %30) #11
  br label %221

221:                                              ; preds = %217, %213
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #11
  br label %222

222:                                              ; preds = %221, %209
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %26) #11
  br label %223

223:                                              ; preds = %222, %205
  call void @llvm.lifetime.end.p0(i64 152, ptr %26) #11
  br label %224

224:                                              ; preds = %223, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %351

225:                                              ; preds = %146
  %226 = getelementptr inbounds %class.Test, ptr %42, i32 0, i32 3
  %227 = load ptr, ptr %226, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 256, ptr %31) #11
  %228 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %229 unwind label %329

229:                                              ; preds = %225
  %230 = getelementptr inbounds %"class.JPH::Vec3", ptr %32, i32 0, i32 0
  %231 = getelementptr inbounds %union.anon.19, ptr %230, i32 0, i32 0
  %232 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 0
  %233 = extractvalue { double, double } %228, 0
  store double %233, ptr %232, align 16
  %234 = getelementptr inbounds { double, double }, ptr %231, i32 0, i32 1
  %235 = extractvalue { double, double } %228, 1
  store double %235, ptr %234, align 8
  %236 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %237 unwind label %329

237:                                              ; preds = %229
  %238 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %239 = getelementptr inbounds %union.anon.19, ptr %238, i32 0, i32 0
  %240 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 0
  %241 = extractvalue { double, double } %236, 0
  store double %241, ptr %240, align 16
  %242 = getelementptr inbounds { double, double }, ptr %239, i32 0, i32 1
  %243 = extractvalue { double, double } %236, 1
  store double %243, ptr %242, align 8
  %244 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %245 = load double, ptr %244, align 16
  %246 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %247 = load double, ptr %246, align 8
  %248 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %245, double %247, float noundef 0x3FE921FB60000000)
          to label %249 unwind label %329

249:                                              ; preds = %237
  %250 = getelementptr inbounds %"class.JPH::Quat", ptr %33, i32 0, i32 0
  %251 = getelementptr inbounds %"class.JPH::Vec4", ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds %union.anon.20, ptr %251, i32 0, i32 0
  %253 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 0
  %254 = extractvalue { double, double } %248, 0
  store double %254, ptr %253, align 16
  %255 = getelementptr inbounds { double, double }, ptr %252, i32 0, i32 1
  %256 = extractvalue { double, double } %248, 1
  store double %256, ptr %255, align 8
  %257 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %258 = load double, ptr %257, align 16
  %259 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %260 = load double, ptr %259, align 8
  %261 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %262 = load double, ptr %261, align 16
  %263 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %264 = load double, ptr %263, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %31, ptr noundef %21, double %258, double %260, double %262, double %264, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %265 unwind label %329

265:                                              ; preds = %249
  %266 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %227, ptr noundef nonnull align 16 dereferenceable(256) %31, i32 noundef 1)
          to label %267 unwind label %333

267:                                              ; preds = %265
  %268 = getelementptr inbounds %"class.JPH::BodyID", ptr %35, i32 0, i32 0
  store i32 %266, ptr %268, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %31) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %31) #11
  call void @llvm.lifetime.start.p0(i64 256, ptr %36) #11
  %269 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %270 unwind label %338

270:                                              ; preds = %267
  %271 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 2.000000e+00)
          to label %272 unwind label %342

272:                                              ; preds = %270
  %273 = getelementptr inbounds %"class.JPH::Vec3", ptr %37, i32 0, i32 0
  %274 = getelementptr inbounds %union.anon.19, ptr %273, i32 0, i32 0
  %275 = getelementptr inbounds { double, double }, ptr %274, i32 0, i32 0
  %276 = extractvalue { double, double } %271, 0
  store double %276, ptr %275, align 16
  %277 = getelementptr inbounds { double, double }, ptr %274, i32 0, i32 1
  %278 = extractvalue { double, double } %271, 1
  store double %278, ptr %277, align 8
  %279 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %280 = load double, ptr %279, align 16
  %281 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %282 = load double, ptr %281, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %269, double %280, double %282, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %283 unwind label %342

283:                                              ; preds = %272
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0.000000e+00, float noundef 5.500000e+01, float noundef -5.000000e+01)
          to label %284 unwind label %338

284:                                              ; preds = %283
  %285 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %286 unwind label %338

286:                                              ; preds = %284
  %287 = getelementptr inbounds %"class.JPH::Vec3", ptr %40, i32 0, i32 0
  %288 = getelementptr inbounds %union.anon.19, ptr %287, i32 0, i32 0
  %289 = getelementptr inbounds { double, double }, ptr %288, i32 0, i32 0
  %290 = extractvalue { double, double } %285, 0
  store double %290, ptr %289, align 16
  %291 = getelementptr inbounds { double, double }, ptr %288, i32 0, i32 1
  %292 = extractvalue { double, double } %285, 1
  store double %292, ptr %291, align 8
  %293 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %294 = load double, ptr %293, align 16
  %295 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %296 = load double, ptr %295, align 8
  %297 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %294, double %296, float noundef 0x3FE921FB60000000)
          to label %298 unwind label %338

298:                                              ; preds = %286
  %299 = getelementptr inbounds %"class.JPH::Quat", ptr %39, i32 0, i32 0
  %300 = getelementptr inbounds %"class.JPH::Vec4", ptr %299, i32 0, i32 0
  %301 = getelementptr inbounds %union.anon.20, ptr %300, i32 0, i32 0
  %302 = getelementptr inbounds { double, double }, ptr %301, i32 0, i32 0
  %303 = extractvalue { double, double } %297, 0
  store double %303, ptr %302, align 16
  %304 = getelementptr inbounds { double, double }, ptr %301, i32 0, i32 1
  %305 = extractvalue { double, double } %297, 1
  store double %305, ptr %304, align 8
  %306 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %307 = load double, ptr %306, align 16
  %308 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %309 = load double, ptr %308, align 8
  %310 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %311 = load double, ptr %310, align 16
  %312 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %313 = load double, ptr %312, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %36, ptr noundef %269, double %307, double %309, double %311, double %313, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %314 unwind label %338

314:                                              ; preds = %298
  %315 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %36, i32 0, i32 17
  store float 0.000000e+00, ptr %315, align 4, !tbaa !37
  %316 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %36, i32 0, i32 15
  store i8 1, ptr %316, align 8, !tbaa !53
  %317 = getelementptr inbounds %class.Test, ptr %42, i32 0, i32 3
  %318 = load ptr, ptr %317, align 8, !tbaa !31
  %319 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %318, ptr noundef nonnull align 16 dereferenceable(256) %36, i32 noundef 0)
          to label %320 unwind label %346

320:                                              ; preds = %314
  %321 = getelementptr inbounds %"class.JPH::BodyID", ptr %41, i32 0, i32 0
  store i32 %319, ptr %321, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %36) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %36) #11
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr %21) #11
  %322 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %5, i32 0, i32 0
  %323 = getelementptr inbounds %"class.JPH::Array", ptr %322, i64 2
  br label %324

324:                                              ; preds = %324, %320
  %325 = phi ptr [ %323, %320 ], [ %326, %324 ]
  %326 = getelementptr inbounds %"class.JPH::Array", ptr %325, i64 -1
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %326) #11
  %327 = icmp eq ptr %326, %322
  br i1 %327, label %328, label %324

328:                                              ; preds = %324
  call void @llvm.lifetime.end.p0(i64 48, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #11
  ret void

329:                                              ; preds = %249, %237, %229, %225
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %14, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %15, align 4
  br label %337

333:                                              ; preds = %265
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %14, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %15, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %31) #11
  br label %337

337:                                              ; preds = %333, %329
  call void @llvm.lifetime.end.p0(i64 256, ptr %31) #11
  br label %351

338:                                              ; preds = %298, %286, %284, %283, %267
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %14, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %15, align 4
  br label %350

342:                                              ; preds = %272, %270
  %343 = landingpad { ptr, i32 }
          cleanup
  %344 = extractvalue { ptr, i32 } %343, 0
  store ptr %344, ptr %14, align 8
  %345 = extractvalue { ptr, i32 } %343, 1
  store i32 %345, ptr %15, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %269) #11
  br label %350

346:                                              ; preds = %314
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %14, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %15, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %36) #11
  br label %350

350:                                              ; preds = %346, %342, %338
  call void @llvm.lifetime.end.p0(i64 256, ptr %36) #11
  br label %351

351:                                              ; preds = %350, %337, %224, %151
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #11
  br label %352

352:                                              ; preds = %351, %147
  call void @llvm.lifetime.end.p0(i64 88, ptr %21) #11
  br label %353

353:                                              ; preds = %352, %128
  %354 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %5, i32 0, i32 0
  %355 = getelementptr inbounds %"class.JPH::Array", ptr %354, i64 2
  br label %356

356:                                              ; preds = %356, %353
  %357 = phi ptr [ %355, %353 ], [ %358, %356 ]
  %358 = getelementptr inbounds %"class.JPH::Array", ptr %357, i64 -1
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %358) #11
  %359 = icmp eq ptr %358, %354
  br i1 %359, label %360, label %356

360:                                              ; preds = %356
  call void @llvm.lifetime.end.p0(i64 48, ptr %5) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #11
  br label %361

361:                                              ; preds = %360
  %362 = load ptr, ptr %14, align 8
  %363 = load i32, ptr %15, align 4
  %364 = insertvalue { ptr, i32 } poison, ptr %362, 0
  %365 = insertvalue { ptr, i32 } %364, i32 %363, 1
  resume { ptr, i32 } %365
}

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), i32 noundef, i32 noundef) unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

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

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

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

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

declare void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #6

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

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) #6

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

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

declare void @_ZNK3JPH17MeshShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #6

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_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 #4 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) #7 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) #9 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #10 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 @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

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

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

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


; 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.std::linear_congruential_engine" = type { i64 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Triangle" = type { [3 x %"class.JPH::Float3"], i32, i32 }
%"class.JPH::StaticCompoundShapeSettings" = type { %"class.JPH::CompoundShapeSettings" }
%"class.JPH::CompoundShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.7" }
%"class.JPH::ShapeSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget", i64, %"class.JPH::Result" }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Result" = type <{ %union.anon, i8, [7 x i8] }>
%union.anon = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.6 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.JPH::Array.7" = type { i64, i64, ptr }
%"class.JPH::MeshShapeSettings" = type { %"class.JPH::ShapeSettings", %"class.JPH::Array.10", %"class.JPH::Array.13", %"class.JPH::Array.16", i32, float, i8, i32 }
%"class.JPH::Array.10" = type { i64, i64, ptr }
%"class.JPH::Array.13" = type { i64, i64, ptr }
%"class.JPH::Array.16" = type { i64, i64, 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.21", %"class.JPH::RefConst.22" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.19 }
%union.anon.19 = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst", i32, i32 }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.21" = type { ptr }
%"class.JPH::RefConst.22" = 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 @_ZN21MeshShapeUserDataTest10InitializeEv(ptr nocapture noundef nonnull readonly align 8 dereferenceable(112) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
.preheader78.preheader:
  %1 = alloca %"class.std::linear_congruential_engine", align 8
  %2 = alloca [2 x %"class.JPH::Array"], align 16
  %3 = alloca %"class.JPH::Float3", align 4
  %4 = alloca %"class.JPH::Float3", align 4
  %5 = alloca %"class.JPH::Float3", align 4
  %6 = alloca %"class.JPH::Float3", align 4
  %7 = alloca %"class.JPH::Triangle", align 4
  %8 = alloca %"class.JPH::Triangle", align 4
  %9 = alloca %"class.JPH::StaticCompoundShapeSettings", align 8
  %10 = alloca %"class.JPH::MeshShapeSettings", align 8
  %11 = alloca %"class.JPH::Array.16", align 8
  %12 = alloca %"class.JPH::Result", align 8
  %13 = alloca %"class.JPH::BodyCreationSettings", align 16
  %14 = alloca %"class.JPH::BodyCreationSettings", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %1) #11
  call void @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %2) #11
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #11
  %.ptr.1 = getelementptr inbounds i8, ptr %2, i64 24
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1) #11
  br label %.preheader78

.preheader78:                                     ; preds = %.preheader78.preheader, %20
  %.086 = phi i32 [ %37, %20 ], [ 0, %.preheader78.preheader ]
  %.04585 = phi i32 [ %21, %20 ], [ -10, %.preheader78.preheader ]
  %16 = sitofp i32 %.04585 to float
  %17 = fmul float %16, 1.000000e+01
  %18 = fadd float %17, 1.000000e+01
  br label %22

19:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %9) #11
  invoke void @_ZN3JPH27StaticCompoundShapeSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9)
          to label %46 unwind label %51

20:                                               ; preds = %36
  %21 = add nsw i32 %.04585, 1
  %exitcond89.not = icmp eq i32 %21, 10
  br i1 %exitcond89.not, label %19, label %.preheader78, !llvm.loop !5

22:                                               ; preds = %.preheader78, %36
  %.184 = phi i32 [ %.086, %.preheader78 ], [ %37, %36 ]
  %.04683 = phi i32 [ -10, %.preheader78 ], [ %38, %36 ]
  %23 = sitofp i32 %.04683 to float
  %24 = fmul float %23, 1.000000e+01
  %25 = fadd float %24, 1.000000e+01
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #11
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %3, float noundef %17, float noundef 0.000000e+00, float noundef %24)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #11
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %4, float noundef %18, float noundef 0.000000e+00, float noundef %24)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %5) #11
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %5, float noundef %17, float noundef 0.000000e+00, float noundef %25)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #11
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %6, float noundef %18, float noundef 0.000000e+00, float noundef %25)
  %26 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %27 unwind label %39

27:                                               ; preds = %22
  %28 = and i64 %26, 1
  %29 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %2, i64 0, i64 %28
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %7) #11
  %30 = add i32 %.184, 1
  call void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44) %7, ptr noundef nonnull align 4 dereferenceable(12) %3, ptr noundef nonnull align 4 dereferenceable(12) %5, ptr noundef nonnull align 4 dereferenceable(12) %6, i32 noundef 0, i32 noundef %.184)
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef nonnull align 4 dereferenceable(44) %7)
          to label %31 unwind label %41

31:                                               ; preds = %27
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %7) #11
  %32 = invoke noundef i64 @_ZNSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEclEv(ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %33 unwind label %39

33:                                               ; preds = %31
  %34 = and i64 %32, 1
  %35 = getelementptr inbounds [2 x %"class.JPH::Array"], ptr %2, i64 0, i64 %34
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %8) #11
  call void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44) %8, ptr noundef nonnull align 4 dereferenceable(12) %3, ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(12) %4, i32 noundef 0, i32 noundef %30)
  invoke void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 4 dereferenceable(44) %8)
          to label %36 unwind label %43

36:                                               ; preds = %33
  %37 = add i32 %.184, 2
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #11
  %38 = add nsw i32 %.04683, 1
  %exitcond.not = icmp eq i32 %38, 10
  br i1 %exitcond.not, label %20, label %22, !llvm.loop !7

39:                                               ; preds = %31, %22
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %45

41:                                               ; preds = %27
  %42 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %7) #11
  br label %45

43:                                               ; preds = %33
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %8) #11
  br label %45

45:                                               ; preds = %43, %41, %39
  %.pn75 = phi { ptr, i32 } [ %44, %43 ], [ %40, %39 ], [ %42, %41 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #11
  br label %156

46:                                               ; preds = %19
  %47 = getelementptr inbounds i8, ptr %9, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %.preheader unwind label %53

.preheader:                                       ; preds = %46
  %48 = getelementptr inbounds i8, ptr %10, i64 144
  %49 = call noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2)
  %50 = call noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2)
  invoke void @_ZSt7shuffleIPN3JPH8TriangleERSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEvT_S6_OT0_(ptr noundef %49, ptr noundef %50, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %55 unwind label %90

51:                                               ; preds = %19
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %155

53:                                               ; preds = %46
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %154

55:                                               ; preds = %.preheader
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %10) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #11
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %10, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull %11)
          to label %56 unwind label %92

56:                                               ; preds = %55
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #11
  store i8 1, ptr %48, align 8, !tbaa !8
  %57 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %58 unwind label %94

58:                                               ; preds = %56
  %59 = extractvalue { double, double } %57, 0
  %60 = extractvalue { double, double } %57, 1
  %61 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %62 unwind label %94

62:                                               ; preds = %58
  %63 = extractvalue { double, double } %61, 0
  %64 = extractvalue { double, double } %61, 1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %12) #11
  invoke void @_ZNK3JPH17MeshShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %12, ptr noundef nonnull align 8 dereferenceable(152) %10)
          to label %65 unwind label %96

65:                                               ; preds = %62
  %66 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %12)
          to label %67 unwind label %98

67:                                               ; preds = %65
  %68 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %66)
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %9, double %59, double %60, double %63, double %64, ptr noundef %68, i32 noundef 0)
          to label %69 unwind label %98

69:                                               ; preds = %67
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %12) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #11
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %10) #11
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %10) #11
  %70 = call noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1)
  %71 = call noundef ptr @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1)
  invoke void @_ZSt7shuffleIPN3JPH8TriangleERSt26linear_congruential_engineImLm16807ELm0ELm2147483647EEEvT_S6_OT0_(ptr noundef %70, ptr noundef %71, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %72 unwind label %90

72:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %10) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, i8 0, i64 24, i1 false)
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #11
  invoke void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152) %10, ptr noundef nonnull align 8 dereferenceable(24) %.ptr.1, ptr noundef nonnull %11)
          to label %73 unwind label %92

73:                                               ; preds = %72
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #11
  store i8 1, ptr %48, align 8, !tbaa !8
  %74 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %75 unwind label %94

75:                                               ; preds = %73
  %76 = extractvalue { double, double } %74, 0
  %77 = extractvalue { double, double } %74, 1
  %78 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %79 unwind label %94

79:                                               ; preds = %75
  %80 = extractvalue { double, double } %78, 0
  %81 = extractvalue { double, double } %78, 1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %12) #11
  invoke void @_ZNK3JPH17MeshShapeSettings6CreateEv(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Result") align 8 %12, ptr noundef nonnull align 8 dereferenceable(152) %10)
          to label %82 unwind label %96

82:                                               ; preds = %79
  %83 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33) %12)
          to label %84 unwind label %98

84:                                               ; preds = %82
  %85 = call noundef ptr @_ZNK3JPH3RefINS_5ShapeEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %83)
  invoke void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88) %9, double %76, double %77, double %80, double %81, ptr noundef %85, i32 noundef 0)
          to label %86 unwind label %98

86:                                               ; preds = %84
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %12) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #11
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %10) #11
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %10) #11
  %87 = getelementptr inbounds i8, ptr %0, i64 24
  %88 = load ptr, ptr %87, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %13) #11
  %89 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %103 unwind label %142

90:                                               ; preds = %69, %.preheader
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %154

92:                                               ; preds = %72, %55
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #11
  br label %102

94:                                               ; preds = %75, %73, %58, %56
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %101

96:                                               ; preds = %79, %62
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %100

98:                                               ; preds = %84, %82, %67, %65
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH6ResultINS_3RefINS_5ShapeEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(33) %12) #11
  br label %100

100:                                              ; preds = %98, %96
  %.pn68 = phi { ptr, i32 } [ %99, %98 ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #11
  br label %101

101:                                              ; preds = %100, %94
  %.pn68.pn = phi { ptr, i32 } [ %.pn68, %100 ], [ %95, %94 ]
  call void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %10) #11
  br label %102

102:                                              ; preds = %101, %92
  %.pn68.pn.pn = phi { ptr, i32 } [ %.pn68.pn, %101 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %10) #11
  br label %154

103:                                              ; preds = %86
  %104 = extractvalue { double, double } %89, 0
  %105 = extractvalue { double, double } %89, 1
  %106 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %107 unwind label %142

107:                                              ; preds = %103
  %108 = extractvalue { double, double } %106, 0
  %109 = extractvalue { double, double } %106, 1
  %110 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %108, double %109, float noundef 0x3FE921FB60000000)
          to label %111 unwind label %142

111:                                              ; preds = %107
  %112 = extractvalue { double, double } %110, 0
  %113 = extractvalue { double, double } %110, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %13, ptr noundef nonnull %9, double %104, double %105, double %112, double %113, i8 noundef zeroext 0, i16 noundef zeroext 0)
          to label %114 unwind label %142

114:                                              ; preds = %111
  %115 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %88, ptr noundef nonnull align 16 dereferenceable(256) %13, i32 noundef 1)
          to label %116 unwind label %144

116:                                              ; preds = %114
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %13) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %14) #11
  %117 = invoke noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
          to label %118 unwind label %147

118:                                              ; preds = %116
  %119 = invoke { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef 2.000000e+00)
          to label %120 unwind label %149

120:                                              ; preds = %118
  %121 = extractvalue { double, double } %119, 0
  %122 = extractvalue { double, double } %119, 1
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %117, double %121, double %122, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %123 unwind label %149

123:                                              ; preds = %120
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0.000000e+00, float noundef 5.500000e+01, float noundef -5.000000e+01)
  %124 = invoke { double, double } @_ZN3JPH4Vec36sAxisXEv()
          to label %125 unwind label %147

125:                                              ; preds = %123
  %126 = extractvalue { double, double } %124, 0
  %127 = extractvalue { double, double } %124, 1
  %128 = invoke { double, double } @_ZN3JPH4Quat9sRotationENS_4Vec3Ef(double %126, double %127, float noundef 0x3FE921FB60000000)
          to label %129 unwind label %147

129:                                              ; preds = %125
  %130 = extractvalue { double, double } %128, 0
  %131 = extractvalue { double, double } %128, 1
  %132 = load double, ptr %15, align 16
  %133 = getelementptr inbounds i8, ptr %15, i64 8
  %134 = load double, ptr %133, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %14, ptr noundef nonnull %117, double %132, double %134, double %130, double %131, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %135 unwind label %147

135:                                              ; preds = %129
  %136 = getelementptr inbounds i8, ptr %14, i64 108
  store float 0.000000e+00, ptr %136, align 4, !tbaa !34
  %137 = getelementptr inbounds i8, ptr %14, i64 104
  store i8 1, ptr %137, align 8, !tbaa !50
  %138 = load ptr, ptr %87, align 8, !tbaa !28
  %139 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %138, ptr noundef nonnull align 16 dereferenceable(256) %14, i32 noundef 0)
          to label %140 unwind label %151

140:                                              ; preds = %135
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #11
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #11
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %9) #11
  %141 = getelementptr inbounds i8, ptr %2, i64 24
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %141) #11
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %2) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1) #11
  ret void

142:                                              ; preds = %111, %107, %103, %86
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %146

144:                                              ; preds = %114
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %13) #11
  br label %146

146:                                              ; preds = %144, %142
  %.pn = phi { ptr, i32 } [ %145, %144 ], [ %143, %142 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %13) #11
  br label %154

147:                                              ; preds = %129, %125, %123, %116
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %153

149:                                              ; preds = %120, %118
  %150 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %117) #11
  br label %153

151:                                              ; preds = %135
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %14) #11
  br label %153

153:                                              ; preds = %151, %149, %147
  %.pn66 = phi { ptr, i32 } [ %152, %151 ], [ %148, %147 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %14) #11
  br label %154

154:                                              ; preds = %90, %102, %153, %146, %53
  %.pn68.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn66, %153 ], [ %.pn, %146 ], [ %54, %53 ], [ %.pn68.pn.pn, %102 ], [ %91, %90 ]
  call void @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %9) #11
  br label %155

155:                                              ; preds = %154, %51
  %.pn68.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn68.pn.pn.pn.pn, %154 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %9) #11
  br label %156

156:                                              ; preds = %155, %45
  %.pn75.pn = phi { ptr, i32 } [ %.pn75, %45 ], [ %.pn68.pn.pn.pn.pn.pn, %155 ]
  %157 = getelementptr inbounds i8, ptr %2, i64 24
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %157) #11
  call void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %2) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1) #11
  resume { ptr, i32 } %.pn75.pn
}

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8TriangleC2ERKNS_6Float3ES3_S3_jj(ptr noundef nonnull align 4 dereferenceable(44), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12), i32 noundef, i32 noundef) unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_13ShapeSettingsEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

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

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

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

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

declare void @_ZN3JPH17MeshShapeSettingsC1ERKNS_5ArrayINS_8TriangleENS_12STLAllocatorIS2_EEEENS1_INS_8RefConstINS_15PhysicsMaterialEEENS3_ISA_EEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #6

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

declare void @_ZN3JPH21CompoundShapeSettings8AddShapeENS_4Vec3ENS_4QuatEPKNS_5ShapeEj(ptr noundef nonnull align 8 dereferenceable(88), double, double, double, double, ptr noundef, i32 noundef) local_unnamed_addr #6

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

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

declare void @_ZNK3JPH17MeshShapeSettings6CreateEv(ptr dead_on_unwind writable sret(%"class.JPH::Result") align 8, ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3JPH6ResultINS_3RefINS_5ShapeEEEE3GetEv(ptr noundef nonnull align 8 dereferenceable(33)) local_unnamed_addr #1 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 #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17MeshShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #4 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 #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_13ShapeSettingsENS_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 #4 align 2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) local_unnamed_addr #7 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 #9 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #10 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 @_ZN3JPH21CompoundShapeSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5ArrayINS_8TriangleENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = distinct !{!7, !6}
!8 = !{!9, !26, i64 144}
!9 = !{!"_ZTSN3JPH17MeshShapeSettingsE", !10, i64 0, !21, i64 64, !23, i64 88, !24, i64 112, !15, i64 136, !25, i64 140, !26, i64 144, !27, i64 148}
!10 = !{!"_ZTSN3JPH13ShapeSettingsE", !11, i64 0, !12, i64 8, !18, i64 16, !19, i64 24}
!11 = !{!"_ZTSN3JPH18SerializableObjectE"}
!12 = !{!"_ZTSN3JPH9RefTargetINS_13ShapeSettingsEEE", !13, i64 0}
!13 = !{!"_ZTSSt6atomicIjE", !14, i64 0}
!14 = !{!"_ZTSSt13__atomic_baseIjE", !15, i64 0}
!15 = !{!"int", !16, i64 0}
!16 = !{!"omnipotent char", !17, i64 0}
!17 = !{!"Simple C++ TBAA"}
!18 = !{!"long", !16, i64 0}
!19 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEEE", !16, i64 0, !20, i64 32}
!20 = !{!"_ZTSN3JPH6ResultINS_3RefINS_5ShapeEEEE6EStateE", !16, i64 0}
!21 = !{!"_ZTSN3JPH5ArrayINS_6Float3ENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!22 = !{!"any pointer", !16, i64 0}
!23 = !{!"_ZTSN3JPH5ArrayINS_15IndexedTriangleENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!24 = !{!"_ZTSN3JPH5ArrayINS_8RefConstINS_15PhysicsMaterialEEENS_12STLAllocatorIS3_EEEE", !18, i64 0, !18, i64 8, !22, i64 16}
!25 = !{!"float", !16, i64 0}
!26 = !{!"bool", !16, i64 0}
!27 = !{!"_ZTSN3JPH17MeshShapeSettings13EBuildQualityE", !16, i64 0}
!28 = !{!29, !22, i64 24}
!29 = !{!"_ZTS4Test", !22, i64 8, !22, i64 16, !22, i64 24, !22, i64 32, !22, i64 40, !26, i64 48, !30, i64 56}
!30 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !31, i64 0}
!31 = !{!"_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", !22, i64 0, !18, i64 8, !32, i64 16, !18, i64 24, !33, i64 32, !22, i64 48}
!32 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !22, i64 0}
!33 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !25, i64 0, !18, i64 8}
!34 = !{!35, !25, i64 108}
!35 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !36, i64 0, !37, i64 16, !36, i64 32, !36, i64 48, !18, i64 64, !39, i64 72, !40, i64 80, !42, i64 96, !43, i64 97, !26, i64 98, !26, i64 99, !26, i64 100, !26, i64 101, !26, i64 102, !44, i64 103, !26, i64 104, !26, i64 105, !25, i64 108, !25, i64 112, !25, i64 116, !25, i64 120, !25, i64 124, !25, i64 128, !25, i64 132, !15, i64 136, !15, i64 140, !45, i64 144, !25, i64 148, !46, i64 160, !48, i64 240, !49, i64 248}
!36 = !{!"_ZTSN3JPH4Vec3E", !16, i64 0}
!37 = !{!"_ZTSN3JPH4QuatE", !38, i64 0}
!38 = !{!"_ZTSN3JPH4Vec4E", !16, i64 0}
!39 = !{!"short", !16, i64 0}
!40 = !{!"_ZTSN3JPH14CollisionGroupE", !41, i64 0, !15, i64 8, !15, i64 12}
!41 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !22, i64 0}
!42 = !{!"_ZTSN3JPH11EMotionTypeE", !16, i64 0}
!43 = !{!"_ZTSN3JPH12EAllowedDOFsE", !16, i64 0}
!44 = !{!"_ZTSN3JPH14EMotionQualityE", !16, i64 0}
!45 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !16, i64 0}
!46 = !{!"_ZTSN3JPH14MassPropertiesE", !25, i64 0, !47, i64 16}
!47 = !{!"_ZTSN3JPH5Mat44E", !16, i64 0}
!48 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !22, i64 0}
!49 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !22, i64 0}
!50 = !{!35, !26, i64 104}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass