; LLVM IR from merpheus-dev/LavaEngine :: src/Core/Scene.ll (ZN4Lava5Scene19LoadBatchedEntitiesEv)

; 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.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl" }
%"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl" = type { %"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.20" = type { i8 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.std::allocator.14" = type { i8 }
%"struct.glm::vec" = type { %union.anon, %union.anon.7, %union.anon.8 }
%union.anon = type { float }
%union.anon.7 = type { float }
%union.anon.8 = type { float }
%"class.Lava::Scene" = type { ptr, %"class.tinyxml2::XMLDocument", ptr, %"class.std::vector", ptr }
%"class.tinyxml2::XMLDocument" = type { %"class.tinyxml2::XMLNode", i8, i8, i32, i32, %"class.tinyxml2::StrPair", i32, ptr, i32, i32, %"class.tinyxml2::DynArray", %"class.tinyxml2::MemPoolT", %"class.tinyxml2::MemPoolT.1", %"class.tinyxml2::MemPoolT.3", %"class.tinyxml2::MemPoolT.5" }
%"class.tinyxml2::XMLNode" = type { ptr, ptr, ptr, %"class.tinyxml2::StrPair", i32, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.tinyxml2::StrPair" = type { i32, ptr, ptr }
%"class.tinyxml2::DynArray" = type { ptr, [10 x ptr], i32, i32 }
%"class.tinyxml2::MemPoolT" = type { %"class.tinyxml2::MemPool", %"class.tinyxml2::DynArray.0", ptr, i32, i32, i32, i32 }
%"class.tinyxml2::MemPool" = type { ptr }
%"class.tinyxml2::DynArray.0" = type { ptr, [10 x ptr], i32, i32 }
%"class.tinyxml2::MemPoolT.1" = type { %"class.tinyxml2::MemPool", %"class.tinyxml2::DynArray.2", ptr, i32, i32, i32, i32 }
%"class.tinyxml2::DynArray.2" = type { ptr, [10 x ptr], i32, i32 }
%"class.tinyxml2::MemPoolT.3" = type { %"class.tinyxml2::MemPool", %"class.tinyxml2::DynArray.4", ptr, i32, i32, i32, i32 }
%"class.tinyxml2::DynArray.4" = type { ptr, [10 x ptr], i32, i32 }
%"class.tinyxml2::MemPoolT.5" = type { %"class.tinyxml2::MemPool", %"class.tinyxml2::DynArray.6", ptr, i32, i32, i32, i32 }
%"class.tinyxml2::DynArray.6" = type { ptr, [10 x ptr], i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Lava::SceneObject *, std::allocator<Lava::SceneObject *>>::_Vector_impl" }
%"struct.std::_Vector_base<Lava::SceneObject *, std::allocator<Lava::SceneObject *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Lava::SceneObject *, std::allocator<Lava::SceneObject *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Lava::SceneObject *, std::allocator<Lava::SceneObject *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.Lava::VertexBufferElement" = type { ptr, i32 }
%"class.Lava::Entity" = type { %"class.Lava::SceneObject", ptr, ptr, ptr, ptr }
%"class.Lava::SceneObject" = type { ptr }
%"class.Lava::Transform" = type { %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec" }
%"struct.Lava::Material" = type <{ ptr, ptr, ptr, %"struct.glm::vec", [4 x i8], ptr, i32, i8, i8, [2 x i8], [3 x float], float, float, [4 x i8] }>
%"struct.Lava::BatchedEntities" = type { %"class.Lava::SceneObject", ptr }

@.str = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #0

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Lava5Scene19LoadBatchedEntitiesEv(ptr noundef nonnull align 8 dereferenceable(824) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %"class.std::vector.18", align 8
  %9 = alloca %"class.std::allocator.20", align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i1, align 1
  %17 = alloca %"class.std::allocator.14", align 1
  %18 = alloca i1, align 1
  %19 = alloca i1, align 1
  %20 = alloca i1, align 1
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"struct.glm::vec", align 4
  %30 = alloca { <2 x float>, float }, align 8
  %31 = alloca { <2 x float>, float }, align 4
  %32 = alloca %"struct.glm::vec", align 4
  %33 = alloca { <2 x float>, float }, align 8
  %34 = alloca %"struct.glm::vec", align 4
  %35 = alloca { <2 x float>, float }, align 8
  %36 = alloca %"struct.glm::vec", align 4
  %37 = alloca { <2 x float>, float }, align 8
  %38 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %39 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #8
  %40 = getelementptr inbounds %"class.Lava::Scene", ptr %39, i32 0, i32 1
  %41 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %40, ptr noundef @.str)
  %42 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %41, ptr noundef @.str.10)
  store ptr %42, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #8
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %43, ptr noundef @.str.11)
  %45 = call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %44)
  store ptr %45, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %46 = load ptr, ptr %3, align 8, !tbaa !5
  %47 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %46, ptr noundef @.str.12)
  %48 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %47, ptr noundef @.str.13)
  %49 = call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %48)
  store ptr %49, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %50, ptr noundef @.str.12)
  %52 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %51, ptr noundef @.str.14)
  %53 = call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %52)
  store ptr %53, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %54, ptr noundef @.str.12)
  %56 = call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %55, ptr noundef @.str.15)
  %57 = call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %56)
  store ptr %57, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #8
  call void @_ZNSaIN4Lava19VertexBufferElementEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  invoke void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 4, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %58 unwind label %106

58:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorIN4Lava19VertexBufferElementEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #8
  %59 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 0) #8
  %60 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %59, i32 0, i32 0
  store ptr @.str.16, ptr %60, align 8, !tbaa !9
  %61 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 0) #8
  %62 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %61, i32 0, i32 1
  store i32 3, ptr %62, align 8, !tbaa !12
  %63 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 1) #8
  %64 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %63, i32 0, i32 0
  store ptr @.str.17, ptr %64, align 8, !tbaa !9
  %65 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 1) #8
  %66 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %65, i32 0, i32 1
  store i32 2, ptr %66, align 8, !tbaa !12
  %67 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 2) #8
  %68 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %67, i32 0, i32 0
  store ptr @.str.18, ptr %68, align 8, !tbaa !9
  %69 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 2) #8
  %70 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %69, i32 0, i32 1
  store i32 3, ptr %70, align 8, !tbaa !12
  %71 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 3) #8
  %72 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %71, i32 0, i32 0
  store ptr @.str.19, ptr %72, align 8, !tbaa !9
  %73 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 3) #8
  %74 = getelementptr inbounds %"struct.Lava::VertexBufferElement", ptr %73, i32 0, i32 1
  store i32 3, ptr %74, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = invoke noundef ptr @_ZN4Lava9Importers13AssetImporter4LoadEPKc(ptr noundef %75)
          to label %77 unwind label %110

77:                                               ; preds = %58
  store ptr %76, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = invoke noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef %78, i32 noundef 4, i1 noundef zeroext false)
          to label %80 unwind label %114

80:                                               ; preds = %77
  store ptr %79, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store ptr null, ptr %14, align 8, !tbaa !5
  %81 = load ptr, ptr %7, align 8, !tbaa !5
  %82 = icmp ne ptr %81, null
  store i1 false, ptr %16, align 1
  store i1 false, ptr %18, align 1
  store i1 false, ptr %19, align 1
  store i1 false, ptr %20, align 1
  br i1 %82, label %83, label %88

83:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #8
  store i1 true, ptr %16, align 1
  %84 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #8
  store i1 true, ptr %18, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  store i1 true, ptr %19, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef %84, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %85 unwind label %118

85:                                               ; preds = %83
  store i1 true, ptr %20, align 1
  %86 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  %87 = xor i1 %86, true
  br label %88

88:                                               ; preds = %85, %80
  %89 = phi i1 [ false, %80 ], [ %87, %85 ]
  %90 = load i1, ptr %20, align 1
  br i1 %90, label %91, label %92

91:                                               ; preds = %88
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %92

92:                                               ; preds = %91, %88
  %93 = load i1, ptr %19, align 1
  br i1 %93, label %94, label %95

94:                                               ; preds = %92
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  br label %95

95:                                               ; preds = %94, %92
  %96 = load i1, ptr %18, align 1
  br i1 %96, label %97, label %98

97:                                               ; preds = %95
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  br label %98

98:                                               ; preds = %97, %95
  %99 = load i1, ptr %16, align 1
  br i1 %99, label %100, label %101

100:                                              ; preds = %98
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  br label %101

101:                                              ; preds = %100, %98
  br i1 %89, label %102, label %135

102:                                              ; preds = %101
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = invoke noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef %103, i32 noundef 4, i1 noundef zeroext false)
          to label %105 unwind label %131

105:                                              ; preds = %102
  store ptr %104, ptr %14, align 8, !tbaa !5
  br label %135

106:                                              ; preds = %1
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %10, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIN4Lava19VertexBufferElementEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #8
  br label %298

110:                                              ; preds = %58
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %10, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %11, align 4
  br label %297

114:                                              ; preds = %77
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %10, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %11, align 4
  br label %296

118:                                              ; preds = %83
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %10, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %11, align 4
  %122 = load i1, ptr %19, align 1
  br i1 %122, label %123, label %124

123:                                              ; preds = %118
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #8
  br label %124

