; LLVM IR from erwincoumans/tiny-differentiable-simulator :: src/visualizer/opengl (tiny_gl_instancing_renderer)

; 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::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }
%class.TinyGLInstancingRenderer = type <{ ptr, %"class.std::vector", ptr, i8, i8, [2 x i8], i32, i32, i32, i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<b3GraphicsInstance *, std::allocator<b3GraphicsInstance *>>::_Vector_impl" }
%"struct.std::_Vector_base<b3GraphicsInstance *, std::allocator<b3GraphicsInstance *>>::_Vector_impl" = type { %"struct.std::_Vector_base<b3GraphicsInstance *, std::allocator<b3GraphicsInstance *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<b3GraphicsInstance *, std::allocator<b3GraphicsInstance *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.GLInstanceRendererInternalData = type <{ %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", i32, i32, i32, i32, i32, [4 x i8] }>
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.InternalDataRenderer = type <{ %struct.GLInstanceRendererInternalData.base, [4 x i8], %struct.TinyCamera, ptr, [16 x float], [16 x float], [16 x float], [16 x float], [16 x float], i8, [3 x i8], %"struct.TINY::TinyVector3", %"struct.TINY::TinyVector3", i32, %"class.std::vector.5", ptr, i32, i32, %class.TinyResizablePool, i32, i32, float, i8, [3 x i8] }>
%struct.GLInstanceRendererInternalData.base = type <{ %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", %"class.std::vector.0", i32, i32, i32, i32, i32 }>
%struct.TinyCamera = type { ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<InternalTextureHandle, std::allocator<InternalTextureHandle>>::_Vector_impl" }
%"struct.std::_Vector_base<InternalTextureHandle, std::allocator<InternalTextureHandle>>::_Vector_impl" = type { %"struct.std::_Vector_base<InternalTextureHandle, std::allocator<InternalTextureHandle>>::_Vector_impl_data" }
%"struct.std::_Vector_base<InternalTextureHandle, std::allocator<InternalTextureHandle>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.TinyResizablePool = type { ptr, %"class.std::vector.10", i32, i32 }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>, std::allocator<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>>>::_Vector_impl" }
%"struct.std::_Vector_base<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>, std::allocator<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>>>::_Vector_impl" = type { %"struct.std::_Vector_base<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>, std::allocator<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>, std::allocator<TinyPoolBodyHandle<TinyPublicGraphicsInstanceData>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.TinyPublicGraphicsInstanceData = type { i32, i32, [4 x float], [4 x float], [4 x float], [4 x float] }
%struct.b3GraphicsInstance = type <{ i32, i32, i32, i32, i32, i32, %"class.std::vector.15", i32, i32, i32, float, %"struct.TINY::TinyVector3", i32, [4 x i8] }>

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [130 x i8], align 1
@__PRETTY_FUNCTION__._ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv = external hidden unnamed_addr constant [60 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

; 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 noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv(ptr noundef nonnull align 8 dereferenceable(60) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::vector.15", align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca %"struct.TINY::TinyVector3", align 4
  %21 = alloca %"struct.TINY::TinyQuaternion", align 4
  %22 = alloca %"struct.TINY::TinyVector3", align 4
  %23 = alloca %"struct.TINY::TinyVector3", align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %24 = load ptr, ptr %2, align 8
  %25 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %26 = load ptr, ptr %25, align 8, !tbaa !9
  %27 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %26, i32 0, i32 6
  store i32 0, ptr %27, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #4
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  %28 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %29 = load ptr, ptr %28, align 8, !tbaa !9
  %30 = getelementptr inbounds %struct.InternalDataRenderer, ptr %29, i32 0, i32 18
  invoke void @_ZNK17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE16get_used_handlesERSt6vectorIiSaIiEE(ptr noundef nonnull align 8 dereferenceable(40) %30, ptr noundef nonnull align 8 dereferenceable(24) %3)
          to label %31 unwind label %38

31:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 0, ptr %6, align 4, !tbaa !23
  br label %32

32:                                               ; preds = %246, %31
  %33 = load i32, ptr %6, align 4, !tbaa !23
  %34 = sext i32 %33 to i64
  %35 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  %36 = icmp ult i64 %34, %35
  br i1 %36, label %42, label %37

37:                                               ; preds = %32
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %249

38:                                               ; preds = %1
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %4, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %5, align 4
  br label %477

42:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %43 = load i32, ptr %6, align 4, !tbaa !23
  %44 = sext i32 %43 to i64
  %45 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %44) #4
  %46 = load i32, ptr %45, align 4, !tbaa !23
  store i32 %46, ptr %7, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %47 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = getelementptr inbounds %struct.InternalDataRenderer, ptr %48, i32 0, i32 18
  %50 = load i32, ptr %7, align 4, !tbaa !23
  %51 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %49, i32 noundef %50)
          to label %52 unwind label %57

52:                                               ; preds = %42
  store ptr %51, ptr %8, align 8, !tbaa !5
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = icmp ne ptr %53, null
  br i1 %54, label %55, label %56

55:                                               ; preds = %52
  br label %62

56:                                               ; preds = %52
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 803, ptr noundef @__PRETTY_FUNCTION__._ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv) #5
  unreachable

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

61:                                               ; No predecessors!
  br label %62

62:                                               ; preds = %61, %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %63, i32 0, i32 1
  %65 = load i32, ptr %64, align 4, !tbaa !24
  store i32 %65, ptr %9, align 4, !tbaa !23
  %66 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %67, i32 0, i32 0
  %69 = load i32, ptr %9, align 4, !tbaa !23
  %70 = mul nsw i32 %69, 4
  %71 = add nsw i32 %70, 0
  %72 = sext i32 %71 to i64
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %68, i64 noundef %72) #4
  %74 = load float, ptr %73, align 4, !tbaa !26
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %75, i32 0, i32 2
  %77 = getelementptr inbounds [4 x float], ptr %76, i64 0, i64 0
  store float %74, ptr %77, align 4, !tbaa !26
  %78 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %79 = load ptr, ptr %78, align 8, !tbaa !9
  %80 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %79, i32 0, i32 0
  %81 = load i32, ptr %9, align 4, !tbaa !23
  %82 = mul nsw i32 %81, 4
  %83 = add nsw i32 %82, 1
  %84 = sext i32 %83 to i64
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %84) #4
  %86 = load float, ptr %85, align 4, !tbaa !26
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %87, i32 0, i32 2
  %89 = getelementptr inbounds [4 x float], ptr %88, i64 0, i64 1
  store float %86, ptr %89, align 4, !tbaa !26
  %90 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %91 = load ptr, ptr %90, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %91, i32 0, i32 0
  %93 = load i32, ptr %9, align 4, !tbaa !23
  %94 = mul nsw i32 %93, 4
  %95 = add nsw i32 %94, 2
  %96 = sext i32 %95 to i64
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %96) #4
  %98 = load float, ptr %97, align 4, !tbaa !26
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %99, i32 0, i32 2
  %101 = getelementptr inbounds [4 x float], ptr %100, i64 0, i64 2
  store float %98, ptr %101, align 4, !tbaa !26
  %102 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  %104 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %103, i32 0, i32 1
  %105 = load i32, ptr %9, align 4, !tbaa !23
  %106 = mul nsw i32 %105, 4
  %107 = add nsw i32 %106, 0
  %108 = sext i32 %107 to i64
  %109 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %104, i64 noundef %108) #4
  %110 = load float, ptr %109, align 4, !tbaa !26
  %111 = load ptr, ptr %8, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %111, i32 0, i32 3
  %113 = getelementptr inbounds [4 x float], ptr %112, i64 0, i64 0
  store float %110, ptr %113, align 4, !tbaa !26
  %114 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %115 = load ptr, ptr %114, align 8, !tbaa !9
  %116 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %9, align 4, !tbaa !23
  %118 = mul nsw i32 %117, 4
  %119 = add nsw i32 %118, 1
  %120 = sext i32 %119 to i64
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %116, i64 noundef %120) #4
  %122 = load float, ptr %121, align 4, !tbaa !26
  %123 = load ptr, ptr %8, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %123, i32 0, i32 3
  %125 = getelementptr inbounds [4 x float], ptr %124, i64 0, i64 1
  store float %122, ptr %125, align 4, !tbaa !26
  %126 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %127, i32 0, i32 1
  %129 = load i32, ptr %9, align 4, !tbaa !23
  %130 = mul nsw i32 %129, 4
  %131 = add nsw i32 %130, 2
  %132 = sext i32 %131 to i64
  %133 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %128, i64 noundef %132) #4
  %134 = load float, ptr %133, align 4, !tbaa !26
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %135, i32 0, i32 3
  %137 = getelementptr inbounds [4 x float], ptr %136, i64 0, i64 2
  store float %134, ptr %137, align 4, !tbaa !26
  %138 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %139 = load ptr, ptr %138, align 8, !tbaa !9
  %140 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %139, i32 0, i32 1
  %141 = load i32, ptr %9, align 4, !tbaa !23
  %142 = mul nsw i32 %141, 4
  %143 = add nsw i32 %142, 3
  %144 = sext i32 %143 to i64
  %145 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %140, i64 noundef %144) #4
  %146 = load float, ptr %145, align 4, !tbaa !26
  %147 = load ptr, ptr %8, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %147, i32 0, i32 3
  %149 = getelementptr inbounds [4 x float], ptr %148, i64 0, i64 3
  store float %146, ptr %149, align 4, !tbaa !26
  %150 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %151, i32 0, i32 2
  %153 = load i32, ptr %9, align 4, !tbaa !23
  %154 = mul nsw i32 %153, 4
  %155 = add nsw i32 %154, 0
  %156 = sext i32 %155 to i64
  %157 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %156) #4
  %158 = load float, ptr %157, align 4, !tbaa !26
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %159, i32 0, i32 4
  %161 = getelementptr inbounds [4 x float], ptr %160, i64 0, i64 0
  store float %158, ptr %161, align 4, !tbaa !26
  %162 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %163 = load ptr, ptr %162, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %163, i32 0, i32 2
  %165 = load i32, ptr %9, align 4, !tbaa !23
  %166 = mul nsw i32 %165, 4
  %167 = add nsw i32 %166, 1
  %168 = sext i32 %167 to i64
  %169 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %164, i64 noundef %168) #4
  %170 = load float, ptr %169, align 4, !tbaa !26
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %171, i32 0, i32 4
  %173 = getelementptr inbounds [4 x float], ptr %172, i64 0, i64 1
  store float %170, ptr %173, align 4, !tbaa !26
  %174 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %175 = load ptr, ptr %174, align 8, !tbaa !9
  %176 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %175, i32 0, i32 2
  %177 = load i32, ptr %9, align 4, !tbaa !23
  %178 = mul nsw i32 %177, 4
  %179 = add nsw i32 %178, 2
  %180 = sext i32 %179 to i64
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %176, i64 noundef %180) #4
  %182 = load float, ptr %181, align 4, !tbaa !26
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %183, i32 0, i32 4
  %185 = getelementptr inbounds [4 x float], ptr %184, i64 0, i64 2
  store float %182, ptr %185, align 4, !tbaa !26
  %186 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %187 = load ptr, ptr %186, align 8, !tbaa !9
  %188 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %187, i32 0, i32 2
  %189 = load i32, ptr %9, align 4, !tbaa !23
  %190 = mul nsw i32 %189, 4
  %191 = add nsw i32 %190, 3
  %192 = sext i32 %191 to i64
  %193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %188, i64 noundef %192) #4
  %194 = load float, ptr %193, align 4, !tbaa !26
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %195, i32 0, i32 4
  %197 = getelementptr inbounds [4 x float], ptr %196, i64 0, i64 3
  store float %194, ptr %197, align 4, !tbaa !26
  %198 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %199 = load ptr, ptr %198, align 8, !tbaa !9
  %200 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %199, i32 0, i32 3
  %201 = load i32, ptr %9, align 4, !tbaa !23
  %202 = mul nsw i32 %201, 4
  %203 = add nsw i32 %202, 0
  %204 = sext i32 %203 to i64
  %205 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %200, i64 noundef %204) #4
  %206 = load float, ptr %205, align 4, !tbaa !26
  %207 = load ptr, ptr %8, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %207, i32 0, i32 5
  %209 = getelementptr inbounds [4 x float], ptr %208, i64 0, i64 0
  store float %206, ptr %209, align 4, !tbaa !26
  %210 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %211 = load ptr, ptr %210, align 8, !tbaa !9
  %212 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %211, i32 0, i32 3
  %213 = load i32, ptr %9, align 4, !tbaa !23
  %214 = mul nsw i32 %213, 4
  %215 = add nsw i32 %214, 1
  %216 = sext i32 %215 to i64
  %217 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %212, i64 noundef %216) #4
  %218 = load float, ptr %217, align 4, !tbaa !26
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %219, i32 0, i32 5
  %221 = getelementptr inbounds [4 x float], ptr %220, i64 0, i64 1
  store float %218, ptr %221, align 4, !tbaa !26
  %222 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %223 = load ptr, ptr %222, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %223, i32 0, i32 3
  %225 = load i32, ptr %9, align 4, !tbaa !23
  %226 = mul nsw i32 %225, 4
  %227 = add nsw i32 %226, 2
  %228 = sext i32 %227 to i64
  %229 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %224, i64 noundef %228) #4
  %230 = load float, ptr %229, align 4, !tbaa !26
  %231 = load ptr, ptr %8, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %231, i32 0, i32 5
  %233 = getelementptr inbounds [4 x float], ptr %232, i64 0, i64 2
  store float %230, ptr %233, align 4, !tbaa !26
  %234 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %235 = load ptr, ptr %234, align 8, !tbaa !9
  %236 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %235, i32 0, i32 3
  %237 = load i32, ptr %9, align 4, !tbaa !23
  %238 = mul nsw i32 %237, 4
  %239 = add nsw i32 %238, 3
  %240 = sext i32 %239 to i64
  %241 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %236, i64 noundef %240) #4
  %242 = load float, ptr %241, align 4, !tbaa !26
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %243, i32 0, i32 5
  %245 = getelementptr inbounds [4 x float], ptr %244, i64 0, i64 3
  store float %242, ptr %245, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %246

