; LLVM IR from jrouwe/JoltPhysics :: TestFramework/Renderer/DebugRendererImp.ll (ZN16DebugRendererImpC2EP8RendererPK4Font)

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

%"class.JPH::Color" = type { %union.anon.0 }
%union.anon.0 = type { i32 }
%"class.JPH::Ref.49" = type { ptr }
%"class.JPH::Ref.50" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"class.JPH::DebugRenderer::Vertex" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float2", %"class.JPH::Color" }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Float2" = type { float, float }
%"class.JPH::Ref.17" = type { ptr }
%class.DebugRendererImp = type { %"class.JPH::DebugRenderer", ptr, %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.JPH::Mutex", %"class.JPH::Ref.17", %"class.JPH::UnorderedMap.37", %"class.JPH::UnorderedMap.37", %"class.JPH::UnorderedMap.37", %"class.JPH::UnorderedMap.37", i32, [2 x %"class.JPH::Ref.41"], %"class.JPH::Ref.42", ptr, ptr, ptr, %"class.JPH::AABox", %"class.JPH::Array.43", %"class.JPH::Mutex", %"class.JPH::RefConst", %"class.JPH::Array.46", %"class.JPH::Mutex", %"class.std::unique_ptr" }
%"class.JPH::DebugRenderer" = type { ptr, %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::Ref", %"class.JPH::UnorderedMap", %"class.JPH::UnorderedMap", %"class.JPH::UnorderedMap.1", %"class.JPH::UnorderedMap.1", %"class.JPH::UnorderedMap.5", %"class.JPH::UnorderedMap.5", %"class.JPH::UnorderedMap.9", %"class.JPH::UnorderedMap.9" }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::UnorderedMap" = type { %"class.JPH::HashTable.base", [4 x i8] }
%"class.JPH::HashTable.base" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::UnorderedMap.1" = type { %"class.JPH::HashTable.base.3", [4 x i8] }
%"class.JPH::HashTable.base.3" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::UnorderedMap.5" = type { %"class.JPH::HashTable.base.7", [4 x i8] }
%"class.JPH::HashTable.base.7" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::UnorderedMap.9" = type { %"class.JPH::HashTable.base.11", [4 x i8] }
%"class.JPH::HashTable.base.11" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::UnorderedMap.37" = type { %"class.JPH::HashTable.base.39", [4 x i8] }
%"class.JPH::HashTable.base.39" = type <{ ptr, ptr, i32, i32, i32 }>
%"class.JPH::Ref.41" = type { ptr }
%"class.JPH::Ref.42" = type { ptr }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Array.43" = type { i64, i64, ptr }
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::Mutex" = type { %"class.std::mutex", %"class.std::thread::id" }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::thread::id" = type { i64 }

@_ZN3JPH5Color6sWhiteE = external global %"class.JPH::Color", align 4
@_ZTV16DebugRendererImp = external dso_local unnamed_addr constant { [10 x ptr] }, align 8
@__const.DebugRendererImp.line_vertex_desc = external hidden unnamed_addr constant [2 x i32], align 4
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@__const.DebugRendererImp.triangles_vertex_desc = external hidden unnamed_addr constant [7 x i32], align 16
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH13DebugRendererD2Ev(ptr noundef nonnull align 8 dereferenceable(320)) 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 void @_ZN3JPH13DebugRenderer10InitializeEv(ptr noundef nonnull align 8 dereferenceable(320)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #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 uwtable
declare dso_local void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16DebugRendererImpC2EP8RendererPK4Font(ptr noundef nonnull align 16 dereferenceable(816) %0, ptr noundef %1, ptr noundef %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca [2 x i32], align 4
  %10 = alloca %"class.JPH::Ref.49", align 8
  %11 = alloca %"class.JPH::Ref.50", align 8
  %12 = alloca %"class.std::unique_ptr", align 8
  %13 = alloca [7 x i32], align 16
  %14 = alloca %"class.JPH::Ref.49", align 8
  %15 = alloca %"class.JPH::Ref.50", align 8
  %16 = alloca %"class.std::unique_ptr", align 8
  %17 = alloca %"class.std::unique_ptr", align 8
  %18 = alloca %"class.std::unique_ptr", align 8
  %19 = alloca %"class.JPH::Ref.49", align 8
  %20 = alloca %"class.JPH::Ref.50", align 8
  %21 = alloca %"class.std::unique_ptr", align 8
  %22 = alloca %"class.std::unique_ptr", align 8
  %23 = alloca %"class.std::unique_ptr", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.JPH::DebugRenderer::Vertex", align 4
  %26 = alloca [3 x i32], align 4
  %27 = alloca %"class.JPH::Ref.17", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %28 = load ptr, ptr %4, align 8
  call void @_ZN3JPH13DebugRendererC2Ev(ptr noundef nonnull align 8 dereferenceable(320) %28)
  store ptr getelementptr inbounds inrange(-16, 64) ({ [10 x ptr] }, ptr @_ZTV16DebugRendererImp, i32 0, i32 0, i32 2), ptr %28, align 16, !tbaa !9
  %29 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %30 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %30, ptr %29, align 16, !tbaa !11
  %31 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 2
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #7
  %32 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 3
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #7
  %33 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 4
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  %34 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 5
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  %35 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 6
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #7
  %36 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #7
  %37 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 8
  call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %37) #7
  %38 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 9
  invoke void @_ZN3JPH3RefINS_16RefTargetVirtualEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %39 unwind label %214

39:                                               ; preds = %3
  %40 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 10
  call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %40) #7
  %41 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 11
  call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %41) #7
  %42 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 12
  call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %42) #7
  %43 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 13
  call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %43) #7
  %44 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 14
  store i32 0, ptr %44, align 16, !tbaa !44
  %45 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 15
  %46 = getelementptr inbounds [2 x %"class.JPH::Ref.41"], ptr %45, i32 0, i32 0
  %47 = getelementptr inbounds %"class.JPH::Ref.41", ptr %46, i64 2
  br label %48

48:                                               ; preds = %50, %39
  %49 = phi ptr [ %46, %39 ], [ %51, %50 ]
  invoke void @_ZN3JPH3RefI15RenderInstancesEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %50 unwind label %218

50:                                               ; preds = %48
  %51 = getelementptr inbounds %"class.JPH::Ref.41", ptr %49, i64 1
  %52 = icmp eq ptr %51, %47
  br i1 %52, label %53, label %48

