; LLVM IR from jrouwe/JoltPhysics :: JoltViewer/JoltViewer.ll (ZN3JPH21DebugRendererRecorder8EndFrameEv)

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

%"class.std::lock_guard" = type { ptr }
%"class.JPH::DebugRendererRecorder" = type { %"class.JPH::DebugRenderer", %"class.JPH::Mutex", ptr, i32, i32, %"class.JPH::UnorderedMap.13", %"struct.JPH::DebugRendererRecorder::Frame" }
%"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::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 }
%"class.JPH::UnorderedMap.13" = type { %"class.JPH::HashTable.base.15", [4 x i8] }
%"class.JPH::HashTable.base.15" = type <{ ptr, ptr, i32, i32, i32 }>
%"struct.JPH::DebugRendererRecorder::Frame" = type { %"class.JPH::Array", %"class.JPH::Array.17", %"class.JPH::Array.20", %"class.JPH::Array.23" }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Array.17" = type { i64, i64, ptr }
%"class.JPH::Array.20" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"struct.JPH::DebugRendererRecorder::LineBlob" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Color", [12 x i8] }>
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Color" = type { %union.anon.0 }
%union.anon.0 = type { i32 }
%"struct.JPH::DebugRendererRecorder::TriangleBlob" = type <{ %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Color", i32, [8 x i8] }>
%"struct.JPH::DebugRendererRecorder::TextBlob" = type <{ %"class.JPH::Vec3", %"class.std::__cxx11::basic_string", %"class.JPH::Color", float, [8 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider", i64, %union.anon.33 }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, JPH::STLAllocator<char>>::_Alloc_hider" = type { ptr }
%union.anon.33 = type { i64, [8 x i8] }
%"struct.JPH::DebugRendererRecorder::GeometryBlob" = type <{ %"class.JPH::Mat44", %"class.JPH::Color", i32, i32, i32, i32, [12 x i8] }>
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.30 }
%union.anon.30 = type { <4 x float> }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH21DebugRendererRecorder8EndFrameEv(ptr noundef nonnull align 8 dereferenceable(512) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::lock_guard", align 8
  %4 = alloca i8, align 1
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %27 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %28 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 1
  call void @_ZNSt10lock_guardIN3JPH5MutexEEC2ERS1_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(48) %28)
  %29 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %30 = load ptr, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #5
  store i8 3, ptr %4, align 1, !tbaa !34
  invoke void @_ZN3JPH9StreamOut5WriteINS_21DebugRendererRecorder8ECommandETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %31 unwind label %53

31:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #5
  %32 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %33 = load ptr, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %34 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %35 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %34, i32 0, i32 0
  %36 = invoke noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %37 unwind label %57

37:                                               ; preds = %31
  %38 = trunc i64 %36 to i32
  store i32 %38, ptr %7, align 4, !tbaa !36
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %39 unwind label %57

39:                                               ; preds = %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %40 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %41 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %40, i32 0, i32 0
  store ptr %41, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %42 = load ptr, ptr %8, align 8, !tbaa !5
  %43 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %42)
          to label %44 unwind label %61

44:                                               ; preds = %39
  store ptr %43, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  %46 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
          to label %47 unwind label %65

47:                                               ; preds = %44
  store ptr %46, ptr %10, align 8, !tbaa !5
  br label %48

48:                                               ; preds = %86, %47
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = load ptr, ptr %10, align 8, !tbaa !5
  %51 = icmp ne ptr %49, %50
  br i1 %51, label %69, label %52

52:                                               ; preds = %48
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %95

53:                                               ; preds = %1
  %54 = landingpad { ptr, i32 }
          cleanup
  %55 = extractvalue { ptr, i32 } %54, 0
  store ptr %55, ptr %5, align 8
  %56 = extractvalue { ptr, i32 } %54, 1
  store i32 %56, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #5
  br label %322

57:                                               ; preds = %37, %31
  %58 = landingpad { ptr, i32 }
          cleanup
  %59 = extractvalue { ptr, i32 } %58, 0
  store ptr %59, ptr %5, align 8
  %60 = extractvalue { ptr, i32 } %58, 1
  store i32 %60, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  br label %322

61:                                               ; preds = %39
  %62 = landingpad { ptr, i32 }
          cleanup
  %63 = extractvalue { ptr, i32 } %62, 0
  store ptr %63, ptr %5, align 8
  %64 = extractvalue { ptr, i32 } %62, 1
  store i32 %64, ptr %6, align 4
  br label %94

65:                                               ; preds = %44
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = extractvalue { ptr, i32 } %66, 0
  store ptr %67, ptr %5, align 8
  %68 = extractvalue { ptr, i32 } %66, 1
  store i32 %68, ptr %6, align 4
  br label %93

69:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %70, ptr %11, align 8, !tbaa !5
  %71 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  %73 = load ptr, ptr %11, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::LineBlob", ptr %73, i32 0, i32 0
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 16 dereferenceable(16) %74)
          to label %75 unwind label %89