246:                                              ; preds = %62
  %247 = load i32, ptr %6, align 4, !tbaa !23
  %248 = add nsw i32 %247, 1
  store i32 %248, ptr %6, align 4, !tbaa !23
  br label %32, !llvm.loop !28

249:                                              ; preds = %37
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !23
  br label %250

250:                                              ; preds = %276, %249
  %251 = load i32, ptr %10, align 4, !tbaa !23
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %254 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %253) #4
  %255 = icmp ult i64 %252, %254
  br i1 %255, label %257, label %256

256:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %279

257:                                              ; preds = %250
  %258 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %259 = load i32, ptr %10, align 4, !tbaa !23
  %260 = sext i32 %259 to i64
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %258, i64 noundef %260) #4
  %262 = load ptr, ptr %261, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %262, i32 0, i32 5
  store i32 0, ptr %263, align 4, !tbaa !30
  %264 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %265 = load i32, ptr %10, align 4, !tbaa !23
  %266 = sext i32 %265 to i64
  %267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %264, i64 noundef %266) #4
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %268, i32 0, i32 7
  store i32 0, ptr %269, align 8, !tbaa !37
  %270 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %271 = load i32, ptr %10, align 4, !tbaa !23
  %272 = sext i32 %271 to i64
  %273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %270, i64 noundef %272) #4
  %274 = load ptr, ptr %273, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %274, i32 0, i32 6
  call void @_ZNSt6vectorIiSaIiEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %275) #4
  br label %276