124:                                              ; preds = %123, %118
  %125 = load i1, ptr %18, align 1
  br i1 %125, label %126, label %127

126:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  br label %127

127:                                              ; preds = %126, %124
  %128 = load i1, ptr %16, align 1
  br i1 %128, label %129, label %130

129:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  br label %130

130:                                              ; preds = %129, %127
  br label %295

131:                                              ; preds = %102
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %10, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %11, align 4
  br label %295

135:                                              ; preds = %105, %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %136 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 16) #9
          to label %137 unwind label %149

137:                                              ; preds = %135
  invoke void @_ZN4Lava15BatchedEntitiesC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %136)
          to label %138 unwind label %153

138:                                              ; preds = %137
  store ptr %136, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %139 = load ptr, ptr %3, align 8, !tbaa !5
  %140 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %139, ptr noundef @.str.20)
          to label %141 unwind label %157

141:                                              ; preds = %138
  store ptr %140, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %142 = load ptr, ptr %23, align 8, !tbaa !5
  %143 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %142, ptr noundef null)
          to label %144 unwind label %161

144:                                              ; preds = %141
  store ptr %143, ptr %24, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %279, %144
  %146 = load ptr, ptr %24, align 8, !tbaa !5
  %147 = icmp ne ptr %146, null
  br i1 %147, label %165, label %148

148:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %285

149:                                              ; preds = %135
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %10, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %11, align 4
  br label %294

153:                                              ; preds = %137
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %10, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %11, align 4
  call void @_ZdlPvm(ptr noundef %136, i64 noundef 16) #10
  br label %294

157:                                              ; preds = %138
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %10, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %11, align 4
  br label %293

161:                                              ; preds = %276, %141
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %10, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %11, align 4
  br label %284

165:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %166 = load ptr, ptr %24, align 8, !tbaa !5
  %167 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %166, ptr noundef @.str.3)
          to label %168 unwind label %228

168:                                              ; preds = %165
  %169 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %167)
          to label %170 unwind label %228

170:                                              ; preds = %168
  store ptr %169, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %171 = load ptr, ptr %24, align 8, !tbaa !5
  %172 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %171, ptr noundef @.str.9)
          to label %173 unwind label %232

173:                                              ; preds = %170
  %174 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %172)
          to label %175 unwind label %232

175:                                              ; preds = %173
  store ptr %174, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %176 = load ptr, ptr %24, align 8, !tbaa !5
  %177 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %176, ptr noundef @.str.21)
          to label %178 unwind label %236

178:                                              ; preds = %175
  %179 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %177)
          to label %180 unwind label %236

180:                                              ; preds = %178
  store ptr %179, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %181 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #9
          to label %182 unwind label %240

182:                                              ; preds = %180
  %183 = load ptr, ptr %25, align 8, !tbaa !5
  %184 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %39, ptr noundef %183)
          to label %185 unwind label %244

185:                                              ; preds = %182
  store { <2 x float>, float } %184, ptr %30, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 8 %30, i64 12, i1 false)
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %29, i64 12, i1 false)
  %187 = getelementptr inbounds { <2 x float>, float }, ptr %31, i32 0, i32 0
  %188 = load <2 x float>, ptr %187, align 4
  %189 = getelementptr inbounds { <2 x float>, float }, ptr %31, i32 0, i32 1
  %190 = load float, ptr %189, align 4
  invoke void @_ZN4Lava6EntityC2EN3glm3vecILi3EfLNS1_9qualifierE0EEEPNS_16MeshMaterialPackE(ptr noundef nonnull align 8 dereferenceable(40) %181, <2 x float> %188, float %190, ptr noundef %186)
          to label %191 unwind label %244

191:                                              ; preds = %185
  store ptr %181, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %32) #8
  %192 = load ptr, ptr %26, align 8, !tbaa !5
  %193 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %39, ptr noundef %192)
          to label %194 unwind label %248

194:                                              ; preds = %191
  store { <2 x float>, float } %193, ptr %33, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 8 %33, i64 12, i1 false)
  %195 = load ptr, ptr %28, align 8, !tbaa !5
  %196 = getelementptr inbounds %"class.Lava::Entity", ptr %195, i32 0, i32 1
  %197 = load ptr, ptr %196, align 8, !tbaa !13
  %198 = getelementptr inbounds %"class.Lava::Transform", ptr %197, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %198, ptr align 4 %32, i64 12, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr %34) #8
  %199 = load ptr, ptr %27, align 8, !tbaa !5
  %200 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %39, ptr noundef %199)
          to label %201 unwind label %252