53:                                               ; preds = %50
  %54 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 16
  invoke void @_ZN3JPH3RefI15RenderPrimitiveEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %55 unwind label %228

55:                                               ; preds = %53
  %56 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 17
  store ptr null, ptr %56, align 16, !tbaa !45
  %57 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 18
  store ptr null, ptr %57, align 8, !tbaa !46
  %58 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 19
  store ptr null, ptr %58, align 16, !tbaa !47
  %59 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 20
  invoke void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %59)
          to label %60 unwind label %232

60:                                               ; preds = %55
  %61 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 21
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #7
  %62 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 22
  call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %62) #7
  %63 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 23
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN3JPH8RefConstI4FontEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef %64)
          to label %65 unwind label %236

65:                                               ; preds = %60
  %66 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 24
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #7
  %67 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 25
  call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %67) #7
  %68 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 26
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 @__const.DebugRendererImp.line_vertex_desc, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %69 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %70 = load ptr, ptr %69, align 16, !tbaa !11
  %71 = load ptr, ptr %70, align 16, !tbaa !9
  %72 = getelementptr inbounds ptr, ptr %71, i64 9
  %73 = load ptr, ptr %72, align 8
  invoke void %73(ptr dead_on_unwind writable sret(%"class.JPH::Ref.49") align 8 %10, ptr noundef nonnull align 16 dereferenceable(832) %70, ptr noundef @.str.12)
          to label %74 unwind label %240

74:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %75 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %76 = load ptr, ptr %75, align 16, !tbaa !11
  %77 = load ptr, ptr %76, align 16, !tbaa !9
  %78 = getelementptr inbounds ptr, ptr %77, i64 10
  %79 = load ptr, ptr %78, align 8
  invoke void %79(ptr dead_on_unwind writable sret(%"class.JPH::Ref.50") align 8 %11, ptr noundef nonnull align 16 dereferenceable(832) %76, ptr noundef @.str.13)
          to label %80 unwind label %244

80:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %81 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %82 = load ptr, ptr %81, align 16, !tbaa !11
  %83 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %84 unwind label %248

84:                                               ; preds = %80
  %85 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 0
  %86 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(8) %9) #7
  %87 = trunc i64 %86 to i32
  %88 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %89 unwind label %248

89:                                               ; preds = %84
  %90 = load ptr, ptr %82, align 16, !tbaa !9
  %91 = getelementptr inbounds ptr, ptr %90, i64 11
  %92 = load ptr, ptr %91, align 8
  invoke void %92(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %12, ptr noundef nonnull align 16 dereferenceable(832) %82, ptr noundef %83, ptr noundef %85, i32 noundef %87, ptr noundef %88, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %93 unwind label %248

93:                                               ; preds = %89
  %94 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 26
  %95 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 28, ptr %13) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %13, ptr align 16 @__const.DebugRendererImp.triangles_vertex_desc, i64 28, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %96 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %97 = load ptr, ptr %96, align 16, !tbaa !11
  %98 = load ptr, ptr %97, align 16, !tbaa !9
  %99 = getelementptr inbounds ptr, ptr %98, i64 9
  %100 = load ptr, ptr %99, align 8
  invoke void %100(ptr dead_on_unwind writable sret(%"class.JPH::Ref.49") align 8 %14, ptr noundef nonnull align 16 dereferenceable(832) %97, ptr noundef @.str.14)
          to label %101 unwind label %252

101:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %102 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %103 = load ptr, ptr %102, align 16, !tbaa !11
  %104 = load ptr, ptr %103, align 16, !tbaa !9
  %105 = getelementptr inbounds ptr, ptr %104, i64 10
  %106 = load ptr, ptr %105, align 8
  invoke void %106(ptr dead_on_unwind writable sret(%"class.JPH::Ref.50") align 8 %15, ptr noundef nonnull align 16 dereferenceable(832) %103, ptr noundef @.str.15)
          to label %107 unwind label %256

107:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %108 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %109 = load ptr, ptr %108, align 16, !tbaa !11
  %110 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %111 unwind label %260

111:                                              ; preds = %107
  %112 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %113 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %114 = trunc i64 %113 to i32
  %115 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %116 unwind label %260