276:                                              ; preds = %257
  %277 = load i32, ptr %10, align 4, !tbaa !23
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %10, align 4, !tbaa !23
  br label %250, !llvm.loop !38

279:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !23
  br label %280

280:                                              ; preds = %327, %279
  %281 = load i32, ptr %11, align 4, !tbaa !23
  %282 = sext i32 %281 to i64
  %283 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  %284 = icmp ult i64 %282, %283
  br i1 %284, label %286, label %285

285:                                              ; preds = %280
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %330

286:                                              ; preds = %280
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %287 = load i32, ptr %11, align 4, !tbaa !23
  %288 = sext i32 %287 to i64
  %289 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %288) #4
  %290 = load i32, ptr %289, align 4, !tbaa !23
  store i32 %290, ptr %12, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %291 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %292 = load ptr, ptr %291, align 8, !tbaa !9
  %293 = getelementptr inbounds %struct.InternalDataRenderer, ptr %292, i32 0, i32 18
  %294 = load i32, ptr %12, align 4, !tbaa !23
  %295 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %293, i32 noundef %294)
          to label %296 unwind label %322

296:                                              ; preds = %286
  store ptr %295, ptr %13, align 8, !tbaa !5
  %297 = load ptr, ptr %13, align 8, !tbaa !5
  %298 = icmp ne ptr %297, null
  br i1 %298, label %299, label %326

299:                                              ; preds = %296
  %300 = load ptr, ptr %13, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %300, i32 0, i32 0
  %302 = load i32, ptr %301, align 4, !tbaa !39
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %305 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %304) #4
  %306 = icmp ult i64 %303, %305
  br i1 %306, label %307, label %326

307:                                              ; preds = %299
  %308 = load ptr, ptr %13, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %308, i32 0, i32 0
  %310 = load i32, ptr %309, align 4, !tbaa !39
  %311 = icmp sge i32 %310, 0
  br i1 %311, label %312, label %326

312:                                              ; preds = %307
  %313 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %314 = load ptr, ptr %13, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %314, i32 0, i32 0
  %316 = load i32, ptr %315, align 4, !tbaa !39
  %317 = sext i32 %316 to i64
  %318 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %313, i64 noundef %317) #4
  %319 = load ptr, ptr %318, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %319, i32 0, i32 6
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %320, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %321 unwind label %322

321:                                              ; preds = %312
  br label %326

322:                                              ; preds = %312, %286
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %4, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %477