201:                                              ; preds = %194
  store { <2 x float>, float } %200, ptr %35, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 8 %35, i64 12, i1 false)
  %202 = load ptr, ptr %28, align 8, !tbaa !5
  %203 = getelementptr inbounds %"class.Lava::Entity", ptr %202, i32 0, i32 1
  %204 = load ptr, ptr %203, align 8, !tbaa !13
  %205 = getelementptr inbounds %"class.Lava::Transform", ptr %204, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %205, ptr align 4 %34, i64 12, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 12, ptr %34) #8
  %206 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN4Lava6Entity15SetBufferLayoutERSt6vectorINS_19VertexBufferElementESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(40) %206, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %207 unwind label %240

207:                                              ; preds = %201
  %208 = load ptr, ptr %13, align 8, !tbaa !5
  %209 = load ptr, ptr %28, align 8, !tbaa !5
  %210 = getelementptr inbounds %"class.Lava::Entity", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !18
  %212 = getelementptr inbounds %"struct.Lava::Material", ptr %211, i32 0, i32 0
  store ptr %208, ptr %212, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 12, ptr %36) #8
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %39, ptr noundef %213)
          to label %215 unwind label %256

215:                                              ; preds = %207
  store { <2 x float>, float } %214, ptr %37, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 8 %37, i64 12, i1 false)
  %216 = load ptr, ptr %28, align 8, !tbaa !5
  %217 = getelementptr inbounds %"class.Lava::Entity", ptr %216, i32 0, i32 4
  %218 = load ptr, ptr %217, align 8, !tbaa !18
  %219 = getelementptr inbounds %"struct.Lava::Material", ptr %218, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %219, ptr align 4 %36, i64 12, i1 false), !tbaa.struct !16
  call void @llvm.lifetime.end.p0(i64 12, ptr %36) #8
  %220 = load ptr, ptr %14, align 8, !tbaa !5
  %221 = icmp ne ptr %220, null
  br i1 %221, label %222, label %260

222:                                              ; preds = %215
  %223 = load ptr, ptr %14, align 8, !tbaa !5
  %224 = load ptr, ptr %28, align 8, !tbaa !5
  %225 = getelementptr inbounds %"class.Lava::Entity", ptr %224, i32 0, i32 4
  %226 = load ptr, ptr %225, align 8, !tbaa !18
  %227 = getelementptr inbounds %"struct.Lava::Material", ptr %226, i32 0, i32 1
  store ptr %223, ptr %227, align 8, !tbaa !24
  br label %260

228:                                              ; preds = %168, %165
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %10, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %11, align 4
  br label %283

232:                                              ; preds = %173, %170
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %10, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %11, align 4
  br label %282

236:                                              ; preds = %178, %175
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %10, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %11, align 4
  br label %281

240:                                              ; preds = %271, %263, %201, %180
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %10, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %11, align 4
  br label %280

244:                                              ; preds = %185, %182
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %10, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %11, align 4
  call void @_ZdlPvm(ptr noundef %181, i64 noundef 40) #10
  br label %280

248:                                              ; preds = %191
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %10, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %32) #8
  br label %280

252:                                              ; preds = %194
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %10, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %34) #8
  br label %280

256:                                              ; preds = %207
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %10, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %36) #8
  br label %280

260:                                              ; preds = %222, %215
  %261 = load ptr, ptr %21, align 8, !tbaa !5
  %262 = icmp ne ptr %261, null
  br i1 %262, label %267, label %263

263:                                              ; preds = %260
  %264 = load ptr, ptr %28, align 8, !tbaa !5
  %265 = invoke noundef ptr @_ZN4Lava6Entity15GetMeshRendererENS_8PlatformE(ptr noundef nonnull align 8 dereferenceable(40) %264, i32 noundef 0)
          to label %266 unwind label %240

266:                                              ; preds = %263
  store ptr %265, ptr %21, align 8, !tbaa !5
  br label %271

267:                                              ; preds = %260
  %268 = load ptr, ptr %21, align 8, !tbaa !5
  %269 = load ptr, ptr %28, align 8, !tbaa !5
  %270 = getelementptr inbounds %"class.Lava::Entity", ptr %269, i32 0, i32 2
  store ptr %268, ptr %270, align 8, !tbaa !25
  br label %271

271:                                              ; preds = %267, %266
  %272 = load ptr, ptr %22, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.Lava::BatchedEntities", ptr %272, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !26
  invoke void @_ZNSt6vectorIPN4Lava6EntityESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %274, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %275 unwind label %240

275:                                              ; preds = %271
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %276

276:                                              ; preds = %275
  %277 = load ptr, ptr %24, align 8, !tbaa !5
  %278 = invoke noundef ptr @_ZN8tinyxml27XMLNode18NextSiblingElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %277, ptr noundef null)
          to label %279 unwind label %161