116:                                              ; preds = %111
  %117 = load ptr, ptr %109, align 16, !tbaa !9
  %118 = getelementptr inbounds ptr, ptr %117, i64 11
  %119 = load ptr, ptr %118, align 8
  invoke void %119(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %16, ptr noundef nonnull align 16 dereferenceable(832) %109, ptr noundef %110, ptr noundef %112, i32 noundef %114, ptr noundef %115, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %120 unwind label %260

120:                                              ; preds = %116
  %121 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 2
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %123 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %124 = load ptr, ptr %123, align 16, !tbaa !11
  %125 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %126 unwind label %264

126:                                              ; preds = %120
  %127 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %128 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %129 = trunc i64 %128 to i32
  %130 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %131 unwind label %264

131:                                              ; preds = %126
  %132 = load ptr, ptr %124, align 16, !tbaa !9
  %133 = getelementptr inbounds ptr, ptr %132, i64 11
  %134 = load ptr, ptr %133, align 8
  invoke void %134(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %17, ptr noundef nonnull align 16 dereferenceable(832) %124, ptr noundef %125, ptr noundef %127, i32 noundef %129, ptr noundef %130, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1)
          to label %135 unwind label %264

135:                                              ; preds = %131
  %136 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 3
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %136, ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %138 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %139 = load ptr, ptr %138, align 16, !tbaa !11
  %140 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %141 unwind label %268

141:                                              ; preds = %135
  %142 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %143 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %144 = trunc i64 %143 to i32
  %145 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %146 unwind label %268

146:                                              ; preds = %141
  %147 = load ptr, ptr %139, align 16, !tbaa !9
  %148 = getelementptr inbounds ptr, ptr %147, i64 11
  %149 = load ptr, ptr %148, align 8
  invoke void %149(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %18, ptr noundef nonnull align 16 dereferenceable(832) %139, ptr noundef %140, ptr noundef %142, i32 noundef %144, ptr noundef %145, i32 noundef 1, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %150 unwind label %268

150:                                              ; preds = %146
  %151 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 4
  %152 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %151, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %153 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %154 = load ptr, ptr %153, align 16, !tbaa !11
  %155 = load ptr, ptr %154, align 16, !tbaa !9
  %156 = getelementptr inbounds ptr, ptr %155, i64 9
  %157 = load ptr, ptr %156, align 8
  invoke void %157(ptr dead_on_unwind writable sret(%"class.JPH::Ref.49") align 8 %19, ptr noundef nonnull align 16 dereferenceable(832) %154, ptr noundef @.str.16)
          to label %158 unwind label %272

158:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %159 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %160 = load ptr, ptr %159, align 16, !tbaa !11
  %161 = load ptr, ptr %160, align 16, !tbaa !9
  %162 = getelementptr inbounds ptr, ptr %161, i64 10
  %163 = load ptr, ptr %162, align 8
  invoke void %163(ptr dead_on_unwind writable sret(%"class.JPH::Ref.50") align 8 %20, ptr noundef nonnull align 16 dereferenceable(832) %160, ptr noundef @.str.17)
          to label %164 unwind label %276

164:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %165 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %166 = load ptr, ptr %165, align 16, !tbaa !11
  %167 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %168 unwind label %280

168:                                              ; preds = %164
  %169 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %170 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %171 = trunc i64 %170 to i32
  %172 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %173 unwind label %280

173:                                              ; preds = %168
  %174 = load ptr, ptr %166, align 16, !tbaa !9
  %175 = getelementptr inbounds ptr, ptr %174, i64 11
  %176 = load ptr, ptr %175, align 8
  invoke void %176(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %21, ptr noundef nonnull align 16 dereferenceable(832) %166, ptr noundef %167, ptr noundef %169, i32 noundef %171, ptr noundef %172, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %177 unwind label %280

177:                                              ; preds = %173
  %178 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 5
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %178, ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %180 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %181 = load ptr, ptr %180, align 16, !tbaa !11
  %182 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %183 unwind label %284

183:                                              ; preds = %177
  %184 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %185 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %186 = trunc i64 %185 to i32
  %187 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %188 unwind label %284

188:                                              ; preds = %183
  %189 = load ptr, ptr %181, align 16, !tbaa !9
  %190 = getelementptr inbounds ptr, ptr %189, i64 11
  %191 = load ptr, ptr %190, align 8
  invoke void %191(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %22, ptr noundef nonnull align 16 dereferenceable(832) %181, ptr noundef %182, ptr noundef %184, i32 noundef %186, ptr noundef %187, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1)
          to label %192 unwind label %284

192:                                              ; preds = %188
  %193 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 6
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %195 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %196 = load ptr, ptr %195, align 16, !tbaa !11
  %197 = invoke noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %198 unwind label %288

198:                                              ; preds = %192
  %199 = getelementptr inbounds [7 x i32], ptr %13, i64 0, i64 0
  %200 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %13) #7
  %201 = trunc i64 %200 to i32
  %202 = invoke noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %203 unwind label %288

203:                                              ; preds = %198
  %204 = load ptr, ptr %196, align 16, !tbaa !9
  %205 = getelementptr inbounds ptr, ptr %204, i64 11
  %206 = load ptr, ptr %205, align 8
  invoke void %206(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %23, ptr noundef nonnull align 16 dereferenceable(832) %196, ptr noundef %197, ptr noundef %199, i32 noundef %201, ptr noundef %202, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %207 unwind label %288

207:                                              ; preds = %203
  %208 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 7
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !48
  br label %210

210:                                              ; preds = %306, %207
  %211 = load i32, ptr %24, align 4, !tbaa !48
  %212 = icmp ult i32 %211, 2
  br i1 %212, label %292, label %213

213:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %313

214:                                              ; preds = %3
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %7, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %8, align 4
  br label %360

218:                                              ; preds = %48
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %7, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %8, align 4
  %222 = icmp eq ptr %46, %49
  br i1 %222, label %227, label %223

223:                                              ; preds = %223, %218
  %224 = phi ptr [ %49, %218 ], [ %225, %223 ]
  %225 = getelementptr inbounds %"class.JPH::Ref.41", ptr %224, i64 -1
  call void @_ZN3JPH3RefI15RenderInstancesED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %225) #7
  %226 = icmp eq ptr %225, %46
  br i1 %226, label %227, label %223

227:                                              ; preds = %223, %218
  br label %359

228:                                              ; preds = %53
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %7, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %8, align 4
  br label %351

232:                                              ; preds = %55
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %7, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %8, align 4
  br label %350

236:                                              ; preds = %60
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %7, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %8, align 4
  br label %349

240:                                              ; preds = %65
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %7, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %8, align 4
  br label %348

244:                                              ; preds = %74
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %7, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %8, align 4
  br label %347

248:                                              ; preds = %89, %84, %80
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %7, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %346

252:                                              ; preds = %93
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %7, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %8, align 4
  br label %345

256:                                              ; preds = %101
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %7, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %8, align 4
  br label %344

260:                                              ; preds = %116, %111, %107
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %7, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %343

264:                                              ; preds = %131, %126, %120
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %7, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %343

268:                                              ; preds = %146, %141, %135
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %7, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %343

272:                                              ; preds = %150
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %7, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %8, align 4
  br label %342

276:                                              ; preds = %158
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %7, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %8, align 4
  br label %341

280:                                              ; preds = %173, %168, %164
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %7, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %340

284:                                              ; preds = %188, %183, %177
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %7, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %340

288:                                              ; preds = %203, %198, %192
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %7, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %340

292:                                              ; preds = %210
  %293 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 1
  %294 = load ptr, ptr %293, align 16, !tbaa !11
  %295 = load ptr, ptr %294, align 16, !tbaa !9
  %296 = getelementptr inbounds ptr, ptr %295, i64 13
  %297 = load ptr, ptr %296, align 8
  %298 = invoke noundef ptr %297(ptr noundef nonnull align 16 dereferenceable(832) %294)
          to label %299 unwind label %309

299:                                              ; preds = %292
  %300 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 15
  %301 = load i32, ptr %24, align 4, !tbaa !48
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds [2 x %"class.JPH::Ref.41"], ptr %300, i64 0, i64 %302
  %304 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15RenderInstancesEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %303, ptr noundef %298)
          to label %305 unwind label %309

305:                                              ; preds = %299
  br label %306

306:                                              ; preds = %305
  %307 = load i32, ptr %24, align 4, !tbaa !48
  %308 = add i32 %307, 1
  store i32 %308, ptr %24, align 4, !tbaa !48
  br label %210, !llvm.loop !49

309:                                              ; preds = %299, %292
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %7, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %340

313:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 36, ptr %25) #7
  %314 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %25, i32 0, i32 0
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %314, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %315 unwind label %326