326:                                              ; preds = %321, %307, %299, %296
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %327

327:                                              ; preds = %326
  %328 = load i32, ptr %11, align 4, !tbaa !23
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %11, align 4, !tbaa !23
  br label %280, !llvm.loop !40

330:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !23
  %331 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %332 = load ptr, ptr %331, align 8, !tbaa !9
  %333 = getelementptr inbounds %struct.GLInstanceRendererInternalData, ptr %332, i32 0, i32 6
  store i32 0, ptr %333, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !23
  br label %334

334:                                              ; preds = %473, %330
  %335 = load i32, ptr %15, align 4, !tbaa !23
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %338 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %337) #4
  %339 = icmp ult i64 %336, %338
  br i1 %339, label %341, label %340

340:                                              ; preds = %334
  store i32 11, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %476

341:                                              ; preds = %334
  %342 = load i32, ptr %14, align 4, !tbaa !23
  %343 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %344 = load i32, ptr %15, align 4, !tbaa !23
  %345 = sext i32 %344 to i64
  %346 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %343, i64 noundef %345) #4
  %347 = load ptr, ptr %346, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %347, i32 0, i32 7
  store i32 %342, ptr %348, align 8, !tbaa !37
  %349 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %350 = load i32, ptr %15, align 4, !tbaa !23
  %351 = sext i32 %350 to i64
  %352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %349, i64 noundef %351) #4
  %353 = load ptr, ptr %352, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %353, i32 0, i32 5
  store i32 0, ptr %354, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 0, ptr %17, align 4, !tbaa !23
  br label %355

355:                                              ; preds = %445, %341
  %356 = load i32, ptr %17, align 4, !tbaa !23
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %359 = load i32, ptr %15, align 4, !tbaa !23
  %360 = sext i32 %359 to i64
  %361 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %358, i64 noundef %360) #4
  %362 = load ptr, ptr %361, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %362, i32 0, i32 6
  %364 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %363) #4
  %365 = icmp ult i64 %357, %364
  br i1 %365, label %367, label %366

366:                                              ; preds = %355
  store i32 14, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %472

367:                                              ; preds = %355
  %368 = load i32, ptr %14, align 4, !tbaa !23
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %14, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %370 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 1
  %371 = load i32, ptr %15, align 4, !tbaa !23
  %372 = sext i32 %371 to i64
  %373 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %370, i64 noundef %372) #4
  %374 = load ptr, ptr %373, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.b3GraphicsInstance, ptr %374, i32 0, i32 6
  %376 = load i32, ptr %17, align 4, !tbaa !23
  %377 = sext i32 %376 to i64
  %378 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %375, i64 noundef %377) #4
  %379 = load i32, ptr %378, align 4, !tbaa !23
  store i32 %379, ptr %18, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %380 = getelementptr inbounds %class.TinyGLInstancingRenderer, ptr %24, i32 0, i32 2
  %381 = load ptr, ptr %380, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.InternalDataRenderer, ptr %381, i32 0, i32 18
  %383 = load i32, ptr %18, align 4, !tbaa !23
  %384 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %382, i32 noundef %383)
          to label %385 unwind label %448

385:                                              ; preds = %367
  store ptr %384, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #4
  %386 = load ptr, ptr %19, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %386, i32 0, i32 2
  %388 = getelementptr inbounds [4 x float], ptr %387, i64 0, i64 0
  %389 = load float, ptr %388, align 4, !tbaa !26
  %390 = load ptr, ptr %19, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %390, i32 0, i32 2
  %392 = getelementptr inbounds [4 x float], ptr %391, i64 0, i64 1
  %393 = load float, ptr %392, align 4, !tbaa !26
  %394 = load ptr, ptr %19, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %394, i32 0, i32 2
  %396 = getelementptr inbounds [4 x float], ptr %395, i64 0, i64 2
  %397 = load float, ptr %396, align 4, !tbaa !26
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %20, float noundef %389, float noundef %393, float noundef %397)
          to label %398 unwind label %452

398:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #4
  %399 = load ptr, ptr %19, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %399, i32 0, i32 3
  %401 = getelementptr inbounds [4 x float], ptr %400, i64 0, i64 0
  %402 = load float, ptr %401, align 4, !tbaa !26
  %403 = load ptr, ptr %19, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %403, i32 0, i32 3
  %405 = getelementptr inbounds [4 x float], ptr %404, i64 0, i64 1
  %406 = load float, ptr %405, align 4, !tbaa !26
  %407 = load ptr, ptr %19, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %407, i32 0, i32 3
  %409 = getelementptr inbounds [4 x float], ptr %408, i64 0, i64 2
  %410 = load float, ptr %409, align 4, !tbaa !26
  %411 = load ptr, ptr %19, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %411, i32 0, i32 3
  %413 = getelementptr inbounds [4 x float], ptr %412, i64 0, i64 3
  %414 = load float, ptr %413, align 4, !tbaa !26
  invoke void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %21, float noundef %402, float noundef %406, float noundef %410, float noundef %414)
          to label %415 unwind label %456

415:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #4
  %416 = load ptr, ptr %19, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %416, i32 0, i32 4
  %418 = getelementptr inbounds [4 x float], ptr %417, i64 0, i64 0
  %419 = load float, ptr %418, align 4, !tbaa !26
  %420 = load ptr, ptr %19, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %420, i32 0, i32 4
  %422 = getelementptr inbounds [4 x float], ptr %421, i64 0, i64 1
  %423 = load float, ptr %422, align 4, !tbaa !26
  %424 = load ptr, ptr %19, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %424, i32 0, i32 4
  %426 = getelementptr inbounds [4 x float], ptr %425, i64 0, i64 2
  %427 = load float, ptr %426, align 4, !tbaa !26
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %22, float noundef %419, float noundef %423, float noundef %427)
          to label %428 unwind label %460

428:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #4
  %429 = load ptr, ptr %19, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %429, i32 0, i32 5
  %431 = getelementptr inbounds [4 x float], ptr %430, i64 0, i64 0
  %432 = load float, ptr %431, align 4, !tbaa !26
  %433 = load ptr, ptr %19, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %433, i32 0, i32 5
  %435 = getelementptr inbounds [4 x float], ptr %434, i64 0, i64 1
  %436 = load float, ptr %435, align 4, !tbaa !26
  %437 = load ptr, ptr %19, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.TinyPublicGraphicsInstanceData, ptr %437, i32 0, i32 5
  %439 = getelementptr inbounds [4 x float], ptr %438, i64 0, i64 2
  %440 = load float, ptr %439, align 4, !tbaa !26
  invoke void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef %432, float noundef %436, float noundef %440)
          to label %441 unwind label %464

441:                                              ; preds = %428
  %442 = load i32, ptr %18, align 4, !tbaa !23
  %443 = invoke noundef i32 @_ZN24TinyGLInstancingRenderer35register_graphics_instance_internalEiRKN4TINY11TinyVector3IfNS0_10FloatUtilsEEERKNS0_14TinyQuaternionIfS2_EES5_S5_f(ptr noundef nonnull align 8 dereferenceable(60) %24, i32 noundef %442, ptr noundef nonnull align 4 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(16) %21, ptr noundef nonnull align 4 dereferenceable(16) %22, ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 1.000000e+00)
          to label %444 unwind label %464

444:                                              ; preds = %441
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %445

445:                                              ; preds = %444
  %446 = load i32, ptr %17, align 4, !tbaa !23
  %447 = add nsw i32 %446, 1
  store i32 %447, ptr %17, align 4, !tbaa !23
  br label %355, !llvm.loop !41

448:                                              ; preds = %367
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %4, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %5, align 4
  br label %471

452:                                              ; preds = %385
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %4, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %5, align 4
  br label %470

456:                                              ; preds = %398
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %4, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %5, align 4
  br label %469

460:                                              ; preds = %415
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %4, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %5, align 4
  br label %468

464:                                              ; preds = %441, %428
  %465 = landingpad { ptr, i32 }
          cleanup
  %466 = extractvalue { ptr, i32 } %465, 0
  store ptr %466, ptr %4, align 8
  %467 = extractvalue { ptr, i32 } %465, 1
  store i32 %467, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  br label %468

468:                                              ; preds = %464, %460
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #4
  br label %469

469:                                              ; preds = %468, %456
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #4
  br label %470

470:                                              ; preds = %469, %452
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #4
  br label %471

471:                                              ; preds = %470, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %477

472:                                              ; preds = %366
  br label %473

473:                                              ; preds = %472
  %474 = load i32, ptr %15, align 4, !tbaa !23
  %475 = add nsw i32 %474, 1
  store i32 %475, ptr %15, align 4, !tbaa !23
  br label %334, !llvm.loop !42

476:                                              ; preds = %340
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #4
  ret void

477:                                              ; preds = %471, %322, %57, %38
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #4
  br label %478