279:                                              ; preds = %276
  store ptr %278, ptr %24, align 8, !tbaa !5
  br label %145, !llvm.loop !28

280:                                              ; preds = %256, %252, %248, %244, %240
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %281

281:                                              ; preds = %280, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %282

282:                                              ; preds = %281, %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %283

283:                                              ; preds = %282, %228
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %284

284:                                              ; preds = %283, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %293

285:                                              ; preds = %148
  %286 = getelementptr inbounds %"class.Lava::Scene", ptr %39, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %287 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %287, ptr %38, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIPN4Lava11SceneObjectESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %286, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %288 unwind label %289

288:                                              ; preds = %285
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  ret void

289:                                              ; preds = %285
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %10, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %293

293:                                              ; preds = %289, %284, %157
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %294

294:                                              ; preds = %293, %153, %149
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %295

295:                                              ; preds = %294, %131, %130
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %296

296:                                              ; preds = %295, %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %297

297:                                              ; preds = %296, %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  br label %298

298:                                              ; preds = %297, %106
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  br label %299

299:                                              ; preds = %298
  %300 = load ptr, ptr %10, align 8
  %301 = load i32, ptr %11, align 4
  %302 = insertvalue { ptr, i32 } poison, ptr %300, 0
  %303 = insertvalue { ptr, i32 } %302, i32 %301, 1
  resume { ptr, i32 } %303
}

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

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

declare noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120)) #5

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

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824), ptr noundef) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #7 align 2

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

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

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

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

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

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

declare noundef ptr @_ZN4Lava9Importers13AssetImporter4LoadEPKc(ptr noundef) #5

declare noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef, i32 noundef, i1 noundef zeroext) #5

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Lava6EntityC2EN3glm3vecILi3EfLNS1_9qualifierE0EEEPNS_16MeshMaterialPackE(ptr noundef nonnull align 8 dereferenceable(40), <2 x float>, float, ptr noundef) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4Lava6Entity15GetMeshRendererENS_8PlatformE(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #4 align 2

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

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

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

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

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

attributes #0 = { nobuiltin allocsize(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 #1 = { nobuiltin 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 #2 = { mustprogress uwtable "min-legal-vector-width"="64" "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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin 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 0}
!10 = !{!"_ZTSN4Lava19VertexBufferElementE", !6, i64 0, !11, i64 8}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!14, !6, i64 8}
!14 = !{!"_ZTSN4Lava6EntityE", !15, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!15 = !{!"_ZTSN4Lava11SceneObjectE"}
!16 = !{i64 0, i64 4, !17, i64 4, i64 4, !17, i64 8, i64 4, !17}
!17 = !{!7, !7, i64 0}
!18 = !{!14, !6, i64 32}
!19 = !{!20, !6, i64 0}
!20 = !{!"_ZTSN4Lava8MaterialE", !6, i64 0, !6, i64 8, !6, i64 16, !21, i64 24, !6, i64 40, !11, i64 48, !22, i64 52, !22, i64 53, !7, i64 56, !23, i64 68, !23, i64 72}
!21 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !7, i64 0, !7, i64 4, !7, i64 8}
!22 = !{!"bool", !7, i64 0}
!23 = !{!"float", !7, i64 0}
!24 = !{!20, !6, i64 8}
!25 = !{!14, !6, i64 16}
!26 = !{!27, !6, i64 8}
!27 = !{!"_ZTSN4Lava15BatchedEntitiesE", !15, i64 0, !6, i64 8}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}


; 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.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl" }
%"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl" = type { %"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Lava::VertexBufferElement, std::allocator<Lava::VertexBufferElement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.20" = type { i8 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.17 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.17 = type { i64, [8 x i8] }
%"class.std::allocator.14" = type { i8 }

@.str = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #0

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Lava5Scene19LoadBatchedEntitiesEv(ptr noundef nonnull align 8 dereferenceable(824) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector.18", align 8
  %3 = alloca %"class.std::allocator.20", align 1
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator.14", align 1
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = getelementptr inbounds i8, ptr %0, i64 8
  %9 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %8, ptr noundef nonnull @.str)
  %10 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %9, ptr noundef nonnull @.str.10)
  %11 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %10, ptr noundef nonnull @.str.11)
  %12 = tail call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %11)
  %13 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %10, ptr noundef nonnull @.str.12)
  %14 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %13, ptr noundef nonnull @.str.13)
  %15 = tail call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %14)
  %16 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %10, ptr noundef nonnull @.str.12)
  %17 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %16, ptr noundef nonnull @.str.14)
  %18 = tail call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %17)
  %19 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %10, ptr noundef nonnull @.str.12)
  %20 = tail call noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %19, ptr noundef nonnull @.str.15)
  %21 = tail call noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %20)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #7
  call void @_ZNSaIN4Lava19VertexBufferElementEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  invoke void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 4, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %22 unwind label %43