315:                                              ; preds = %313
  %316 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %25, i32 0, i32 1
  invoke void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %316, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %317 unwind label %326

317:                                              ; preds = %315
  %318 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %25, i32 0, i32 2
  invoke void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %318, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %319 unwind label %326

319:                                              ; preds = %317
  %320 = getelementptr inbounds %"class.JPH::DebugRenderer::Vertex", ptr %25, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %320, ptr align 4 @_ZN3JPH5Color6sWhiteE, i64 4, i1 false), !tbaa.struct !51
  call void @llvm.lifetime.start.p0(i64 12, ptr %26) #7
  call void @llvm.memset.p0.i64(ptr align 4 %26, i8 0, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %321 = getelementptr inbounds [3 x i32], ptr %26, i64 0, i64 0
  invoke void @_ZN16DebugRendererImp19CreateTriangleBatchEPKN3JPH13DebugRenderer6VertexEiPKji(ptr dead_on_unwind writable sret(%"class.JPH::Ref.17") align 8 %27, ptr noundef nonnull align 16 dereferenceable(816) %28, ptr noundef %25, i32 noundef 1, ptr noundef %321, i32 noundef 3)
          to label %322 unwind label %330

322:                                              ; preds = %319
  %323 = getelementptr inbounds %class.DebugRendererImp, ptr %28, i32 0, i32 9
  %324 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16RefTargetVirtualEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %323, ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  invoke void @_ZN3JPH13DebugRenderer10InitializeEv(ptr noundef nonnull align 8 dereferenceable(320) %28)
          to label %325 unwind label %334

325:                                              ; preds = %322
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %25) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr %13) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  ret void

326:                                              ; preds = %317, %315, %313
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %7, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %8, align 4
  br label %339

330:                                              ; preds = %319
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %7, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %338

334:                                              ; preds = %322
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %7, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %8, align 4
  br label %338

338:                                              ; preds = %334, %330
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #7
  br label %339

339:                                              ; preds = %338, %326
  call void @llvm.lifetime.end.p0(i64 36, ptr %25) #7
  br label %340

340:                                              ; preds = %339, %309, %288, %284, %280
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  br label %341

341:                                              ; preds = %340, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  br label %342

342:                                              ; preds = %341, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %343

343:                                              ; preds = %342, %268, %264, %260
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  br label %344

344:                                              ; preds = %343, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  br label %345

345:                                              ; preds = %344, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr %13) #7
  br label %346

346:                                              ; preds = %345, %248
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  br label %347

347:                                              ; preds = %346, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  br label %348

348:                                              ; preds = %347, %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #7
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #7
  call void @_ZN3JPH8RefConstI4FontED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %63) #7
  br label %349

349:                                              ; preds = %348, %236
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #7
  br label %350

350:                                              ; preds = %349, %232
  call void @_ZN3JPH3RefI15RenderPrimitiveED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #7
  br label %351

351:                                              ; preds = %350, %228
  %352 = getelementptr inbounds [2 x %"class.JPH::Ref.41"], ptr %45, i32 0, i32 0
  %353 = getelementptr inbounds %"class.JPH::Ref.41", ptr %352, i64 2
  br label %354

354:                                              ; preds = %354, %351
  %355 = phi ptr [ %353, %351 ], [ %356, %354 ]
  %356 = getelementptr inbounds %"class.JPH::Ref.41", ptr %355, i64 -1
  call void @_ZN3JPH3RefI15RenderInstancesED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %356) #7
  %357 = icmp eq ptr %356, %352
  br i1 %357, label %358, label %354

358:                                              ; preds = %354
  br label %359

359:                                              ; preds = %358, %227
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %43) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %42) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %41) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %40) #7
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  br label %360

360:                                              ; preds = %359, %214
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %32) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #7
  call void @_ZN3JPH13DebugRendererD2Ev(ptr noundef nonnull align 8 dereferenceable(320) %28) #7
  br label %361

361:                                              ; preds = %360
  %362 = load ptr, ptr %7, align 8
  %363 = load i32, ptr %8, 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 nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28)) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16DebugRendererImp19CreateTriangleBatchEPKN3JPH13DebugRenderer6VertexEiPKji(ptr dead_on_unwind noalias writable sret(%"class.JPH::Ref.17") align 8, ptr noundef nonnull align 16 dereferenceable(816), ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !6, i64 320}