75:                                               ; preds = %69
  %76 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::LineBlob", ptr %78, i32 0, i32 1
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull align 16 dereferenceable(16) %79)
          to label %80 unwind label %89

80:                                               ; preds = %75
  %81 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %82 = load ptr, ptr %81, align 8, !tbaa !9
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  %84 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::LineBlob", ptr %83, i32 0, i32 2
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %82, ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %85 unwind label %89

85:                                               ; preds = %80
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %86

86:                                               ; preds = %85
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::LineBlob", ptr %87, i32 1
  store ptr %88, ptr %9, align 8, !tbaa !5
  br label %48

89:                                               ; preds = %80, %75, %69
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %5, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %93

93:                                               ; preds = %89, %65
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %94

94:                                               ; preds = %93, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %322

95:                                               ; preds = %52
  %96 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %97 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %96, i32 0, i32 0
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %98 unwind label %120

98:                                               ; preds = %95
  %99 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %101 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %102 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %101, i32 0, i32 1
  %103 = invoke noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %102)
          to label %104 unwind label %124

104:                                              ; preds = %98
  %105 = trunc i64 %103 to i32
  store i32 %105, ptr %12, align 4, !tbaa !36
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %106 unwind label %124

106:                                              ; preds = %104
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %107 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %108 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %107, i32 0, i32 1
  store ptr %108, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %109 = load ptr, ptr %13, align 8, !tbaa !5
  %110 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %109)
          to label %111 unwind label %128

111:                                              ; preds = %106
  store ptr %110, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %112 = load ptr, ptr %13, align 8, !tbaa !5
  %113 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %112)
          to label %114 unwind label %132

114:                                              ; preds = %111
  store ptr %113, ptr %15, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %163, %114
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = load ptr, ptr %15, align 8, !tbaa !5
  %118 = icmp ne ptr %116, %117
  br i1 %118, label %136, label %119

119:                                              ; preds = %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %172

120:                                              ; preds = %318, %240, %172, %95
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %5, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %6, align 4
  br label %322

124:                                              ; preds = %104, %98
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %5, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %322

128:                                              ; preds = %106
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %5, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %6, align 4
  br label %171

132:                                              ; preds = %111
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %5, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %6, align 4
  br label %170

136:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %137 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %137, ptr %16, align 8, !tbaa !5
  %138 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %139 = load ptr, ptr %138, align 8, !tbaa !9
  %140 = load ptr, ptr %16, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %140, i32 0, i32 0
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull align 16 dereferenceable(16) %141)
          to label %142 unwind label %166

142:                                              ; preds = %136
  %143 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %145, i32 0, i32 1
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %144, ptr noundef nonnull align 16 dereferenceable(16) %146)
          to label %147 unwind label %166

147:                                              ; preds = %142
  %148 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %149 = load ptr, ptr %148, align 8, !tbaa !9
  %150 = load ptr, ptr %16, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %150, i32 0, i32 2
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %149, ptr noundef nonnull align 16 dereferenceable(16) %151)
          to label %152 unwind label %166

152:                                              ; preds = %147
  %153 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %154 = load ptr, ptr %153, align 8, !tbaa !9
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %155, i32 0, i32 3
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %154, ptr noundef nonnull align 4 dereferenceable(4) %156)
          to label %157 unwind label %166

157:                                              ; preds = %152
  %158 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %159 = load ptr, ptr %158, align 8, !tbaa !9
  %160 = load ptr, ptr %16, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %160, i32 0, i32 4
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer11ECastShadowETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull align 4 dereferenceable(4) %161)
          to label %162 unwind label %166

162:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %163

163:                                              ; preds = %162
  %164 = load ptr, ptr %14, align 8, !tbaa !5
  %165 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TriangleBlob", ptr %164, i32 1
  store ptr %165, ptr %14, align 8, !tbaa !5
  br label %115

166:                                              ; preds = %157, %152, %147, %142, %136
  %167 = landingpad { ptr, i32 }
          cleanup
  %168 = extractvalue { ptr, i32 } %167, 0
  store ptr %168, ptr %5, align 8
  %169 = extractvalue { ptr, i32 } %167, 1
  store i32 %169, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %170

170:                                              ; preds = %166, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %171

171:                                              ; preds = %170, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %322

172:                                              ; preds = %119
  %173 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %174 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %173, i32 0, i32 1
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %174)
          to label %175 unwind label %120

175:                                              ; preds = %172
  %176 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %177 = load ptr, ptr %176, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %178 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %179 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %178, i32 0, i32 2
  %180 = invoke noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %179)
          to label %181 unwind label %197

181:                                              ; preds = %175
  %182 = trunc i64 %180 to i32
  store i32 %182, ptr %17, align 4, !tbaa !36
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %183 unwind label %197

183:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %184 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %185 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %184, i32 0, i32 2
  store ptr %185, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %186 = load ptr, ptr %18, align 8, !tbaa !5
  %187 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %186)
          to label %188 unwind label %201

188:                                              ; preds = %183
  store ptr %187, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %189)
          to label %191 unwind label %205

191:                                              ; preds = %188
  store ptr %190, ptr %20, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %231, %191
  %193 = load ptr, ptr %19, align 8, !tbaa !5
  %194 = load ptr, ptr %20, align 8, !tbaa !5
  %195 = icmp ne ptr %193, %194
  br i1 %195, label %209, label %196

196:                                              ; preds = %192
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %240

197:                                              ; preds = %181, %175
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %5, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %322

201:                                              ; preds = %183
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %5, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %6, align 4
  br label %239

205:                                              ; preds = %188
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = extractvalue { ptr, i32 } %206, 0
  store ptr %207, ptr %5, align 8
  %208 = extractvalue { ptr, i32 } %206, 1
  store i32 %208, ptr %6, align 4
  br label %238

209:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %210 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %210, ptr %21, align 8, !tbaa !5
  %211 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %212 = load ptr, ptr %211, align 8, !tbaa !9
  %213 = load ptr, ptr %21, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TextBlob", ptr %213, i32 0, i32 0
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef nonnull align 16 dereferenceable(16) %214)
          to label %215 unwind label %234

215:                                              ; preds = %209
  %216 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %217 = load ptr, ptr %216, align 8, !tbaa !9
  %218 = load ptr, ptr %21, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TextBlob", ptr %218, i32 0, i32 1
  invoke void @_ZN3JPH9StreamOut5WriteIcSt11char_traitsIcENS_12STLAllocatorIcEEEEvRKNSt7__cxx1112basic_stringIT_T0_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %217, ptr noundef nonnull align 8 dereferenceable(32) %219)
          to label %220 unwind label %234

220:                                              ; preds = %215
  %221 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %222 = load ptr, ptr %221, align 8, !tbaa !9
  %223 = load ptr, ptr %21, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TextBlob", ptr %223, i32 0, i32 2
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %222, ptr noundef nonnull align 4 dereferenceable(4) %224)
          to label %225 unwind label %234

225:                                              ; preds = %220
  %226 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %227 = load ptr, ptr %226, align 8, !tbaa !9
  %228 = load ptr, ptr %21, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TextBlob", ptr %228, i32 0, i32 3
  invoke void @_ZN3JPH9StreamOut5WriteIfTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 4 dereferenceable(4) %229)
          to label %230 unwind label %234

230:                                              ; preds = %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %231

231:                                              ; preds = %230
  %232 = load ptr, ptr %19, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::TextBlob", ptr %232, i32 1
  store ptr %233, ptr %19, align 8, !tbaa !5
  br label %192

234:                                              ; preds = %225, %220, %215, %209
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %5, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %238

238:                                              ; preds = %234, %205
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %239

239:                                              ; preds = %238, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %322

240:                                              ; preds = %196
  %241 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %242 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %241, i32 0, i32 2
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %242)
          to label %243 unwind label %120