478:                                              ; preds = %477
  %479 = load ptr, ptr %4, align 8
  %480 = load i32, ptr %5, align 4
  %481 = insertvalue { ptr, i32 } poison, ptr %479, 0
  %482 = insertvalue { ptr, i32 } %481, i32 %480, 1
  resume { ptr, i32 } %482
}

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN24TinyGLInstancingRenderer35register_graphics_instance_internalEiRKN4TINY11TinyVector3IfNS0_10FloatUtilsEEERKNS0_14TinyQuaternionIfS2_EES5_S5_f(ptr noundef nonnull align 8 dereferenceable(60), i32 noundef, ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), float noundef) #2 align 2

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { noreturn nounwind "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 = { nounwind }
attributes #5 = { noreturn 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 32}
!10 = !{!"_ZTS24TinyGLInstancingRenderer", !11, i64 8, !6, i64 32, !15, i64 40, !15, i64 41, !16, i64 44, !16, i64 48, !16, i64 52, !16, i64 56}
!11 = !{!"_ZTSSt6vectorIP18b3GraphicsInstanceSaIS1_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!18, !16, i64 104}
!18 = !{!"_ZTS30GLInstanceRendererInternalData", !19, i64 0, !19, i64 24, !19, i64 48, !19, i64 72, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !16, i64 112}
!19 = !{!"_ZTSSt6vectorIfSaIfEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!16, !16, i64 0}
!24 = !{!25, !16, i64 4}
!25 = !{!"_ZTS30TinyPublicGraphicsInstanceData", !16, i64 0, !16, i64 4, !7, i64 8, !7, i64 24, !7, i64 40, !7, i64 56}
!26 = !{!27, !27, i64 0}
!27 = !{!"float", !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !16, i64 20}
!31 = !{!"_ZTS18b3GraphicsInstance", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !32, i64 24, !16, i64 48, !16, i64 52, !16, i64 56, !27, i64 60, !36, i64 64, !16, i64 80}
!32 = !{!"_ZTSSt6vectorIiSaIiEE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!"_ZTSN4TINY11TinyVector3IfNS_10FloatUtilsEEE", !27, i64 0, !27, i64 4, !27, i64 8, !16, i64 12}
!37 = !{!31, !16, i64 48}
!38 = distinct !{!38, !29}
!39 = !{!25, !16, i64 0}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}


; 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::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TINY::TinyVector3" = type { float, float, float, i32 }
%"struct.TINY::TinyQuaternion" = type { float, float, float, float }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [130 x i8], align 1
@__PRETTY_FUNCTION__._ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv = external hidden unnamed_addr constant [60 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

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

; 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 noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv(ptr noundef nonnull align 8 dereferenceable(60) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.15", align 8
  %3 = alloca i32, align 4
  %4 = alloca %"struct.TINY::TinyVector3", align 4
  %5 = alloca %"struct.TINY::TinyQuaternion", align 4
  %6 = alloca %"struct.TINY::TinyVector3", align 4
  %7 = alloca %"struct.TINY::TinyVector3", align 4
  %8 = getelementptr inbounds i8, ptr %0, i64 32
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %9, i64 104
  store i32 0, ptr %10, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #4
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %11 = load ptr, ptr %8, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %11, i64 544
  invoke void @_ZNK17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE16get_used_handlesERSt6vectorIiSaIiEE(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(24) %2)
          to label %.preheader98 unwind label %16

.preheader98:                                     ; preds = %1
  %13 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %.not117 = icmp eq i64 %13, 0
  br i1 %.not117, label %.preheader97, label %.lr.ph

.preheader97:                                     ; preds = %27, %.preheader98
  %14 = getelementptr inbounds i8, ptr %0, i64 8
  %15 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #4
  %.not118 = icmp eq i64 %15, 0
  br i1 %.not118, label %.preheader, label %.lr.ph103

16:                                               ; preds = %1
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %210

.lr.ph:                                           ; preds = %.preheader98, %27
  %indvars.iv = phi i64 [ %indvars.iv.next, %27 ], [ 0, %.preheader98 ]
  %18 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv) #4
  %19 = load i32, ptr %18, align 4, !tbaa !22
  %20 = load ptr, ptr %8, align 8, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %20, i64 544
  %22 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %21, i32 noundef %19)
          to label %23 unwind label %25

23:                                               ; preds = %.lr.ph
  %.not96 = icmp eq ptr %22, null
  br i1 %.not96, label %24, label %27

24:                                               ; preds = %23
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 803, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN24TinyGLInstancingRenderer26rebuild_graphics_instancesEv) #5
  unreachable

25:                                               ; preds = %.lr.ph
  %26 = landingpad { ptr, i32 }
          cleanup
  br label %210

27:                                               ; preds = %23
  %28 = getelementptr inbounds i8, ptr %22, i64 4
  %29 = load i32, ptr %28, align 4, !tbaa !23
  %30 = load ptr, ptr %8, align 8, !tbaa !5
  %31 = shl nsw i32 %29, 2
  %32 = sext i32 %31 to i64
  %33 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %32) #4
  %34 = load float, ptr %33, align 4, !tbaa !25
  %35 = getelementptr inbounds i8, ptr %22, i64 8
  store float %34, ptr %35, align 4, !tbaa !25
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = or disjoint i32 %31, 1
  %38 = sext i32 %37 to i64
  %39 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %36, i64 noundef %38) #4
  %40 = load float, ptr %39, align 4, !tbaa !25
  %41 = getelementptr inbounds i8, ptr %22, i64 12
  store float %40, ptr %41, align 4, !tbaa !25
  %42 = load ptr, ptr %8, align 8, !tbaa !5
  %43 = or disjoint i32 %31, 2
  %44 = sext i32 %43 to i64
  %45 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %42, i64 noundef %44) #4
  %46 = load float, ptr %45, align 4, !tbaa !25
  %47 = getelementptr inbounds i8, ptr %22, i64 16
  store float %46, ptr %47, align 4, !tbaa !25
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %48, i64 24
  %50 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef %32) #4
  %51 = load float, ptr %50, align 4, !tbaa !25
  %52 = getelementptr inbounds i8, ptr %22, i64 24
  store float %51, ptr %52, align 4, !tbaa !25
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %53, i64 24
  %55 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %54, i64 noundef %38) #4
  %56 = load float, ptr %55, align 4, !tbaa !25
  %57 = getelementptr inbounds i8, ptr %22, i64 28
  store float %56, ptr %57, align 4, !tbaa !25
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %58, i64 24
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %59, i64 noundef %44) #4
  %61 = load float, ptr %60, align 4, !tbaa !25
  %62 = getelementptr inbounds i8, ptr %22, i64 32
  store float %61, ptr %62, align 4, !tbaa !25
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 24
  %65 = or disjoint i32 %31, 3
  %66 = sext i32 %65 to i64
  %67 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %64, i64 noundef %66) #4
  %68 = load float, ptr %67, align 4, !tbaa !25
  %69 = getelementptr inbounds i8, ptr %22, i64 36
  store float %68, ptr %69, align 4, !tbaa !25
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %70, i64 48
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %32) #4
  %73 = load float, ptr %72, align 4, !tbaa !25
  %74 = getelementptr inbounds i8, ptr %22, i64 40
  store float %73, ptr %74, align 4, !tbaa !25
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 48
  %77 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %38) #4
  %78 = load float, ptr %77, align 4, !tbaa !25
  %79 = getelementptr inbounds i8, ptr %22, i64 44
  store float %78, ptr %79, align 4, !tbaa !25
  %80 = load ptr, ptr %8, align 8, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %80, i64 48
  %82 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef %44) #4
  %83 = load float, ptr %82, align 4, !tbaa !25
  %84 = getelementptr inbounds i8, ptr %22, i64 48
  store float %83, ptr %84, align 4, !tbaa !25
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 48
  %87 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %86, i64 noundef %66) #4
  %88 = load float, ptr %87, align 4, !tbaa !25
  %89 = getelementptr inbounds i8, ptr %22, i64 52
  store float %88, ptr %89, align 4, !tbaa !25
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i64 72
  %92 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %32) #4
  %93 = load float, ptr %92, align 4, !tbaa !25
  %94 = getelementptr inbounds i8, ptr %22, i64 56
  store float %93, ptr %94, align 4, !tbaa !25
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds i8, ptr %95, i64 72
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %96, i64 noundef %38) #4
  %98 = load float, ptr %97, align 4, !tbaa !25
  %99 = getelementptr inbounds i8, ptr %22, i64 60
  store float %98, ptr %99, align 4, !tbaa !25
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i64 72
  %102 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %44) #4
  %103 = load float, ptr %102, align 4, !tbaa !25
  %104 = getelementptr inbounds i8, ptr %22, i64 64
  store float %103, ptr %104, align 4, !tbaa !25
  %105 = load ptr, ptr %8, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i64 72
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %106, i64 noundef %66) #4
  %108 = load float, ptr %107, align 4, !tbaa !25
  %109 = getelementptr inbounds i8, ptr %22, i64 68
  store float %108, ptr %109, align 4, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %110 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %111 = icmp ugt i64 %110, %indvars.iv.next
  br i1 %111, label %.lr.ph, label %.preheader97, !llvm.loop !27