22:                                               ; preds = %1
  call void @_ZNSt15__new_allocatorIN4Lava19VertexBufferElementEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  %23 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 0) #7
  store ptr @.str.16, ptr %23, align 8, !tbaa !5
  %24 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 0) #7
  %25 = getelementptr inbounds i8, ptr %24, i64 8
  store i32 3, ptr %25, align 8, !tbaa !11
  %26 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 1) #7
  store ptr @.str.17, ptr %26, align 8, !tbaa !5
  %27 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 1) #7
  %28 = getelementptr inbounds i8, ptr %27, i64 8
  store i32 2, ptr %28, align 8, !tbaa !11
  %29 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 2) #7
  store ptr @.str.18, ptr %29, align 8, !tbaa !5
  %30 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 2) #7
  %31 = getelementptr inbounds i8, ptr %30, i64 8
  store i32 3, ptr %31, align 8, !tbaa !11
  %32 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 3) #7
  store ptr @.str.19, ptr %32, align 8, !tbaa !5
  %33 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef 3) #7
  %34 = getelementptr inbounds i8, ptr %33, i64 8
  store i32 3, ptr %34, align 8, !tbaa !11
  %35 = invoke noundef ptr @_ZN4Lava9Importers13AssetImporter4LoadEPKc(ptr noundef %12)
          to label %36 unwind label %45

36:                                               ; preds = %22
  %37 = invoke noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef %15, i32 noundef 4, i1 noundef zeroext false)
          to label %38 unwind label %47

38:                                               ; preds = %36
  %.not.not = icmp eq ptr %21, null
  br i1 %.not.not, label %.critedge93.thread, label %39

39:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull %21, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %.critedge93 unwind label %49

.critedge93:                                      ; preds = %39
  %40 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  br i1 %40, label %.critedge93.thread, label %41

41:                                               ; preds = %.critedge93
  %42 = invoke noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef nonnull %21, i32 noundef 4, i1 noundef zeroext false)
          to label %.critedge93.thread unwind label %51

43:                                               ; preds = %1
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN4Lava19VertexBufferElementEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  br label %141

45:                                               ; preds = %22
  %46 = landingpad { ptr, i32 }
          cleanup
  br label %140

47:                                               ; preds = %36
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %140

49:                                               ; preds = %39
  %50 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  br label %140

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

.critedge93.thread:                               ; preds = %38, %41, %.critedge93
  %.069 = phi ptr [ null, %.critedge93 ], [ %42, %41 ], [ null, %38 ]
  %53 = invoke noalias noundef nonnull dereferenceable(16) ptr @_Znwm(i64 noundef 16) #8
          to label %54 unwind label %63

54:                                               ; preds = %.critedge93.thread
  invoke void @_ZN4Lava15BatchedEntitiesC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %53)
          to label %55 unwind label %65

55:                                               ; preds = %54
  %56 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %10, ptr noundef nonnull @.str.20)
          to label %57 unwind label %67

57:                                               ; preds = %55
  %58 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %56, ptr noundef null)
          to label %.preheader unwind label %.loopexit.split-lp

.preheader:                                       ; preds = %57
  %.not78 = icmp eq ptr %.069, null
  %59 = getelementptr inbounds i8, ptr %53, i64 8
  br label %60

60:                                               ; preds = %.preheader, %134
  %.076 = phi ptr [ %135, %134 ], [ %58, %.preheader ]
  %.074 = phi ptr [ %.175, %134 ], [ null, %.preheader ]
  %.not = icmp eq ptr %.076, null
  br i1 %.not, label %61, label %69

61:                                               ; preds = %60
  %62 = getelementptr inbounds i8, ptr %0, i64 792
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  store ptr %53, ptr %7, align 8, !tbaa !12
  invoke void @_ZNSt6vectorIPN4Lava11SceneObjectESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %137 unwind label %138

63:                                               ; preds = %.critedge93.thread
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %140

65:                                               ; preds = %54
  %66 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %53, i64 noundef 16) #9
  br label %140

67:                                               ; preds = %55
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %140

.loopexit:                                        ; preds = %134
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %140

.loopexit.split-lp:                               ; preds = %57
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %140

69:                                               ; preds = %60
  %70 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %.076, ptr noundef nonnull @.str.3)
          to label %71 unwind label %111

71:                                               ; preds = %69
  %72 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %70)
          to label %73 unwind label %111

73:                                               ; preds = %71
  %74 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %.076, ptr noundef nonnull @.str.9)
          to label %75 unwind label %113