!12 = !{!"_ZTS16DebugRendererImp", !13, i64 0, !6, i64 320, !24, i64 328, !24, i64 336, !24, i64 344, !24, i64 352, !24, i64 360, !24, i64 368, !30, i64 376, !35, i64 424, !36, i64 432, !36, i64 464, !36, i64 496, !36, i64 528, !17, i64 560, !7, i64 568, !38, i64 584, !6, i64 592, !6, i64 600, !6, i64 608, !39, i64 624, !41, i64 656, !30, i64 680, !42, i64 728, !43, i64 736, !30, i64 760, !24, i64 808}
!13 = !{!"_ZTSN3JPH13DebugRendererE", !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !15, i64 64, !15, i64 96, !18, i64 128, !18, i64 160, !20, i64 192, !20, i64 224, !22, i64 256, !22, i64 288}
!14 = !{!"_ZTSN3JPH3RefINS_13DebugRenderer8GeometryEEE", !6, i64 0}
!15 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15SwingConeLimitsENS_3RefINS1_8GeometryEEENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !16, i64 0}
!16 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15SwingConeLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer18SwingPyramidLimitsENS_3RefINS1_8GeometryEEENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !19, i64 0}
!19 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer18SwingPyramidLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24}
!20 = !{!"_ZTSN3JPH12UnorderedMapIfNS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIfEESt8equal_toIfEEE", !21, i64 0}
!21 = !{!"_ZTSN3JPH9HashTableIfSt4pairIfNS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIfS5_EENS_4HashIfEESt8equal_toIfEEE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24}
!22 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15TaperedCylinderENS_3RefINS1_8GeometryEEENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !23, i64 0}
!23 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15TaperedCylinderESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24}
!24 = !{!"_ZTSSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_dataI13PipelineStateSt14default_deleteIS0_ELb1ELb1EE", !26, i64 0}
!26 = !{!"_ZTSSt15__uniq_ptr_implI13PipelineStateSt14default_deleteIS0_EE", !27, i64 0}
!27 = !{!"_ZTSSt5tupleIJP13PipelineStateSt14default_deleteIS0_EEE", !28, i64 0}
!28 = !{!"_ZTSSt11_Tuple_implILm0EJP13PipelineStateSt14default_deleteIS0_EEE", !29, i64 0}
!29 = !{!"_ZTSSt10_Head_baseILm0EP13PipelineStateLb0EE", !6, i64 0}
!30 = !{!"_ZTSN3JPH5MutexE", !31, i64 0, !33, i64 40}
!31 = !{!"_ZTSSt5mutex", !32, i64 0}
!32 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!33 = !{!"_ZTSNSt6thread2idE", !34, i64 0}
!34 = !{!"long", !7, i64 0}
!35 = !{!"_ZTSN3JPH3RefINS_16RefTargetVirtualEEE", !6, i64 0}
!36 = !{!"_ZTSN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEE", !37, i64 0}
!37 = !{!"_ZTSN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EEE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24}
!38 = !{!"_ZTSN3JPH3RefI15RenderPrimitiveEE", !6, i64 0}
!39 = !{!"_ZTSN3JPH5AABoxE", !40, i64 0, !40, i64 16}
!40 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!41 = !{!"_ZTSN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEEE", !34, i64 0, !34, i64 8, !6, i64 16}
!42 = !{!"_ZTSN3JPH8RefConstI4FontEE", !6, i64 0}
!43 = !{!"_ZTSN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEEE", !34, i64 0, !34, i64 8, !6, i64 16}
!44 = !{!12, !17, i64 560}
!45 = !{!12, !6, i64 592}
!46 = !{!12, !6, i64 600}
!47 = !{!12, !6, i64 608}
!48 = !{!17, !17, i64 0}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = !{i64 0, i64 4, !52}
!52 = !{!7, !7, i64 0}


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

%"class.JPH::Color" = type { %union.anon.0 }
%union.anon.0 = type { i32 }
%"class.JPH::Ref.49" = type { ptr }
%"class.JPH::Ref.50" = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.36" }
%"struct.std::_Head_base.36" = type { ptr }
%"class.JPH::DebugRenderer::Vertex" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float2", %"class.JPH::Color" }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::Float2" = type { float, float }
%"class.JPH::Ref.17" = type { ptr }

@_ZN3JPH5Color6sWhiteE = external local_unnamed_addr global %"class.JPH::Color", align 4
@_ZTV16DebugRendererImp = external dso_local unnamed_addr constant { [10 x ptr] }, align 8
@__const.DebugRendererImp.line_vertex_desc = external hidden unnamed_addr constant [2 x i32], align 4
@.str.12 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@__const.DebugRendererImp.triangles_vertex_desc = external hidden unnamed_addr constant [7 x i32], align 16
@.str.14 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH13DebugRendererD2Ev(ptr noundef nonnull align 8 dereferenceable(320)) 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 void @_ZN3JPH13DebugRenderer10InitializeEv(ptr noundef nonnull align 8 dereferenceable(320)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) 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 uwtable
declare dso_local void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16DebugRendererImpC2EP8RendererPK4Font(ptr noundef nonnull align 16 dereferenceable(816) %0, ptr noundef %1, ptr noundef %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca [2 x i32], align 8
  %5 = alloca %"class.JPH::Ref.49", align 8
  %6 = alloca %"class.JPH::Ref.50", align 8
  %7 = alloca %"class.std::unique_ptr", align 8
  %8 = alloca [7 x i32], align 16
  %9 = alloca %"class.JPH::Ref.49", align 8
  %10 = alloca %"class.JPH::Ref.50", align 8
  %11 = alloca %"class.std::unique_ptr", align 8
  %12 = alloca %"class.std::unique_ptr", align 8
  %13 = alloca %"class.std::unique_ptr", align 8
  %14 = alloca %"class.JPH::Ref.49", align 8
  %15 = alloca %"class.JPH::Ref.50", align 8
  %16 = alloca %"class.std::unique_ptr", align 8
  %17 = alloca %"class.std::unique_ptr", align 8
  %18 = alloca %"class.std::unique_ptr", align 8
  %19 = alloca %"class.JPH::DebugRenderer::Vertex", align 4
  %20 = alloca [3 x i32], align 4
  %21 = alloca %"class.JPH::Ref.17", align 8
  tail call void @_ZN3JPH13DebugRendererC2Ev(ptr noundef nonnull align 8 dereferenceable(320) %0)
  store ptr getelementptr inbounds inrange(-16, 64) (i8, ptr @_ZTV16DebugRendererImp, i64 16), ptr %0, align 16, !tbaa !5
  %22 = getelementptr inbounds i8, ptr %0, i64 320
  store ptr %1, ptr %22, align 16, !tbaa !8
  %23 = getelementptr inbounds i8, ptr %0, i64 328
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  %24 = getelementptr inbounds i8, ptr %0, i64 336
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  %25 = getelementptr inbounds i8, ptr %0, i64 344
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  %26 = getelementptr inbounds i8, ptr %0, i64 352
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  %27 = getelementptr inbounds i8, ptr %0, i64 360
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  %28 = getelementptr inbounds i8, ptr %0, i64 368
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  %29 = getelementptr inbounds i8, ptr %0, i64 376
  tail call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %29) #7
  %30 = getelementptr inbounds i8, ptr %0, i64 424
  tail call void @_ZN3JPH3RefINS_16RefTargetVirtualEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30)
  %31 = getelementptr inbounds i8, ptr %0, i64 432
  tail call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %31) #7
  %32 = getelementptr inbounds i8, ptr %0, i64 464
  tail call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %32) #7
  %33 = getelementptr inbounds i8, ptr %0, i64 496
  tail call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %33) #7
  %34 = getelementptr inbounds i8, ptr %0, i64 528
  tail call void @_ZN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(28) %34) #7
  %35 = getelementptr inbounds i8, ptr %0, i64 560
  store i32 0, ptr %35, align 16, !tbaa !43
  %.ptr = getelementptr inbounds i8, ptr %0, i64 568
  tail call void @_ZN3JPH3RefI15RenderInstancesEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.ptr)
  %.ptr.1 = getelementptr inbounds i8, ptr %0, i64 576
  tail call void @_ZN3JPH3RefI15RenderInstancesEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.ptr.1)
  %36 = getelementptr inbounds i8, ptr %0, i64 584
  tail call void @_ZN3JPH3RefI15RenderPrimitiveEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36)
  %37 = getelementptr inbounds i8, ptr %0, i64 592
  %38 = getelementptr inbounds i8, ptr %0, i64 624
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %37, i8 0, i64 24, i1 false)
  invoke void @_ZN3JPH5AABoxC2Ev(ptr noundef nonnull align 16 dereferenceable(32) %38)
          to label %39 unwind label %153