243:                                              ; preds = %240
  %244 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %245 = load ptr, ptr %244, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %246 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %247 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %246, i32 0, i32 3
  %248 = invoke noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %247)
          to label %249 unwind label %265

249:                                              ; preds = %243
  %250 = trunc i64 %248 to i32
  store i32 %250, ptr %22, align 4, !tbaa !36
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %245, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %251 unwind label %265

251:                                              ; preds = %249
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %252 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %253 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %252, i32 0, i32 3
  store ptr %253, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %254 = load ptr, ptr %23, align 8, !tbaa !5
  %255 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %254)
          to label %256 unwind label %269

256:                                              ; preds = %251
  store ptr %255, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %257 = load ptr, ptr %23, align 8, !tbaa !5
  %258 = invoke noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %257)
          to label %259 unwind label %273

259:                                              ; preds = %256
  store ptr %258, ptr %25, align 8, !tbaa !5
  br label %260

260:                                              ; preds = %309, %259
  %261 = load ptr, ptr %24, align 8, !tbaa !5
  %262 = load ptr, ptr %25, align 8, !tbaa !5
  %263 = icmp ne ptr %261, %262
  br i1 %263, label %277, label %264

264:                                              ; preds = %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %318

265:                                              ; preds = %249, %243
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %5, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %322

269:                                              ; preds = %251
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %5, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %6, align 4
  br label %317

273:                                              ; preds = %256
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %5, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %6, align 4
  br label %316

277:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %278 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %278, ptr %26, align 8, !tbaa !5
  %279 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %280 = load ptr, ptr %279, align 8, !tbaa !9
  %281 = load ptr, ptr %26, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %281, i32 0, i32 0
  invoke void @_ZN3JPH9StreamOut5WriteINS_5Mat44ETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %280, ptr noundef nonnull align 16 dereferenceable(64) %282)
          to label %283 unwind label %312

283:                                              ; preds = %277
  %284 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %285 = load ptr, ptr %284, align 8, !tbaa !9
  %286 = load ptr, ptr %26, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %286, i32 0, i32 1
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %285, ptr noundef nonnull align 4 dereferenceable(4) %287)
          to label %288 unwind label %312

288:                                              ; preds = %283
  %289 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %290 = load ptr, ptr %289, align 8, !tbaa !9
  %291 = load ptr, ptr %26, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %291, i32 0, i32 2
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull align 4 dereferenceable(4) %292)
          to label %293 unwind label %312

293:                                              ; preds = %288
  %294 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %295 = load ptr, ptr %294, align 8, !tbaa !9
  %296 = load ptr, ptr %26, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %296, i32 0, i32 3
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer9ECullModeETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %295, ptr noundef nonnull align 4 dereferenceable(4) %297)
          to label %298 unwind label %312

298:                                              ; preds = %293
  %299 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %300 = load ptr, ptr %299, align 8, !tbaa !9
  %301 = load ptr, ptr %26, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %301, i32 0, i32 4
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer11ECastShadowETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %300, ptr noundef nonnull align 4 dereferenceable(4) %302)
          to label %303 unwind label %312

303:                                              ; preds = %298
  %304 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 2
  %305 = load ptr, ptr %304, align 8, !tbaa !9
  %306 = load ptr, ptr %26, align 8, !tbaa !5
  %307 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %306, i32 0, i32 5
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer9EDrawModeETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %305, ptr noundef nonnull align 4 dereferenceable(4) %307)
          to label %308 unwind label %312

308:                                              ; preds = %303
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %309

309:                                              ; preds = %308
  %310 = load ptr, ptr %24, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::GeometryBlob", ptr %310, i32 1
  store ptr %311, ptr %24, align 8, !tbaa !5
  br label %260

312:                                              ; preds = %303, %298, %293, %288, %283, %277
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %5, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  br label %316

316:                                              ; preds = %312, %273
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %317

317:                                              ; preds = %316, %269
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %322

318:                                              ; preds = %264
  %319 = getelementptr inbounds %"class.JPH::DebugRendererRecorder", ptr %27, i32 0, i32 6
  %320 = getelementptr inbounds %"struct.JPH::DebugRendererRecorder::Frame", ptr %319, i32 0, i32 3
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %320)
          to label %321 unwind label %120