75:                                               ; preds = %73
  %76 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %74)
          to label %77 unwind label %113

77:                                               ; preds = %75
  %78 = invoke noundef ptr @_ZN8tinyxml27XMLNode17FirstChildElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %.076, ptr noundef nonnull @.str.21)
          to label %79 unwind label %115

79:                                               ; preds = %77
  %80 = invoke noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120) %78)
          to label %81 unwind label %115

81:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %82 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #8
          to label %83 unwind label %117

83:                                               ; preds = %81
  %84 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %0, ptr noundef %72)
          to label %85 unwind label %119

85:                                               ; preds = %83
  %.fca.0.extract16 = extractvalue { <2 x float>, float } %84, 0
  %.fca.1.extract17 = extractvalue { <2 x float>, float } %84, 1
  invoke void @_ZN4Lava6EntityC2EN3glm3vecILi3EfLNS1_9qualifierE0EEEPNS_16MeshMaterialPackE(ptr noundef nonnull align 8 dereferenceable(40) %82, <2 x float> %.fca.0.extract16, float %.fca.1.extract17, ptr noundef %35)
          to label %86 unwind label %119

86:                                               ; preds = %85
  store ptr %82, ptr %6, align 8, !tbaa !12
  %87 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %0, ptr noundef %76)
          to label %88 unwind label %121

88:                                               ; preds = %86
  %.fca.0.extract8 = extractvalue { <2 x float>, float } %87, 0
  %.fca.1.extract9 = extractvalue { <2 x float>, float } %87, 1
  %89 = load ptr, ptr %6, align 8, !tbaa !12
  %90 = getelementptr inbounds i8, ptr %89, i64 8
  %91 = load ptr, ptr %90, align 8, !tbaa !13
  %92 = getelementptr inbounds i8, ptr %91, i64 12
  store <2 x float> %.fca.0.extract8, ptr %92, align 4
  %.sroa.513.0..sroa_idx = getelementptr inbounds i8, ptr %91, i64 20
  store float %.fca.1.extract9, ptr %.sroa.513.0..sroa_idx, align 4, !tbaa !16
  %93 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %0, ptr noundef %80)
          to label %94 unwind label %123

94:                                               ; preds = %88
  %.fca.0.extract2 = extractvalue { <2 x float>, float } %93, 0
  %.fca.1.extract3 = extractvalue { <2 x float>, float } %93, 1
  %95 = load ptr, ptr %6, align 8, !tbaa !12
  %96 = getelementptr inbounds i8, ptr %95, i64 8
  %97 = load ptr, ptr %96, align 8, !tbaa !13
  %98 = getelementptr inbounds i8, ptr %97, i64 24
  store <2 x float> %.fca.0.extract2, ptr %98, align 4
  %.sroa.57.0..sroa_idx = getelementptr inbounds i8, ptr %97, i64 32
  store float %.fca.1.extract3, ptr %.sroa.57.0..sroa_idx, align 4, !tbaa !16
  call void @_ZN4Lava6Entity15SetBufferLayoutERSt6vectorINS_19VertexBufferElementESaIS2_EE(ptr noundef nonnull align 8 dereferenceable(40) %95, ptr noundef nonnull align 8 dereferenceable(24) %2)
  %99 = load ptr, ptr %6, align 8, !tbaa !12
  %100 = getelementptr inbounds i8, ptr %99, i64 32
  %101 = load ptr, ptr %100, align 8, !tbaa !17
  store ptr %37, ptr %101, align 8, !tbaa !18
  %102 = invoke { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824) %0, ptr noundef %18)
          to label %103 unwind label %125

103:                                              ; preds = %94
  %.fca.0.extract = extractvalue { <2 x float>, float } %102, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %102, 1
  %104 = load ptr, ptr %6, align 8, !tbaa !12
  %105 = getelementptr inbounds i8, ptr %104, i64 32
  %106 = load ptr, ptr %105, align 8, !tbaa !17
  %107 = getelementptr inbounds i8, ptr %106, i64 24
  store <2 x float> %.fca.0.extract, ptr %107, align 8
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %106, i64 32
  store float %.fca.1.extract, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !16
  br i1 %.not78, label %127, label %108

108:                                              ; preds = %103
  %109 = load ptr, ptr %105, align 8, !tbaa !17
  %110 = getelementptr inbounds i8, ptr %109, i64 8
  store ptr %.069, ptr %110, align 8, !tbaa !23
  br label %127

111:                                              ; preds = %71, %69
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %140

113:                                              ; preds = %75, %73
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %140

115:                                              ; preds = %79, %77
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %140

117:                                              ; preds = %132, %128, %81
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %136