39:                                               ; preds = %3
  %40 = getelementptr inbounds i8, ptr %0, i64 656
  tail call void @_ZN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #7
  %41 = getelementptr inbounds i8, ptr %0, i64 680
  tail call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %41) #7
  %42 = getelementptr inbounds i8, ptr %0, i64 728
  invoke void @_ZN3JPH8RefConstI4FontEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef %2)
          to label %43 unwind label %155

43:                                               ; preds = %39
  %44 = getelementptr inbounds i8, ptr %0, i64 736
  tail call void @_ZN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #7
  %45 = getelementptr inbounds i8, ptr %0, i64 760
  tail call void @_ZN3JPH5MutexC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %45) #7
  %46 = getelementptr inbounds i8, ptr %0, i64 808
  tail call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  %47 = load i64, ptr @__const.DebugRendererImp.line_vertex_desc, align 4
  store i64 %47, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  %48 = load ptr, ptr %22, align 16, !tbaa !8
  %49 = load ptr, ptr %48, align 16, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %49, i64 72
  %51 = load ptr, ptr %50, align 8
  invoke void %51(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.49") align 8 %5, ptr noundef nonnull align 16 dereferenceable(832) %48, ptr noundef nonnull @.str.12)
          to label %52 unwind label %157

52:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %53 = load ptr, ptr %22, align 16, !tbaa !8
  %54 = load ptr, ptr %53, align 16, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %54, i64 80
  %56 = load ptr, ptr %55, align 8
  invoke void %56(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.50") align 8 %6, ptr noundef nonnull align 16 dereferenceable(832) %53, ptr noundef nonnull @.str.13)
          to label %57 unwind label %159

57:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %58 = load ptr, ptr %22, align 16, !tbaa !8
  %59 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %5)
  %60 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm2EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(8) %4) #7
  %61 = trunc i64 %60 to i32
  %62 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %63 = load ptr, ptr %58, align 16, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 88
  %65 = load ptr, ptr %64, align 8
  invoke void %65(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %7, ptr noundef nonnull align 16 dereferenceable(832) %58, ptr noundef %59, ptr noundef nonnull %4, i32 noundef %61, ptr noundef %62, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %66 unwind label %161

66:                                               ; preds = %57
  %67 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %8) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(28) %8, ptr noundef nonnull align 16 dereferenceable(28) @__const.DebugRendererImp.triangles_vertex_desc, i64 28, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  %68 = load ptr, ptr %22, align 16, !tbaa !8
  %69 = load ptr, ptr %68, align 16, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %69, i64 72
  %71 = load ptr, ptr %70, align 8
  invoke void %71(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.49") align 8 %9, ptr noundef nonnull align 16 dereferenceable(832) %68, ptr noundef nonnull @.str.14)
          to label %72 unwind label %163

72:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %73 = load ptr, ptr %22, align 16, !tbaa !8
  %74 = load ptr, ptr %73, align 16, !tbaa !5
  %75 = getelementptr inbounds i8, ptr %74, i64 80
  %76 = load ptr, ptr %75, align 8
  invoke void %76(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.50") align 8 %10, ptr noundef nonnull align 16 dereferenceable(832) %73, ptr noundef nonnull @.str.15)
          to label %77 unwind label %165

77:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %78 = load ptr, ptr %22, align 16, !tbaa !8
  %79 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  %80 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %81 = trunc i64 %80 to i32
  %82 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
  %83 = load ptr, ptr %78, align 16, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %83, i64 88
  %85 = load ptr, ptr %84, align 8
  invoke void %85(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %11, ptr noundef nonnull align 16 dereferenceable(832) %78, ptr noundef %79, ptr noundef nonnull %8, i32 noundef %81, ptr noundef %82, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %86 unwind label %167

86:                                               ; preds = %77
  %87 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %88 = load ptr, ptr %22, align 16, !tbaa !8
  %89 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  %90 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %91 = trunc i64 %90 to i32
  %92 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
  %93 = load ptr, ptr %88, align 16, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %93, i64 88
  %95 = load ptr, ptr %94, align 8
  invoke void %95(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %12, ptr noundef nonnull align 16 dereferenceable(832) %88, ptr noundef %89, ptr noundef nonnull %8, i32 noundef %91, ptr noundef %92, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1)
          to label %96 unwind label %169

96:                                               ; preds = %86
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %98 = load ptr, ptr %22, align 16, !tbaa !8
  %99 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %9)
  %100 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %101 = trunc i64 %100 to i32
  %102 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %10)
  %103 = load ptr, ptr %98, align 16, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %103, i64 88
  %105 = load ptr, ptr %104, align 8
  invoke void %105(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %13, ptr noundef nonnull align 16 dereferenceable(832) %98, ptr noundef %99, ptr noundef nonnull %8, i32 noundef %101, ptr noundef %102, i32 noundef 1, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %106 unwind label %171

106:                                              ; preds = %96
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %108 = load ptr, ptr %22, align 16, !tbaa !8
  %109 = load ptr, ptr %108, align 16, !tbaa !5
  %110 = getelementptr inbounds i8, ptr %109, i64 72
  %111 = load ptr, ptr %110, align 8
  invoke void %111(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.49") align 8 %14, ptr noundef nonnull align 16 dereferenceable(832) %108, ptr noundef nonnull @.str.16)
          to label %112 unwind label %173

112:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %113 = load ptr, ptr %22, align 16, !tbaa !8
  %114 = load ptr, ptr %113, align 16, !tbaa !5
  %115 = getelementptr inbounds i8, ptr %114, i64 80
  %116 = load ptr, ptr %115, align 8
  invoke void %116(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.50") align 8 %15, ptr noundef nonnull align 16 dereferenceable(832) %113, ptr noundef nonnull @.str.17)
          to label %117 unwind label %175

117:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %118 = load ptr, ptr %22, align 16, !tbaa !8
  %119 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %120 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %121 = trunc i64 %120 to i32
  %122 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %123 = load ptr, ptr %118, align 16, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 88
  %125 = load ptr, ptr %124, align 8
  invoke void %125(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %16, ptr noundef nonnull align 16 dereferenceable(832) %118, ptr noundef %119, ptr noundef nonnull %8, i32 noundef %121, ptr noundef %122, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %126 unwind label %177

126:                                              ; preds = %117
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %128 = load ptr, ptr %22, align 16, !tbaa !8
  %129 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %130 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %131 = trunc i64 %130 to i32
  %132 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %133 = load ptr, ptr %128, align 16, !tbaa !5
  %134 = getelementptr inbounds i8, ptr %133, i64 88
  %135 = load ptr, ptr %134, align 8
  invoke void %135(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %17, ptr noundef nonnull align 16 dereferenceable(832) %128, ptr noundef %129, ptr noundef nonnull %8, i32 noundef %131, ptr noundef %132, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1)
          to label %136 unwind label %179

136:                                              ; preds = %126
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %138 = load ptr, ptr %22, align 16, !tbaa !8
  %139 = call noundef ptr @_ZNK3JPH3RefI12VertexShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %140 = call noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28) %8) #7
  %141 = trunc i64 %140 to i32
  %142 = call noundef ptr @_ZNK3JPH3RefI11PixelShaderEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %143 = load ptr, ptr %138, align 16, !tbaa !5
  %144 = getelementptr inbounds i8, ptr %143, i64 88
  %145 = load ptr, ptr %144, align 8
  invoke void %145(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %18, ptr noundef nonnull align 16 dereferenceable(832) %138, ptr noundef %139, ptr noundef nonnull %8, i32 noundef %141, ptr noundef %142, i32 noundef 0, i32 noundef 1, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 0)
          to label %146 unwind label %181

146:                                              ; preds = %136
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  %148 = load ptr, ptr %22, align 16, !tbaa !8
  %149 = load ptr, ptr %148, align 16, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %149, i64 104
  %151 = load ptr, ptr %150, align 8
  %152 = invoke noundef ptr %151(ptr noundef nonnull align 16 dereferenceable(832) %148)
          to label %183 unwind label %199

153:                                              ; preds = %3
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %219

155:                                              ; preds = %39
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %218

157:                                              ; preds = %43
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %217

159:                                              ; preds = %52
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %216

161:                                              ; preds = %57
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %215

163:                                              ; preds = %66
  %164 = landingpad { ptr, i32 }
          cleanup
  br label %214

165:                                              ; preds = %72
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %213

167:                                              ; preds = %77
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %212

169:                                              ; preds = %86
  %170 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %212

171:                                              ; preds = %96
  %172 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  br label %212

173:                                              ; preds = %106
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %211

175:                                              ; preds = %112
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %210

177:                                              ; preds = %117
  %178 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br label %209

179:                                              ; preds = %126
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  br label %209

181:                                              ; preds = %136
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  br label %209

183:                                              ; preds = %146
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15RenderInstancesEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %.ptr, ptr noundef %152)
          to label %185 unwind label %199

185:                                              ; preds = %183
  %186 = load ptr, ptr %22, align 16, !tbaa !8
  %187 = load ptr, ptr %186, align 16, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i64 104
  %189 = load ptr, ptr %188, align 8
  %190 = invoke noundef ptr %189(ptr noundef nonnull align 16 dereferenceable(832) %186)
          to label %191 unwind label %199

191:                                              ; preds = %185
  %192 = getelementptr inbounds i8, ptr %0, i64 576
  %193 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefI15RenderInstancesEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %192, ptr noundef %190)
          to label %194 unwind label %199

194:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %19) #7
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %19, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %195 = getelementptr inbounds i8, ptr %19, i64 12
  call void @_ZN3JPH6Float3C2Efff(ptr noundef nonnull align 4 dereferenceable(12) %195, float noundef 1.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %196 = getelementptr inbounds i8, ptr %19, i64 24
  call void @_ZN3JPH6Float2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %196, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %197 = getelementptr inbounds i8, ptr %19, i64 32
  %198 = load i32, ptr @_ZN3JPH5Color6sWhiteE, align 4, !tbaa !44
  store i32 %198, ptr %197, align 4, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %20) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %20, i8 0, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  invoke void @_ZN16DebugRendererImp19CreateTriangleBatchEPKN3JPH13DebugRenderer6VertexEiPKji(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Ref.17") align 8 %21, ptr noundef nonnull align 16 dereferenceable(816) %0, ptr noundef nonnull %19, i32 noundef 1, ptr noundef nonnull %20, i32 noundef 3)
          to label %201 unwind label %204

199:                                              ; preds = %191, %185, %183, %146
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %209

201:                                              ; preds = %194
  %202 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_16RefTargetVirtualEEaSEOS2_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  invoke void @_ZN3JPH13DebugRenderer10InitializeEv(ptr noundef nonnull align 8 dereferenceable(320) %0)
          to label %203 unwind label %206

203:                                              ; preds = %201
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %19) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %8) #7
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  ret void