321:                                              ; preds = %318
  call void @_ZNSt10lock_guardIN3JPH5MutexEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  ret void

322:                                              ; preds = %317, %265, %239, %197, %171, %124, %120, %94, %57, %53
  call void @_ZNSt10lock_guardIN3JPH5MutexEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %323

323:                                              ; preds = %322
  %324 = load ptr, ptr %5, align 8
  %325 = load i32, ptr %6, align 4
  %326 = insertvalue { ptr, i32 } poison, ptr %324, 0
  %327 = insertvalue { ptr, i32 } %326, i32 %325, 1
  resume { ptr, i32 } %327
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 368}
!10 = !{!"_ZTSN3JPH21DebugRendererRecorderE", !11, i64 0, !22, i64 320, !6, i64 368, !15, i64 376, !15, i64 380, !27, i64 384, !29, i64 416}
!11 = !{!"_ZTSN3JPH13DebugRendererE", !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !13, i64 64, !13, i64 96, !16, i64 128, !16, i64 160, !18, i64 192, !18, i64 224, !20, i64 256, !20, i64 288}
!12 = !{!"_ZTSN3JPH3RefINS_13DebugRenderer8GeometryEEE", !6, i64 0}
!13 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15SwingConeLimitsENS_3RefINS1_8GeometryEEENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !14, i64 0}
!14 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15SwingConeLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer18SwingPyramidLimitsENS_3RefINS1_8GeometryEEENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !17, i64 0}
!17 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer18SwingPyramidLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!18 = !{!"_ZTSN3JPH12UnorderedMapIfNS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIfEESt8equal_toIfEEE", !19, i64 0}
!19 = !{!"_ZTSN3JPH9HashTableIfSt4pairIfNS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIfS5_EENS_4HashIfEESt8equal_toIfEEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!20 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15TaperedCylinderENS_3RefINS1_8GeometryEEENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !21, i64 0}
!21 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15TaperedCylinderESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!22 = !{!"_ZTSN3JPH5MutexE", !23, i64 0, !25, i64 40}
!23 = !{!"_ZTSSt5mutex", !24, i64 0}
!24 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!25 = !{!"_ZTSNSt6thread2idE", !26, i64 0}
!26 = !{!"long", !7, i64 0}
!27 = !{!"_ZTSN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEjNS_4HashIS4_EESt8equal_toIS4_EEE", !28, i64 0}
!28 = !{!"_ZTSN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_jENS_18UnorderedMapDetailIS4_jEENS_4HashIS4_EESt8equal_toIS4_EEE", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24}
!29 = !{!"_ZTSN3JPH21DebugRendererRecorder5FrameE", !30, i64 0, !31, i64 24, !32, i64 48, !33, i64 72}
!30 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!31 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!32 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!33 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEEE", !26, i64 0, !26, i64 8, !6, i64 16}
!34 = !{!35, !35, i64 0}
!35 = !{!"_ZTSN3JPH21DebugRendererRecorder8ECommandE", !7, i64 0}
!36 = !{!15, !15, 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.std::lock_guard" = type { ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH21DebugRendererRecorder8EndFrameEv(ptr noundef nonnull align 8 dereferenceable(512) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::lock_guard", align 8
  %3 = alloca i8, align 1
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #5
  %8 = getelementptr inbounds i8, ptr %0, i64 320
  call void @_ZNSt10lock_guardIN3JPH5MutexEEC2ERS1_(ptr noundef nonnull align 8 dereferenceable(8) %2, ptr noundef nonnull align 8 dereferenceable(48) %8)
  %9 = getelementptr inbounds i8, ptr %0, i64 368
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #5
  store i8 3, ptr %3, align 1, !tbaa !33
  invoke void @_ZN3JPH9StreamOut5WriteINS_21DebugRendererRecorder8ECommandETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %11 unwind label %19

11:                                               ; preds = %1
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #5
  %12 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #5
  %13 = getelementptr inbounds i8, ptr %0, i64 416
  %14 = call noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %15 = trunc i64 %14 to i32
  store i32 %15, ptr %4, align 4, !tbaa !35
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %16 unwind label %21

16:                                               ; preds = %11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #5
  %17 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %18 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %.not53 = icmp eq ptr %17, %18
  br i1 %.not53, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %30, %16
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %34 unwind label %42

19:                                               ; preds = %1
  %20 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #5
  br label %118

21:                                               ; preds = %11
  %22 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #5
  br label %118

.lr.ph:                                           ; preds = %16, %30
  %.04654 = phi ptr [ %31, %30 ], [ %17, %16 ]
  %23 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 16 dereferenceable(16) %.04654)
          to label %24 unwind label %32

24:                                               ; preds = %.lr.ph
  %25 = load ptr, ptr %9, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %.04654, i64 16
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 16 dereferenceable(16) %26)
          to label %27 unwind label %32