119:                                              ; preds = %85, %83
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %82, i64 noundef 40) #9
  br label %136

121:                                              ; preds = %86
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %136

123:                                              ; preds = %88
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %136

125:                                              ; preds = %94
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %136

127:                                              ; preds = %108, %103
  %.not79 = icmp eq ptr %.074, null
  br i1 %.not79, label %128, label %130

128:                                              ; preds = %127
  %129 = invoke noundef ptr @_ZN4Lava6Entity15GetMeshRendererENS_8PlatformE(ptr noundef nonnull align 8 dereferenceable(40) %104, i32 noundef 0)
          to label %132 unwind label %117

130:                                              ; preds = %127
  %131 = getelementptr inbounds i8, ptr %104, i64 16
  store ptr %.074, ptr %131, align 8, !tbaa !24
  br label %132

132:                                              ; preds = %128, %130
  %.175 = phi ptr [ %.074, %130 ], [ %129, %128 ]
  %133 = load ptr, ptr %59, align 8, !tbaa !25
  invoke void @_ZNSt6vectorIPN4Lava6EntityESaIS2_EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 8 dereferenceable(8) %6)
          to label %134 unwind label %117

134:                                              ; preds = %132
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  %135 = invoke noundef ptr @_ZN8tinyxml27XMLNode18NextSiblingElementEPKc(ptr noundef nonnull align 8 dereferenceable(104) %.076, ptr noundef null)
          to label %60 unwind label %.loopexit, !llvm.loop !27

136:                                              ; preds = %125, %123, %121, %119, %117
  %.pn = phi { ptr, i32 } [ %118, %117 ], [ %126, %125 ], [ %124, %123 ], [ %122, %121 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  br label %140

137:                                              ; preds = %61
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #7
  ret void

138:                                              ; preds = %61
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %140

140:                                              ; preds = %.loopexit, %.loopexit.split-lp, %47, %63, %65, %113, %136, %115, %111, %138, %67, %49, %51, %45
  %.pn84.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %46, %45 ], [ %48, %47 ], [ %52, %51 ], [ %50, %49 ], [ %66, %65 ], [ %64, %63 ], [ %139, %138 ], [ %68, %67 ], [ %112, %111 ], [ %114, %113 ], [ %.pn, %136 ], [ %116, %115 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt6vectorIN4Lava19VertexBufferElementESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  br label %141

141:                                              ; preds = %140, %43
  %.pn84.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn84.pn.pn.pn.pn.pn, %140 ], [ %44, %43 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #7
  resume { ptr, i32 } %.pn84.pn.pn.pn.pn.pn.pn
}

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

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

declare noundef ptr @_ZNK8tinyxml210XMLElement7GetTextEv(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZNK4Lava5Scene13parse_vector3EPKc(ptr noundef nonnull align 8 dereferenceable(824), ptr noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

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

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

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

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

declare noundef ptr @_ZN4Lava9Importers13AssetImporter4LoadEPKc(ptr noundef) local_unnamed_addr #5

declare noundef ptr @_ZN4Lava13AssetDatabase11LoadTextureEPKcib(ptr noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Lava6EntityC2EN3glm3vecILi3EfLNS1_9qualifierE0EEEPNS_16MeshMaterialPackE(ptr noundef nonnull align 8 dereferenceable(40), <2 x float>, float, ptr noundef) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4Lava6Entity15GetMeshRendererENS_8PlatformE(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #4 align 2

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

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

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

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

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

attributes #0 = { nobuiltin allocsize(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 #1 = { nobuiltin 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 #2 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { builtin allocsize(0) }
attributes #9 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN4Lava19VertexBufferElementE", !7, i64 0, !10, i64 8}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 8}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !7, i64 8}
!14 = !{!"_ZTSN4Lava6EntityE", !15, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32}
!15 = !{!"_ZTSN4Lava11SceneObjectE"}
!16 = !{!8, !8, i64 0}
!17 = !{!14, !7, i64 32}
!18 = !{!19, !7, i64 0}
!19 = !{!"_ZTSN4Lava8MaterialE", !7, i64 0, !7, i64 8, !7, i64 16, !20, i64 24, !7, i64 40, !10, i64 48, !21, i64 52, !21, i64 53, !8, i64 56, !22, i64 68, !22, i64 72}
!20 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !8, i64 0, !8, i64 4, !8, i64 8}
!21 = !{!"bool", !8, i64 0}
!22 = !{!"float", !8, i64 0}
!23 = !{!19, !7, i64 8}
!24 = !{!14, !7, i64 16}
!25 = !{!26, !7, i64 8}
!26 = !{!"_ZTSN4Lava15BatchedEntitiesE", !15, i64 0, !7, i64 8}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}


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