.preheader:                                       ; preds = %.lr.ph103, %.preheader97
  %112 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %.not119 = icmp eq i64 %112, 0
  br i1 %.not119, label %._crit_edge, label %.lr.ph105

.lr.ph103:                                        ; preds = %.preheader97, %.lr.ph103
  %indvars.iv125 = phi i64 [ %indvars.iv.next126, %.lr.ph103 ], [ 0, %.preheader97 ]
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv125) #4
  %114 = load ptr, ptr %113, align 8, !tbaa !29
  %115 = getelementptr inbounds i8, ptr %114, i64 20
  store i32 0, ptr %115, align 4, !tbaa !30
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv125) #4
  %117 = load ptr, ptr %116, align 8, !tbaa !29
  %118 = getelementptr inbounds i8, ptr %117, i64 48
  store i32 0, ptr %118, align 8, !tbaa !37
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv125) #4
  %120 = load ptr, ptr %119, align 8, !tbaa !29
  %121 = getelementptr inbounds i8, ptr %120, i64 24
  call void @_ZNSt6vectorIiSaIiEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %121) #4
  %indvars.iv.next126 = add nuw nsw i64 %indvars.iv125, 1
  %122 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #4
  %123 = icmp ugt i64 %122, %indvars.iv.next126
  br i1 %123, label %.lr.ph103, label %.preheader, !llvm.loop !38

._crit_edge:                                      ; preds = %148, %.preheader
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %124, i64 104
  store i32 0, ptr %125, align 8, !tbaa !16
  %126 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #4
  %.not120 = icmp eq i64 %126, 0
  br i1 %.not120, label %._crit_edge116, label %.lr.ph115

.lr.ph105:                                        ; preds = %.preheader, %148
  %indvars.iv128 = phi i64 [ %indvars.iv.next129, %148 ], [ 0, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #4
  %127 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv128) #4
  %128 = load i32, ptr %127, align 4, !tbaa !22
  store i32 %128, ptr %3, align 4, !tbaa !22
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %129, i64 544
  %131 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %130, i32 noundef %128)
          to label %132 unwind label %146

132:                                              ; preds = %.lr.ph105
  %.not = icmp eq ptr %131, null
  br i1 %.not, label %148, label %133

133:                                              ; preds = %132
  %134 = load i32, ptr %131, align 4, !tbaa !39
  %135 = sext i32 %134 to i64
  %136 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #4
  %137 = icmp ugt i64 %136, %135
  br i1 %137, label %138, label %148

138:                                              ; preds = %133
  %139 = load i32, ptr %131, align 4, !tbaa !39
  %140 = icmp sgt i32 %139, -1
  br i1 %140, label %141, label %148

141:                                              ; preds = %138
  %142 = zext nneg i32 %139 to i64
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %142) #4
  %144 = load ptr, ptr %143, align 8, !tbaa !29
  %145 = getelementptr inbounds i8, ptr %144, i64 24
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %145, ptr noundef nonnull align 4 dereferenceable(4) %3)
          to label %148 unwind label %146

146:                                              ; preds = %141, %.lr.ph105
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  br label %210

148:                                              ; preds = %141, %138, %133, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  %indvars.iv.next129 = add nuw nsw i64 %indvars.iv128, 1
  %149 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %150 = icmp ugt i64 %149, %indvars.iv.next129
  br i1 %150, label %.lr.ph105, label %._crit_edge, !llvm.loop !40

._crit_edge116:                                   ; preds = %._crit_edge110, %._crit_edge
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #4
  ret void

.lr.ph115:                                        ; preds = %._crit_edge, %._crit_edge110
  %indvars.iv134 = phi i64 [ %indvars.iv.next135, %._crit_edge110 ], [ 0, %._crit_edge ]
  %.080112 = phi i32 [ %.181.lcssa, %._crit_edge110 ], [ 0, %._crit_edge ]
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv134) #4
  %152 = load ptr, ptr %151, align 8, !tbaa !29
  %153 = getelementptr inbounds i8, ptr %152, i64 48
  store i32 %.080112, ptr %153, align 8, !tbaa !37
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv134) #4
  %155 = load ptr, ptr %154, align 8, !tbaa !29
  %156 = getelementptr inbounds i8, ptr %155, i64 20
  store i32 0, ptr %156, align 4, !tbaa !30
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv134) #4
  %158 = load ptr, ptr %157, align 8, !tbaa !29
  %159 = getelementptr inbounds i8, ptr %158, i64 24
  %160 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #4
  %.not121 = icmp eq i64 %160, 0
  br i1 %.not121, label %._crit_edge110, label %.lr.ph109

._crit_edge110:                                   ; preds = %200, %.lr.ph115
  %.181.lcssa = phi i32 [ %.080112, %.lr.ph115 ], [ %163, %200 ]
  %indvars.iv.next135 = add nuw nsw i64 %indvars.iv134, 1
  %161 = call noundef i64 @_ZNKSt6vectorIP18b3GraphicsInstanceSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #4
  %162 = icmp ugt i64 %161, %indvars.iv.next135
  br i1 %162, label %.lr.ph115, label %._crit_edge116, !llvm.loop !41

.lr.ph109:                                        ; preds = %.lr.ph115, %200
  %indvars.iv131 = phi i64 [ %indvars.iv.next132, %200 ], [ 0, %.lr.ph115 ]
  %.181106 = phi i32 [ %163, %200 ], [ %.080112, %.lr.ph115 ]
  %163 = add nsw i32 %.181106, 1
  %164 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv134) #4
  %165 = load ptr, ptr %164, align 8, !tbaa !29
  %166 = getelementptr inbounds i8, ptr %165, i64 24
  %167 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %166, i64 noundef %indvars.iv131) #4
  %168 = load i32, ptr %167, align 4, !tbaa !22
  %169 = load ptr, ptr %8, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %169, i64 544
  %171 = invoke noundef ptr @_ZN17TinyResizablePoolI18TinyPoolBodyHandleI30TinyPublicGraphicsInstanceDataEE10get_handleEi(ptr noundef nonnull align 8 dereferenceable(40) %170, i32 noundef %168)
          to label %172 unwind label %206