27:                                               ; preds = %24
  %28 = load ptr, ptr %9, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %.04654, i64 32
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %28, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %30 unwind label %32

30:                                               ; preds = %27
  %31 = getelementptr inbounds i8, ptr %.04654, i64 48
  %.not = icmp eq ptr %31, %18
  br i1 %.not, label %._crit_edge, label %.lr.ph

32:                                               ; preds = %27, %24, %.lr.ph
  %33 = landingpad { ptr, i32 }
          cleanup
  br label %118

34:                                               ; preds = %._crit_edge
  %35 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  %36 = getelementptr inbounds i8, ptr %0, i64 440
  %37 = call noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %36)
  %38 = trunc i64 %37 to i32
  store i32 %38, ptr %5, align 4, !tbaa !35
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 4 dereferenceable(4) %5)
          to label %39 unwind label %44

39:                                               ; preds = %34
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  %40 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %36)
  %41 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %36)
  %.not4955 = icmp eq ptr %40, %41
  br i1 %.not4955, label %._crit_edge59, label %.lr.ph58

._crit_edge59:                                    ; preds = %59, %39
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %63 unwind label %42

42:                                               ; preds = %._crit_edge69, %._crit_edge64, %._crit_edge59, %._crit_edge
  %43 = landingpad { ptr, i32 }
          cleanup
  br label %118

44:                                               ; preds = %34
  %45 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  br label %118

.lr.ph58:                                         ; preds = %39, %59
  %.04756 = phi ptr [ %60, %59 ], [ %40, %39 ]
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 16 dereferenceable(16) %.04756)
          to label %47 unwind label %61

47:                                               ; preds = %.lr.ph58
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %.04756, i64 16
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 16 dereferenceable(16) %49)
          to label %50 unwind label %61

50:                                               ; preds = %47
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %.04756, i64 32
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 16 dereferenceable(16) %52)
          to label %53 unwind label %61

53:                                               ; preds = %50
  %54 = load ptr, ptr %9, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %.04756, i64 48
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 4 dereferenceable(4) %55)
          to label %56 unwind label %61

56:                                               ; preds = %53
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %.04756, i64 52
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer11ECastShadowETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 4 dereferenceable(4) %58)
          to label %59 unwind label %61

59:                                               ; preds = %56
  %60 = getelementptr inbounds i8, ptr %.04756, i64 64
  %.not49 = icmp eq ptr %60, %41
  br i1 %.not49, label %._crit_edge59, label %.lr.ph58

61:                                               ; preds = %56, %53, %50, %47, %.lr.ph58
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %118

63:                                               ; preds = %._crit_edge59
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  %65 = getelementptr inbounds i8, ptr %0, i64 464
  %66 = call noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %65)
  %67 = trunc i64 %66 to i32
  store i32 %67, ptr %6, align 4, !tbaa !35
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %68 unwind label %71

68:                                               ; preds = %63
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  %69 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %65)
  %70 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %65)
  %.not5060 = icmp eq ptr %69, %70
  br i1 %.not5060, label %._crit_edge64, label %.lr.ph63

._crit_edge64:                                    ; preds = %83, %68
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %65)
          to label %87 unwind label %42

71:                                               ; preds = %63
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  br label %118

.lr.ph63:                                         ; preds = %68, %83
  %.04861 = phi ptr [ %84, %83 ], [ %69, %68 ]
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH9StreamOut5WriteERKNS_4Vec3E(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull align 16 dereferenceable(16) %.04861)
          to label %74 unwind label %85

74:                                               ; preds = %.lr.ph63
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %.04861, i64 16
  invoke void @_ZN3JPH9StreamOut5WriteIcSt11char_traitsIcENS_12STLAllocatorIcEEEEvRKNSt7__cxx1112basic_stringIT_T0_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %77 unwind label %85