204:                                              ; preds = %194
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  br label %208

206:                                              ; preds = %201
  %207 = landingpad { ptr, i32 }
          cleanup
  br label %208

208:                                              ; preds = %206, %204
  %.pn = phi { ptr, i32 } [ %207, %206 ], [ %205, %204 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %19) #7
  br label %209

209:                                              ; preds = %208, %199, %181, %179, %177
  %.pn24 = phi { ptr, i32 } [ %200, %199 ], [ %.pn, %208 ], [ %182, %181 ], [ %180, %179 ], [ %178, %177 ]
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #7
  br label %210

210:                                              ; preds = %209, %175
  %.pn24.pn = phi { ptr, i32 } [ %.pn24, %209 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  br label %211

211:                                              ; preds = %210, %173
  %.pn24.pn.pn = phi { ptr, i32 } [ %.pn24.pn, %210 ], [ %174, %173 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %212

212:                                              ; preds = %211, %171, %169, %167
  %.pn24.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn, %211 ], [ %172, %171 ], [ %170, %169 ], [ %168, %167 ]
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  br label %213

213:                                              ; preds = %212, %165
  %.pn24.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn, %212 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  br label %214

214:                                              ; preds = %213, %163
  %.pn24.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn, %213 ], [ %164, %163 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %8) #7
  br label %215

215:                                              ; preds = %214, %161
  %.pn24.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn.pn, %214 ], [ %162, %161 ]
  call void @_ZN3JPH3RefI11PixelShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #7
  br label %216