172:                                              ; preds = %.lr.ph109
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #4
  %173 = getelementptr inbounds i8, ptr %171, i64 8
  %174 = load float, ptr %173, align 4, !tbaa !25
  %175 = getelementptr inbounds i8, ptr %171, i64 12
  %176 = load float, ptr %175, align 4, !tbaa !25
  %177 = getelementptr inbounds i8, ptr %171, i64 16
  %178 = load float, ptr %177, align 4, !tbaa !25
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %4, float noundef %174, float noundef %176, float noundef %178)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #4
  %179 = getelementptr inbounds i8, ptr %171, i64 24
  %180 = load float, ptr %179, align 4, !tbaa !25
  %181 = getelementptr inbounds i8, ptr %171, i64 28
  %182 = load float, ptr %181, align 4, !tbaa !25
  %183 = getelementptr inbounds i8, ptr %171, i64 32
  %184 = load float, ptr %183, align 4, !tbaa !25
  %185 = getelementptr inbounds i8, ptr %171, i64 36
  %186 = load float, ptr %185, align 4, !tbaa !25
  call void @_ZN4TINY14TinyQuaternionIfNS_10FloatUtilsEEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %5, float noundef %180, float noundef %182, float noundef %184, float noundef %186)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #4
  %187 = getelementptr inbounds i8, ptr %171, i64 40
  %188 = load float, ptr %187, align 4, !tbaa !25
  %189 = getelementptr inbounds i8, ptr %171, i64 44
  %190 = load float, ptr %189, align 4, !tbaa !25
  %191 = getelementptr inbounds i8, ptr %171, i64 48
  %192 = load float, ptr %191, align 4, !tbaa !25
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %6, float noundef %188, float noundef %190, float noundef %192)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #4
  %193 = getelementptr inbounds i8, ptr %171, i64 56
  %194 = load float, ptr %193, align 4, !tbaa !25
  %195 = getelementptr inbounds i8, ptr %171, i64 60
  %196 = load float, ptr %195, align 4, !tbaa !25
  %197 = getelementptr inbounds i8, ptr %171, i64 64
  %198 = load float, ptr %197, align 4, !tbaa !25
  call void @_ZN4TINY11TinyVector3IfNS_10FloatUtilsEEC2Efff(ptr noundef nonnull align 4 dereferenceable(16) %7, float noundef %194, float noundef %196, float noundef %198)
  %199 = invoke noundef i32 @_ZN24TinyGLInstancingRenderer35register_graphics_instance_internalEiRKN4TINY11TinyVector3IfNS0_10FloatUtilsEEERKNS0_14TinyQuaternionIfS2_EES5_S5_f(ptr noundef nonnull align 8 dereferenceable(60) %0, i32 noundef %168, ptr noundef nonnull align 4 dereferenceable(16) %4, ptr noundef nonnull align 4 dereferenceable(16) %5, ptr noundef nonnull align 4 dereferenceable(16) %6, ptr noundef nonnull align 4 dereferenceable(16) %7, float noundef 1.000000e+00)
          to label %200 unwind label %208

200:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #4
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 1
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP18b3GraphicsInstanceSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %indvars.iv134) #4
  %202 = load ptr, ptr %201, align 8, !tbaa !29
  %203 = getelementptr inbounds i8, ptr %202, i64 24
  %204 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %203) #4
  %205 = icmp ugt i64 %204, %indvars.iv.next132
  br i1 %205, label %.lr.ph109, label %._crit_edge110, !llvm.loop !42

206:                                              ; preds = %.lr.ph109
  %207 = landingpad { ptr, i32 }
          cleanup
  br label %210

208:                                              ; preds = %172
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #4
  br label %210

210:                                              ; preds = %206, %208, %146, %25, %16
  %.pn94 = phi { ptr, i32 } [ %26, %25 ], [ %147, %146 ], [ %17, %16 ], [ %209, %208 ], [ %207, %206 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #4
  resume { ptr, i32 } %.pn94
}

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN24TinyGLInstancingRenderer35register_graphics_instance_internalEiRKN4TINY11TinyVector3IfNS0_10FloatUtilsEEERKNS0_14TinyQuaternionIfS2_EES5_S5_f(ptr noundef nonnull align 8 dereferenceable(60), i32 noundef, ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(16), float noundef) local_unnamed_addr #2 align 2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { noreturn nounwind "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 = { nounwind }
attributes #5 = { noreturn 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, !11, i64 32}
!6 = !{!"_ZTS24TinyGLInstancingRenderer", !7, i64 8, !11, i64 32, !14, i64 40, !14, i64 41, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56}
!7 = !{!"_ZTSSt6vectorIP18b3GraphicsInstanceSaIS1_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseIP18b3GraphicsInstanceSaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"bool", !12, i64 0}
!15 = !{!"int", !12, i64 0}
!16 = !{!17, !15, i64 104}
!17 = !{!"_ZTS30GLInstanceRendererInternalData", !18, i64 0, !18, i64 24, !18, i64 48, !18, i64 72, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108, !15, i64 112}
!18 = !{!"_ZTSSt6vectorIfSaIfEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIfSaIfEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!22 = !{!15, !15, i64 0}
!23 = !{!24, !15, i64 4}
!24 = !{!"_ZTS30TinyPublicGraphicsInstanceData", !15, i64 0, !15, i64 4, !12, i64 8, !12, i64 24, !12, i64 40, !12, i64 56}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !12, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!11, !11, i64 0}
!30 = !{!31, !15, i64 20}
!31 = !{!"_ZTS18b3GraphicsInstance", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !32, i64 24, !15, i64 48, !15, i64 52, !15, i64 56, !26, i64 60, !36, i64 64, !15, i64 80}
!32 = !{!"_ZTSSt6vectorIiSaIiEE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!36 = !{!"_ZTSN4TINY11TinyVector3IfNS_10FloatUtilsEEE", !26, i64 0, !26, i64 4, !26, i64 8, !15, i64 12}
!37 = !{!31, !15, i64 48}
!38 = distinct !{!38, !28}
!39 = !{!24, !15, i64 0}
!40 = distinct !{!40, !28}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}


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