77:                                               ; preds = %74
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %.04861, i64 48
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 4 dereferenceable(4) %79)
          to label %80 unwind label %85

80:                                               ; preds = %77
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = getelementptr inbounds i8, ptr %.04861, i64 52
  invoke void @_ZN3JPH9StreamOut5WriteIfTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %83 unwind label %85

83:                                               ; preds = %80
  %84 = getelementptr inbounds i8, ptr %.04861, i64 64
  %.not50 = icmp eq ptr %84, %70
  br i1 %.not50, label %._crit_edge64, label %.lr.ph63

85:                                               ; preds = %80, %77, %74, %.lr.ph63
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %118

87:                                               ; preds = %._crit_edge64
  %88 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %89 = getelementptr inbounds i8, ptr %0, i64 488
  %90 = call noundef i64 @_ZNK3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %89)
  %91 = trunc i64 %90 to i32
  store i32 %91, ptr %7, align 4, !tbaa !35
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %92 unwind label %95

92:                                               ; preds = %87
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  %93 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %89)
  %94 = call noundef ptr @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %89)
  %.not5165 = icmp eq ptr %93, %94
  br i1 %.not5165, label %._crit_edge69, label %.lr.ph68

._crit_edge69:                                    ; preds = %113, %92
  invoke void @_ZN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %89)
          to label %117 unwind label %42

95:                                               ; preds = %87
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %118

.lr.ph68:                                         ; preds = %92, %113
  %.04566 = phi ptr [ %114, %113 ], [ %93, %92 ]
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN3JPH9StreamOut5WriteINS_5Mat44ETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull align 16 dereferenceable(64) %.04566)
          to label %98 unwind label %115

98:                                               ; preds = %.lr.ph68
  %99 = load ptr, ptr %9, align 8, !tbaa !5
  %100 = getelementptr inbounds i8, ptr %.04566, i64 64
  invoke void @_ZN3JPH9StreamOut5WriteINS_5ColorETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS4_(ptr noundef nonnull align 8 dereferenceable(8) %99, ptr noundef nonnull align 4 dereferenceable(4) %100)
          to label %101 unwind label %115

101:                                              ; preds = %98
  %102 = load ptr, ptr %9, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %.04566, i64 68
  invoke void @_ZN3JPH9StreamOut5WriteIjTnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS3_(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef nonnull align 4 dereferenceable(4) %103)
          to label %104 unwind label %115

104:                                              ; preds = %101
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %.04566, i64 72
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer9ECullModeETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 4 dereferenceable(4) %106)
          to label %107 unwind label %115

107:                                              ; preds = %104
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %.04566, i64 76
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer11ECastShadowETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %108, ptr noundef nonnull align 4 dereferenceable(4) %109)
          to label %110 unwind label %115

110:                                              ; preds = %107
  %111 = load ptr, ptr %9, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %.04566, i64 80
  invoke void @_ZN3JPH9StreamOut5WriteINS_13DebugRenderer9EDrawModeETnNSt9enable_ifIXsr3stdE23is_trivially_copyable_vIT_EEbE4typeELb1EEEvRKS5_(ptr noundef nonnull align 8 dereferenceable(8) %111, ptr noundef nonnull align 4 dereferenceable(4) %112)
          to label %113 unwind label %115

113:                                              ; preds = %110
  %114 = getelementptr inbounds i8, ptr %.04566, i64 96
  %.not51 = icmp eq ptr %114, %94
  br i1 %.not51, label %._crit_edge69, label %.lr.ph68

115:                                              ; preds = %110, %107, %104, %101, %98, %.lr.ph68
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %118

117:                                              ; preds = %._crit_edge69
  call void @_ZNSt10lock_guardIN3JPH5MutexEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #5
  ret void

118:                                              ; preds = %115, %95, %85, %71, %61, %44, %42, %32, %21, %19
  %.pn = phi { ptr, i32 } [ %33, %32 ], [ %62, %61 ], [ %86, %85 ], [ %116, %115 ], [ %43, %42 ], [ %96, %95 ], [ %72, %71 ], [ %45, %44 ], [ %22, %21 ], [ %20, %19 ]
  call void @_ZNSt10lock_guardIN3JPH5MutexEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %2) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #5
  resume { ptr, i32 } %.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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, !9, i64 368}