216:                                              ; preds = %215, %159
  %.pn24.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn.pn.pn, %215 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  call void @_ZN3JPH3RefI12VertexShaderED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  br label %217

217:                                              ; preds = %216, %157
  %.pn24.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn.pn.pn.pn, %216 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #7
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #7
  call void @_ZN3JPH8RefConstI4FontED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #7
  br label %218

218:                                              ; preds = %217, %155
  %.pn24.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn.pn.pn.pn.pn, %217 ], [ %156, %155 ]
  call void @_ZN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #7
  br label %219

219:                                              ; preds = %218, %153
  %.pn24.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn24.pn.pn.pn.pn.pn.pn.pn.pn.pn, %218 ], [ %154, %153 ]
  call void @_ZN3JPH3RefI15RenderPrimitiveED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %36) #7
  call void @_ZN3JPH3RefI15RenderInstancesED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.ptr.1) #7
  call void @_ZN3JPH3RefI15RenderInstancesED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.ptr) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %34) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %33) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %32) #7
  call void @_ZN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(28) %31) #7
  call void @_ZN3JPH3RefINS_16RefTargetVirtualEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %25) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  call void @_ZNSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #7
  call void @_ZN3JPH13DebugRendererD2Ev(ptr noundef nonnull align 8 dereferenceable(320) %0) #7
  resume { ptr, i32 } %.pn24.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZSt4sizeIN13PipelineState17EInputDescriptionELm7EEmRAT0__KT_(ptr noundef nonnull align 4 dereferenceable(28)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN16DebugRendererImp19CreateTriangleBatchEPKN3JPH13DebugRenderer6VertexEiPKji(ptr dead_on_unwind noalias writable sret(%"class.JPH::Ref.17") align 8, ptr noundef nonnull align 16 dereferenceable(816), ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !12, i64 320}
!9 = !{!"_ZTS16DebugRendererImp", !10, i64 0, !12, i64 320, !23, i64 328, !23, i64 336, !23, i64 344, !23, i64 352, !23, i64 360, !23, i64 368, !29, i64 376, !34, i64 424, !35, i64 432, !35, i64 464, !35, i64 496, !35, i64 528, !16, i64 560, !13, i64 568, !37, i64 584, !12, i64 592, !12, i64 600, !12, i64 608, !38, i64 624, !40, i64 656, !29, i64 680, !41, i64 728, !42, i64 736, !29, i64 760, !23, i64 808}
!10 = !{!"_ZTSN3JPH13DebugRendererE", !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !14, i64 64, !14, i64 96, !17, i64 128, !17, i64 160, !19, i64 192, !19, i64 224, !21, i64 256, !21, i64 288}
!11 = !{!"_ZTSN3JPH3RefINS_13DebugRenderer8GeometryEEE", !12, i64 0}
!12 = !{!"any pointer", !13, i64 0}
!13 = !{!"omnipotent char", !7, i64 0}
!14 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15SwingConeLimitsENS_3RefINS1_8GeometryEEENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !15, i64 0}
!15 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15SwingConeLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !12, i64 0, !12, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!16 = !{!"int", !13, i64 0}
!17 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer18SwingPyramidLimitsENS_3RefINS1_8GeometryEEENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !18, i64 0}
!18 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer18SwingPyramidLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !12, i64 0, !12, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!19 = !{!"_ZTSN3JPH12UnorderedMapIfNS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIfEESt8equal_toIfEEE", !20, i64 0}
!20 = !{!"_ZTSN3JPH9HashTableIfSt4pairIfNS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIfS5_EENS_4HashIfEESt8equal_toIfEEE", !12, i64 0, !12, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!21 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15TaperedCylinderENS_3RefINS1_8GeometryEEENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !22, i64 0}
!22 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15TaperedCylinderESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !12, i64 0, !12, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!23 = !{!"_ZTSSt10unique_ptrI13PipelineStateSt14default_deleteIS0_EE", !24, i64 0}
!24 = !{!"_ZTSSt15__uniq_ptr_dataI13PipelineStateSt14default_deleteIS0_ELb1ELb1EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_implI13PipelineStateSt14default_deleteIS0_EE", !26, i64 0}
!26 = !{!"_ZTSSt5tupleIJP13PipelineStateSt14default_deleteIS0_EEE", !27, i64 0}
!27 = !{!"_ZTSSt11_Tuple_implILm0EJP13PipelineStateSt14default_deleteIS0_EEE", !28, i64 0}
!28 = !{!"_ZTSSt10_Head_baseILm0EP13PipelineStateLb0EE", !12, i64 0}
!29 = !{!"_ZTSN3JPH5MutexE", !30, i64 0, !32, i64 40}
!30 = !{!"_ZTSSt5mutex", !31, i64 0}
!31 = !{!"_ZTSSt12__mutex_base", !13, i64 0}
!32 = !{!"_ZTSNSt6thread2idE", !33, i64 0}
!33 = !{!"long", !13, i64 0}
!34 = !{!"_ZTSN3JPH3RefINS_16RefTargetVirtualEEE", !12, i64 0}
!35 = !{!"_ZTSN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEN16DebugRendererImp9InstancesENS_4HashIS4_EESt8equal_toIS4_EEE", !36, i64 0}
!36 = !{!"_ZTSN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_N16DebugRendererImp9InstancesEENS_18UnorderedMapDetailIS4_S7_EENS_4HashIS4_EESt8equal_toIS4_EEE", !12, i64 0, !12, i64 8, !16, i64 16, !16, i64 20, !16, i64 24}
!37 = !{!"_ZTSN3JPH3RefI15RenderPrimitiveEE", !12, i64 0}
!38 = !{!"_ZTSN3JPH5AABoxE", !39, i64 0, !39, i64 16}
!39 = !{!"_ZTSN3JPH4Vec3E", !13, i64 0}
!40 = !{!"_ZTSN3JPH5ArrayIN16DebugRendererImp4TextENS_12STLAllocatorIS2_EEEE", !33, i64 0, !33, i64 8, !12, i64 16}
!41 = !{!"_ZTSN3JPH8RefConstI4FontEE", !12, i64 0}
!42 = !{!"_ZTSN3JPH5ArrayIN16DebugRendererImp4LineENS_12STLAllocatorIS2_EEEE", !33, i64 0, !33, i64 8, !12, i64 16}
!43 = !{!9, !16, i64 560}
!44 = !{!13, !13, i64 0}


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