!6 = !{!"_ZTSN3JPH21DebugRendererRecorderE", !7, i64 0, !21, i64 320, !9, i64 368, !14, i64 376, !14, i64 380, !26, i64 384, !28, i64 416}
!7 = !{!"_ZTSN3JPH13DebugRendererE", !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48, !8, i64 56, !12, i64 64, !12, i64 96, !15, i64 128, !15, i64 160, !17, i64 192, !17, i64 224, !19, i64 256, !19, i64 288}
!8 = !{!"_ZTSN3JPH3RefINS_13DebugRenderer8GeometryEEE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15SwingConeLimitsENS_3RefINS1_8GeometryEEENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !13, i64 0}
!13 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15SwingConeLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21SwingConeLimitsHasherESt8equal_toIS2_EEE", !9, i64 0, !9, i64 8, !14, i64 16, !14, i64 20, !14, i64 24}
!14 = !{!"int", !10, i64 0}
!15 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer18SwingPyramidLimitsENS_3RefINS1_8GeometryEEENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !16, i64 0}
!16 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer18SwingPyramidLimitsESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_24SwingPyramidLimitsHasherESt8equal_toIS2_EEE", !9, i64 0, !9, i64 8, !14, i64 16, !14, i64 20, !14, i64 24}
!17 = !{!"_ZTSN3JPH12UnorderedMapIfNS_3RefINS_13DebugRenderer8GeometryEEENS_4HashIfEESt8equal_toIfEEE", !18, i64 0}
!18 = !{!"_ZTSN3JPH9HashTableIfSt4pairIfNS_3RefINS_13DebugRenderer8GeometryEEEENS_18UnorderedMapDetailIfS5_EENS_4HashIfEESt8equal_toIfEEE", !9, i64 0, !9, i64 8, !14, i64 16, !14, i64 20, !14, i64 24}
!19 = !{!"_ZTSN3JPH12UnorderedMapINS_13DebugRenderer15TaperedCylinderENS_3RefINS1_8GeometryEEENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !20, i64 0}
!20 = !{!"_ZTSN3JPH9HashTableINS_13DebugRenderer15TaperedCylinderESt4pairIS2_NS_3RefINS1_8GeometryEEEENS_18UnorderedMapDetailIS2_S6_EENS1_21TaperedCylinderHasherESt8equal_toIS2_EEE", !9, i64 0, !9, i64 8, !14, i64 16, !14, i64 20, !14, i64 24}
!21 = !{!"_ZTSN3JPH5MutexE", !22, i64 0, !24, i64 40}
!22 = !{!"_ZTSSt5mutex", !23, i64 0}
!23 = !{!"_ZTSSt12__mutex_base", !10, i64 0}
!24 = !{!"_ZTSNSt6thread2idE", !25, i64 0}
!25 = !{!"long", !10, i64 0}
!26 = !{!"_ZTSN3JPH12UnorderedMapINS_3RefINS_13DebugRenderer8GeometryEEEjNS_4HashIS4_EESt8equal_toIS4_EEE", !27, i64 0}
!27 = !{!"_ZTSN3JPH9HashTableINS_3RefINS_13DebugRenderer8GeometryEEESt4pairIS4_jENS_18UnorderedMapDetailIS4_jEENS_4HashIS4_EESt8equal_toIS4_EEE", !9, i64 0, !9, i64 8, !14, i64 16, !14, i64 20, !14, i64 24}
!28 = !{!"_ZTSN3JPH21DebugRendererRecorder5FrameE", !29, i64 0, !30, i64 24, !31, i64 48, !32, i64 72}
!29 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder8LineBlobENS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !9, i64 16}
!30 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder12TriangleBlobENS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !9, i64 16}
!31 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder8TextBlobENS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !9, i64 16}
!32 = !{!"_ZTSN3JPH5ArrayINS_21DebugRendererRecorder12GeometryBlobENS_12STLAllocatorIS2_EEEE", !25, i64 0, !25, i64 8, !9, i64 16}
!33 = !{!34, !34, i64 0}
!34 = !{!"_ZTSN3JPH21DebugRendererRecorder8ECommandE", !10, i64 0}
!35 = !{!14, !14, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass