; LLVM IR from Overload-Technologies/Overload :: Dependencies/assimp/code/AssetLib/Obj (ObjFileImporter)

; 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.__gnu_cxx::__normal_iterator.63" = type { ptr }
%class.aiColor4t = type { float, float, float, float }
%class.aiVector3t = type { float, float, float }
%"struct.Assimp::ObjFile::Object" = type { %"class.std::__cxx11::basic_string", %class.aiMatrix4x4t, %"class.std::vector.5", %"class.std::vector.10" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Object *, std::allocator<Assimp::ObjFile::Object *>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::ObjFile::Object *, std::allocator<Assimp::ObjFile::Object *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Object *, std::allocator<Assimp::ObjFile::Object *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::ObjFile::Object *, std::allocator<Assimp::ObjFile::Object *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.Assimp::ObjFile::Model" = type { %"class.std::__cxx11::basic_string", %"class.std::vector.5", ptr, ptr, ptr, %"class.std::vector.0", %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.26", %"class.std::map", ptr, %"class.std::__cxx11::basic_string", %"class.std::vector.26", i32, ptr, %"class.std::vector.34", %"class.std::map.39" }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::vector<unsigned int> *>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::vector<unsigned int> *>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::vector<unsigned int> *>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::vector<unsigned int> *>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Mesh *, std::allocator<Assimp::ObjFile::Mesh *>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::ObjFile::Mesh *, std::allocator<Assimp::ObjFile::Mesh *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Mesh *, std::allocator<Assimp::ObjFile::Mesh *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::ObjFile::Mesh *, std::allocator<Assimp::ObjFile::Mesh *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.39" = type { %"class.std::_Rb_tree.40" }
%"class.std::_Rb_tree.40" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Assimp::ObjFile::Material *>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Assimp::ObjFile::Material *>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Assimp::ObjFile::Material *>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Assimp::ObjFile::Material *>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.Assimp::ObjFile::Mesh" = type <{ %"class.std::__cxx11::basic_string", %"class.std::vector.58", ptr, i32, [8 x i32], i32, i8, [7 x i8] }>
%"class.std::vector.58" = type { %"struct.std::_Vector_base.59" }
%"struct.std::_Vector_base.59" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Face *, std::allocator<Assimp::ObjFile::Face *>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::ObjFile::Face *, std::allocator<Assimp::ObjFile::Face *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::ObjFile::Face *, std::allocator<Assimp::ObjFile::Face *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::ObjFile::Face *, std::allocator<Assimp::ObjFile::Face *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%"struct.Assimp::ObjFile::Face" = type { i32, %"class.std::vector.10", %"class.std::vector.10", %"class.std::vector.10", ptr }
%struct.aiFace = type { i32, ptr }

@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.14 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #5

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

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

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

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

; 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) #7

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #8

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp15ObjFileImporter17createVertexArrayEPKNS_7ObjFile5ModelEPKNS1_6ObjectEjP6aiMeshj(ptr noundef nonnull align 8 dereferenceable(136) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.63", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.63", align 8
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca %class.aiColor4t, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca %class.aiVector3t, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !9
  %37 = load ptr, ptr %7, align 8
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = icmp ne ptr null, %38
  br i1 %39, label %41, label %40

40:                                               ; preds = %6
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.20, ptr noundef @.str.14, i32 noundef 406)
  br label %41

41:                                               ; preds = %40, %6
  %42 = phi i1 [ true, %6 ], [ false, %40 ]
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = getelementptr inbounds %"struct.Assimp::ObjFile::Object", ptr %43, i32 0, i32 3
  %45 = call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  br i1 %45, label %46, label %47

46:                                               ; preds = %41
  br label %578

47:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %48, i32 0, i32 15
  %50 = load i32, ptr %10, align 4, !tbaa !9
  %51 = zext i32 %50 to i64
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %49, i64 noundef %51) #10
  %53 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %53, ptr %13, align 8, !tbaa !5
  %54 = load ptr, ptr %13, align 8, !tbaa !5
  %55 = icmp eq ptr null, %54
  br i1 %55, label %61, label %56

56:                                               ; preds = %47
  %57 = load ptr, ptr %13, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %57, i32 0, i32 3
  %59 = load i32, ptr %58, align 8, !tbaa !11
  %60 = icmp ult i32 %59, 1
  br i1 %60, label %61, label %62

61:                                               ; preds = %56, %47
  store i32 1, ptr %14, align 4
  br label %576

62:                                               ; preds = %56
  %63 = load i32, ptr %12, align 4, !tbaa !9
  %64 = load ptr, ptr %11, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.aiMesh, ptr %64, i32 0, i32 1
  store i32 %63, ptr %65, align 4, !tbaa !21
  %66 = load ptr, ptr %11, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.aiMesh, ptr %66, i32 0, i32 1
  %68 = load i32, ptr %67, align 4, !tbaa !21
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %77

70:                                               ; preds = %62
  %71 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef @.str.21)
          to label %72 unwind label %73

72:                                               ; preds = %70
  call void @__cxa_throw(ptr %71, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

73:                                               ; preds = %70
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %15, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %16, align 4
  call void @__cxa_free_exception(ptr %71) #10
  br label %579

77:                                               ; preds = %62
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.aiMesh, ptr %78, i32 0, i32 1
  %80 = load i32, ptr %79, align 4, !tbaa !21
  %81 = icmp ugt i32 %80, 2147483647
  br i1 %81, label %82, label %89

82:                                               ; preds = %77
  %83 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %83, ptr noundef @.str.22)
          to label %84 unwind label %85

84:                                               ; preds = %82
  call void @__cxa_throw(ptr %83, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

85:                                               ; preds = %82
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %15, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %16, align 4
  call void @__cxa_free_exception(ptr %83) #10
  br label %579

89:                                               ; preds = %77
  br label %90

90:                                               ; preds = %89
  %91 = load ptr, ptr %11, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.aiMesh, ptr %91, i32 0, i32 1
  %93 = load i32, ptr %92, align 4, !tbaa !21
  %94 = zext i32 %93 to i64
  %95 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %94, i64 12)
  %96 = extractvalue { i64, i1 } %95, 1
  %97 = extractvalue { i64, i1 } %95, 0
  %98 = select i1 %96, i64 -1, i64 %97
  %99 = call noalias noundef nonnull ptr @_Znam(i64 noundef %98) #12
  %100 = icmp eq i64 %94, 0
  br i1 %100, label %107, label %101

101:                                              ; preds = %90
  %102 = getelementptr inbounds %class.aiVector3t, ptr %99, i64 %94
  br label %103

103:                                              ; preds = %103, %101
  %104 = phi ptr [ %99, %101 ], [ %105, %103 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %104) #10
  %105 = getelementptr inbounds %class.aiVector3t, ptr %104, i64 1
  %106 = icmp eq ptr %105, %102
  br i1 %106, label %107, label %103

107:                                              ; preds = %103, %90
  %108 = load ptr, ptr %11, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.aiMesh, ptr %108, i32 0, i32 3
  store ptr %99, ptr %109, align 8, !tbaa !28
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %110, i32 0, i32 7
  %112 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %111) #10
  br i1 %112, label %138, label %113

113:                                              ; preds = %107
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %114, i32 0, i32 6
  %116 = load i8, ptr %115, align 8, !tbaa !29, !range !30, !noundef !31
  %117 = trunc i8 %116 to i1
  br i1 %117, label %118, label %138

118:                                              ; preds = %113
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.aiMesh, ptr %119, i32 0, i32 1
  %121 = load i32, ptr %120, align 4, !tbaa !21
  %122 = zext i32 %121 to i64
  %123 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %122, i64 12)
  %124 = extractvalue { i64, i1 } %123, 1
  %125 = extractvalue { i64, i1 } %123, 0
  %126 = select i1 %124, i64 -1, i64 %125
  %127 = call noalias noundef nonnull ptr @_Znam(i64 noundef %126) #12
  %128 = icmp eq i64 %122, 0
  br i1 %128, label %135, label %129

129:                                              ; preds = %118
  %130 = getelementptr inbounds %class.aiVector3t, ptr %127, i64 %122
  br label %131

131:                                              ; preds = %131, %129
  %132 = phi ptr [ %127, %129 ], [ %133, %131 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %132) #10
  %133 = getelementptr inbounds %class.aiVector3t, ptr %132, i64 1
  %134 = icmp eq ptr %133, %130
  br i1 %134, label %135, label %131

135:                                              ; preds = %131, %118
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.aiMesh, ptr %136, i32 0, i32 4
  store ptr %127, ptr %137, align 8, !tbaa !32
  br label %138

138:                                              ; preds = %135, %113, %107
  %139 = load ptr, ptr %8, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %139, i32 0, i32 8
  %141 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %140) #10
  br i1 %141, label %163, label %142

142:                                              ; preds = %138
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.aiMesh, ptr %143, i32 0, i32 1
  %145 = load i32, ptr %144, align 4, !tbaa !21
  %146 = zext i32 %145 to i64
  %147 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %146, i64 16)
  %148 = extractvalue { i64, i1 } %147, 1
  %149 = extractvalue { i64, i1 } %147, 0
  %150 = select i1 %148, i64 -1, i64 %149
  %151 = call noalias noundef nonnull ptr @_Znam(i64 noundef %150) #12
  %152 = icmp eq i64 %146, 0
  br i1 %152, label %159, label %153

153:                                              ; preds = %142
  %154 = getelementptr inbounds %class.aiColor4t, ptr %151, i64 %146
  br label %155

155:                                              ; preds = %155, %153
  %156 = phi ptr [ %151, %153 ], [ %157, %155 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %156) #10
  %157 = getelementptr inbounds %class.aiColor4t, ptr %156, i64 1
  %158 = icmp eq ptr %157, %154
  br i1 %158, label %159, label %155

159:                                              ; preds = %155, %142
  %160 = load ptr, ptr %11, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.aiMesh, ptr %160, i32 0, i32 7
  %162 = getelementptr inbounds [8 x ptr], ptr %161, i64 0, i64 0
  store ptr %151, ptr %162, align 8, !tbaa !5
  br label %163

163:                                              ; preds = %159, %138
  %164 = load ptr, ptr %8, align 8, !tbaa !5
  %165 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %164, i32 0, i32 12
  %166 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %165) #10
  br i1 %166, label %200, label %167

167:                                              ; preds = %163
  %168 = load ptr, ptr %13, align 8, !tbaa !5
  %169 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %168, i32 0, i32 4
  %170 = getelementptr inbounds [8 x i32], ptr %169, i64 0, i64 0
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %200

173:                                              ; preds = %167
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %174, i32 0, i32 13
  %176 = load i32, ptr %175, align 8, !tbaa !33
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.aiMesh, ptr %177, i32 0, i32 9
  %179 = getelementptr inbounds [8 x i32], ptr %178, i64 0, i64 0
  store i32 %176, ptr %179, align 8, !tbaa !9
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.aiMesh, ptr %180, i32 0, i32 1
  %182 = load i32, ptr %181, align 4, !tbaa !21
  %183 = zext i32 %182 to i64
  %184 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %183, i64 12)
  %185 = extractvalue { i64, i1 } %184, 1
  %186 = extractvalue { i64, i1 } %184, 0
  %187 = select i1 %185, i64 -1, i64 %186
  %188 = call noalias noundef nonnull ptr @_Znam(i64 noundef %187) #12
  %189 = icmp eq i64 %183, 0
  br i1 %189, label %196, label %190

190:                                              ; preds = %173
  %191 = getelementptr inbounds %class.aiVector3t, ptr %188, i64 %183
  br label %192

192:                                              ; preds = %192, %190
  %193 = phi ptr [ %188, %190 ], [ %194, %192 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %193) #10
  %194 = getelementptr inbounds %class.aiVector3t, ptr %193, i64 1
  %195 = icmp eq ptr %194, %191
  br i1 %195, label %196, label %192

196:                                              ; preds = %192, %173
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.aiMesh, ptr %197, i32 0, i32 8
  %199 = getelementptr inbounds [8 x ptr], ptr %198, i64 0, i64 0
  store ptr %188, ptr %199, align 8, !tbaa !5
  br label %200

200:                                              ; preds = %196, %167, %163
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #10
  store i8 1, ptr %17, align 1, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #10
  store i8 1, ptr %18, align 1, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %201 = load ptr, ptr %13, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %201, i32 0, i32 1
  store ptr %202, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %203 = load ptr, ptr %21, align 8, !tbaa !5
  %204 = call ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %203) #10
  %205 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.63", ptr %22, i32 0, i32 0
  store ptr %204, ptr %205, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %206 = load ptr, ptr %21, align 8, !tbaa !5
  %207 = call ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %206) #10
  %208 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.63", ptr %23, i32 0, i32 0
  store ptr %207, ptr %208, align 8
  br label %209

209:                                              ; preds = %547, %200
  %210 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  br i1 %210, label %212, label %211

211:                                              ; preds = %209
  store i32 2, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  br label %549

212:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #10
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  store ptr %214, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  store i64 0, ptr %25, align 8, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  store i64 0, ptr %26, align 8, !tbaa !63
  br label %215

215:                                              ; preds = %542, %212
  %216 = load i64, ptr %25, align 8, !tbaa !63
  %217 = load ptr, ptr %24, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %217, i32 0, i32 1
  %219 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %218) #10
  %220 = icmp ult i64 %216, %219
  br i1 %220, label %222, label %221

221:                                              ; preds = %215
  store i32 4, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %546

222:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %223 = load ptr, ptr %24, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %223, i32 0, i32 1
  %225 = load i64, ptr %25, align 8, !tbaa !63
  %226 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %224, i64 noundef %225)
  %227 = load i32, ptr %226, align 4, !tbaa !9
  store i32 %227, ptr %27, align 4, !tbaa !9
  %228 = load i32, ptr %27, align 4, !tbaa !9
  %229 = zext i32 %228 to i64
  %230 = load ptr, ptr %8, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %230, i32 0, i32 6
  %232 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %231) #10
  %233 = icmp uge i64 %229, %232
  br i1 %233, label %234, label %241

234:                                              ; preds = %222
  %235 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %235, ptr noundef @.str.23)
          to label %236 unwind label %237

236:                                              ; preds = %234
  call void @__cxa_throw(ptr %235, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

237:                                              ; preds = %234
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %15, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %16, align 4
  call void @__cxa_free_exception(ptr %235) #10
  br label %545

241:                                              ; preds = %222
  %242 = load ptr, ptr %11, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.aiMesh, ptr %242, i32 0, i32 1
  %244 = load i32, ptr %243, align 4, !tbaa !21
  %245 = load i32, ptr %19, align 4, !tbaa !9
  %246 = icmp ule i32 %244, %245
  br i1 %246, label %247, label %254

247:                                              ; preds = %241
  %248 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %248, ptr noundef @.str.24)
          to label %249 unwind label %250

249:                                              ; preds = %247
  call void @__cxa_throw(ptr %248, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

250:                                              ; preds = %247
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %15, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %16, align 4
  call void @__cxa_free_exception(ptr %248) #10
  br label %545

254:                                              ; preds = %241
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %255, i32 0, i32 6
  %257 = load i32, ptr %27, align 4, !tbaa !9
  %258 = zext i32 %257 to i64
  %259 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %256, i64 noundef %258) #10
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.aiMesh, ptr %260, i32 0, i32 3
  %262 = load ptr, ptr %261, align 8, !tbaa !28
  %263 = load i32, ptr %19, align 4, !tbaa !9
  %264 = zext i32 %263 to i64
  %265 = getelementptr inbounds %class.aiVector3t, ptr %262, i64 %264
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %265, ptr align 4 %259, i64 12, i1 false), !tbaa.struct !64
  %266 = load i8, ptr %17, align 1, !tbaa !62, !range !30, !noundef !31
  %267 = trunc i8 %266 to i1
  br i1 %267, label %268, label %304

268:                                              ; preds = %254
  %269 = load ptr, ptr %8, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %269, i32 0, i32 7
  %271 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %270) #10
  br i1 %271, label %304, label %272

272:                                              ; preds = %268
  %273 = load i64, ptr %25, align 8, !tbaa !63
  %274 = load ptr, ptr %24, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %274, i32 0, i32 2
  %276 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %275) #10
  %277 = icmp ult i64 %273, %276
  br i1 %277, label %278, label %304

278:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %279, i32 0, i32 2
  %281 = load i64, ptr %25, align 8, !tbaa !63
  %282 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %280, i64 noundef %281)
  %283 = load i32, ptr %282, align 4, !tbaa !9
  store i32 %283, ptr %28, align 4, !tbaa !9
  %284 = load i32, ptr %28, align 4, !tbaa !9
  %285 = zext i32 %284 to i64
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %286, i32 0, i32 7
  %288 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %287) #10
  %289 = icmp uge i64 %285, %288
  br i1 %289, label %290, label %291

290:                                              ; preds = %278
  store i8 0, ptr %17, align 1, !tbaa !62
  br label %303

291:                                              ; preds = %278
  %292 = load ptr, ptr %8, align 8, !tbaa !5
  %293 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %292, i32 0, i32 7
  %294 = load i32, ptr %28, align 4, !tbaa !9
  %295 = zext i32 %294 to i64
  %296 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %293, i64 noundef %295) #10
  %297 = load ptr, ptr %11, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.aiMesh, ptr %297, i32 0, i32 4
  %299 = load ptr, ptr %298, align 8, !tbaa !32
  %300 = load i32, ptr %19, align 4, !tbaa !9
  %301 = zext i32 %300 to i64
  %302 = getelementptr inbounds %class.aiVector3t, ptr %299, i64 %301
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %302, ptr align 4 %296, i64 12, i1 false), !tbaa.struct !64
  br label %303

303:                                              ; preds = %291, %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %304

304:                                              ; preds = %303, %272, %268, %254
  %305 = load i32, ptr %27, align 4, !tbaa !9
  %306 = zext i32 %305 to i64
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %307, i32 0, i32 8
  %309 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %308) #10
  %310 = icmp ult i64 %306, %309
  br i1 %310, label %311, label %333

311:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %312 = load ptr, ptr %8, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %312, i32 0, i32 8
  %314 = load i32, ptr %27, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  %316 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %313, i64 noundef %315) #10
  store ptr %316, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #10
  %317 = load ptr, ptr %29, align 8, !tbaa !5
  %318 = getelementptr inbounds %class.aiVector3t, ptr %317, i32 0, i32 0
  %319 = load float, ptr %318, align 4, !tbaa !66
  %320 = load ptr, ptr %29, align 8, !tbaa !5
  %321 = getelementptr inbounds %class.aiVector3t, ptr %320, i32 0, i32 1
  %322 = load float, ptr %321, align 4, !tbaa !67
  %323 = load ptr, ptr %29, align 8, !tbaa !5
  %324 = getelementptr inbounds %class.aiVector3t, ptr %323, i32 0, i32 2
  %325 = load float, ptr %324, align 4, !tbaa !68
  call void @_ZN9aiColor4tIfEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %30, float noundef %319, float noundef %322, float noundef %325, float noundef 1.000000e+00)
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.aiMesh, ptr %326, i32 0, i32 7
  %328 = getelementptr inbounds [8 x ptr], ptr %327, i64 0, i64 0
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  %330 = load i32, ptr %19, align 4, !tbaa !9
  %331 = zext i32 %330 to i64
  %332 = getelementptr inbounds %class.aiColor4t, ptr %329, i64 %331
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %332, ptr align 4 %30, i64 16, i1 false), !tbaa.struct !69
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %333

333:                                              ; preds = %311, %304
  %334 = load i8, ptr %18, align 1, !tbaa !62, !range !30, !noundef !31
  %335 = trunc i8 %334 to i1
  br i1 %335, label %336, label %382

336:                                              ; preds = %333
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %337, i32 0, i32 12
  %339 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %338) #10
  br i1 %339, label %382, label %340

340:                                              ; preds = %336
  %341 = load i64, ptr %25, align 8, !tbaa !63
  %342 = load ptr, ptr %24, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %342, i32 0, i32 3
  %344 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %343) #10
  %345 = icmp ult i64 %341, %344
  br i1 %345, label %346, label %382

346:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  %347 = load ptr, ptr %24, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %347, i32 0, i32 3
  %349 = load i64, ptr %25, align 8, !tbaa !63
  %350 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %348, i64 noundef %349)
  %351 = load i32, ptr %350, align 4, !tbaa !9
  store i32 %351, ptr %31, align 4, !tbaa !9
  %352 = load i32, ptr %31, align 4, !tbaa !9
  %353 = zext i32 %352 to i64
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %354, i32 0, i32 12
  %356 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %355) #10
  %357 = icmp uge i64 %353, %356
  br i1 %357, label %358, label %359

358:                                              ; preds = %346
  store i8 0, ptr %18, align 1, !tbaa !62
  br label %381

359:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %360, i32 0, i32 12
  %362 = load i32, ptr %31, align 4, !tbaa !9
  %363 = zext i32 %362 to i64
  %364 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %361, i64 noundef %363) #10
  store ptr %364, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %33) #10
  %365 = load ptr, ptr %32, align 8, !tbaa !5
  %366 = getelementptr inbounds %class.aiVector3t, ptr %365, i32 0, i32 0
  %367 = load float, ptr %366, align 4, !tbaa !66
  %368 = load ptr, ptr %32, align 8, !tbaa !5
  %369 = getelementptr inbounds %class.aiVector3t, ptr %368, i32 0, i32 1
  %370 = load float, ptr %369, align 4, !tbaa !67
  %371 = load ptr, ptr %32, align 8, !tbaa !5
  %372 = getelementptr inbounds %class.aiVector3t, ptr %371, i32 0, i32 2
  %373 = load float, ptr %372, align 4, !tbaa !68
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %33, float noundef %367, float noundef %370, float noundef %373)
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.aiMesh, ptr %374, i32 0, i32 8
  %376 = getelementptr inbounds [8 x ptr], ptr %375, i64 0, i64 0
  %377 = load ptr, ptr %376, align 8, !tbaa !5
  %378 = load i32, ptr %19, align 4, !tbaa !9
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds %class.aiVector3t, ptr %377, i64 %379
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %380, ptr align 4 %33, i64 12, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.end.p0(i64 12, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  br label %381

381:                                              ; preds = %359, %358
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %382

382:                                              ; preds = %381, %340, %336, %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %383 = load ptr, ptr %11, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.aiMesh, ptr %383, i32 0, i32 10
  %385 = load ptr, ptr %384, align 8, !tbaa !70
  %386 = load i32, ptr %20, align 4, !tbaa !9
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds %struct.aiFace, ptr %385, i64 %387
  store ptr %388, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #10
  %389 = load i64, ptr %25, align 8, !tbaa !63
  %390 = load ptr, ptr %24, align 8, !tbaa !5
  %391 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %390, i32 0, i32 1
  %392 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %391) #10
  %393 = sub i64 %392, 1
  %394 = icmp eq i64 %389, %393
  %395 = zext i1 %394 to i8
  store i8 %395, ptr %35, align 1, !tbaa !62
  %396 = load ptr, ptr %24, align 8, !tbaa !5
  %397 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %396, i32 0, i32 0
  %398 = load i32, ptr %397, align 8, !tbaa !71
  %399 = icmp ne i32 %398, 2
  br i1 %399, label %403, label %400

400:                                              ; preds = %382
  %401 = load i8, ptr %35, align 1, !tbaa !62, !range !30, !noundef !31
  %402 = trunc i8 %401 to i1
  br i1 %402, label %412, label %403

403:                                              ; preds = %400, %382
  %404 = load i32, ptr %19, align 4, !tbaa !9
  %405 = load ptr, ptr %34, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.aiFace, ptr %405, i32 0, i32 1
  %407 = load ptr, ptr %406, align 8, !tbaa !78
  %408 = load i64, ptr %26, align 8, !tbaa !63
  %409 = getelementptr inbounds i32, ptr %407, i64 %408
  store i32 %404, ptr %409, align 4, !tbaa !9
  %410 = load i64, ptr %26, align 8, !tbaa !63
  %411 = add i64 %410, 1
  store i64 %411, ptr %26, align 8, !tbaa !63
  br label %412

412:                                              ; preds = %403, %400
  %413 = load ptr, ptr %24, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %413, i32 0, i32 0
  %415 = load i32, ptr %414, align 8, !tbaa !71
  %416 = icmp eq i32 %415, 1
  br i1 %416, label %417, label %420

417:                                              ; preds = %412
  %418 = load i32, ptr %20, align 4, !tbaa !9
  %419 = add i32 %418, 1
  store i32 %419, ptr %20, align 4, !tbaa !9
  store i64 0, ptr %26, align 8, !tbaa !63
  br label %539

420:                                              ; preds = %412
  %421 = load ptr, ptr %24, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %421, i32 0, i32 0
  %423 = load i32, ptr %422, align 8, !tbaa !71
  %424 = icmp eq i32 %423, 2
  br i1 %424, label %425, label %531

425:                                              ; preds = %420
  store i64 0, ptr %26, align 8, !tbaa !63
  %426 = load i8, ptr %35, align 1, !tbaa !62, !range !30, !noundef !31
  %427 = trunc i8 %426 to i1
  br i1 %427, label %431, label %428

428:                                              ; preds = %425
  %429 = load i32, ptr %20, align 4, !tbaa !9
  %430 = add i32 %429, 1
  store i32 %430, ptr %20, align 4, !tbaa !9
  br label %431

431:                                              ; preds = %428, %425
  %432 = load i64, ptr %25, align 8, !tbaa !63
  %433 = icmp ne i64 %432, 0
  br i1 %433, label %434, label %530

434:                                              ; preds = %431
  %435 = load i8, ptr %35, align 1, !tbaa !62, !range !30, !noundef !31
  %436 = trunc i8 %435 to i1
  br i1 %436, label %523, label %437

437:                                              ; preds = %434
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.aiMesh, ptr %438, i32 0, i32 1
  %440 = load i32, ptr %439, align 4, !tbaa !21
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = add i32 %441, 1
  %443 = icmp ule i32 %440, %442
  br i1 %443, label %444, label %451

444:                                              ; preds = %437
  %445 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %445, ptr noundef @.str.24)
          to label %446 unwind label %447

446:                                              ; preds = %444
  call void @__cxa_throw(ptr %445, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

447:                                              ; preds = %444
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %15, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %16, align 4
  call void @__cxa_free_exception(ptr %445) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %545

451:                                              ; preds = %437
  %452 = load ptr, ptr %11, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.aiMesh, ptr %452, i32 0, i32 3
  %454 = load ptr, ptr %453, align 8, !tbaa !28
  %455 = load i32, ptr %19, align 4, !tbaa !9
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds %class.aiVector3t, ptr %454, i64 %456
  %458 = load ptr, ptr %11, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.aiMesh, ptr %458, i32 0, i32 3
  %460 = load ptr, ptr %459, align 8, !tbaa !28
  %461 = load i32, ptr %19, align 4, !tbaa !9
  %462 = add i32 %461, 1
  %463 = zext i32 %462 to i64
  %464 = getelementptr inbounds %class.aiVector3t, ptr %460, i64 %463
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %464, ptr align 4 %457, i64 12, i1 false), !tbaa.struct !64
  %465 = load ptr, ptr %24, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %465, i32 0, i32 2
  %467 = call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %466) #10
  br i1 %467, label %486, label %468

468:                                              ; preds = %451
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %469, i32 0, i32 7
  %471 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %470) #10
  br i1 %471, label %486, label %472

472:                                              ; preds = %468
  %473 = load ptr, ptr %11, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.aiMesh, ptr %473, i32 0, i32 4
  %475 = load ptr, ptr %474, align 8, !tbaa !32
  %476 = load i32, ptr %19, align 4, !tbaa !9
  %477 = zext i32 %476 to i64
  %478 = getelementptr inbounds %class.aiVector3t, ptr %475, i64 %477
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.aiMesh, ptr %479, i32 0, i32 4
  %481 = load ptr, ptr %480, align 8, !tbaa !32
  %482 = load i32, ptr %19, align 4, !tbaa !9
  %483 = add i32 %482, 1
  %484 = zext i32 %483 to i64
  %485 = getelementptr inbounds %class.aiVector3t, ptr %481, i64 %484
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %485, ptr align 4 %478, i64 12, i1 false), !tbaa.struct !64
  br label %486

486:                                              ; preds = %472, %468, %451
  %487 = load ptr, ptr %8, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %487, i32 0, i32 12
  %489 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %488) #10
  br i1 %489, label %520, label %490

490:                                              ; preds = %486
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  store i64 0, ptr %36, align 8, !tbaa !63
  br label %491

491:                                              ; preds = %516, %490
  %492 = load i64, ptr %36, align 8, !tbaa !63
  %493 = load ptr, ptr %11, align 8, !tbaa !5
  %494 = call noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %493)
  %495 = zext i32 %494 to i64
  %496 = icmp ult i64 %492, %495
  br i1 %496, label %498, label %497

497:                                              ; preds = %491
  store i32 7, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %519

498:                                              ; preds = %491
  %499 = load ptr, ptr %11, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.aiMesh, ptr %499, i32 0, i32 8
  %501 = load i64, ptr %36, align 8, !tbaa !63
  %502 = getelementptr inbounds [8 x ptr], ptr %500, i64 0, i64 %501
  %503 = load ptr, ptr %502, align 8, !tbaa !5
  %504 = load i32, ptr %19, align 4, !tbaa !9
  %505 = zext i32 %504 to i64
  %506 = getelementptr inbounds %class.aiVector3t, ptr %503, i64 %505
  %507 = load ptr, ptr %11, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.aiMesh, ptr %507, i32 0, i32 8
  %509 = load i64, ptr %36, align 8, !tbaa !63
  %510 = getelementptr inbounds [8 x ptr], ptr %508, i64 0, i64 %509
  %511 = load ptr, ptr %510, align 8, !tbaa !5
  %512 = load i32, ptr %19, align 4, !tbaa !9
  %513 = add i32 %512, 1
  %514 = zext i32 %513 to i64
  %515 = getelementptr inbounds %class.aiVector3t, ptr %511, i64 %514
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %515, ptr align 4 %506, i64 12, i1 false), !tbaa.struct !64
  br label %516

516:                                              ; preds = %498
  %517 = load i64, ptr %36, align 8, !tbaa !63
  %518 = add i64 %517, 1
  store i64 %518, ptr %36, align 8, !tbaa !63
  br label %491, !llvm.loop !80

519:                                              ; preds = %497
  br label %520

520:                                              ; preds = %519, %486
  %521 = load i32, ptr %19, align 4, !tbaa !9
  %522 = add i32 %521, 1
  store i32 %522, ptr %19, align 4, !tbaa !9
  br label %523

523:                                              ; preds = %520, %434
  %524 = load i32, ptr %19, align 4, !tbaa !9
  %525 = load ptr, ptr %34, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.aiFace, ptr %525, i64 -1
  %527 = getelementptr inbounds %struct.aiFace, ptr %526, i32 0, i32 1
  %528 = load ptr, ptr %527, align 8, !tbaa !78
  %529 = getelementptr inbounds i32, ptr %528, i64 1
  store i32 %524, ptr %529, align 4, !tbaa !9
  br label %530

530:                                              ; preds = %523, %431
  br label %538

531:                                              ; preds = %420
  %532 = load i8, ptr %35, align 1, !tbaa !62, !range !30, !noundef !31
  %533 = trunc i8 %532 to i1
  br i1 %533, label %534, label %537

534:                                              ; preds = %531
  %535 = load i32, ptr %20, align 4, !tbaa !9
  %536 = add i32 %535, 1
  store i32 %536, ptr %20, align 4, !tbaa !9
  br label %537

537:                                              ; preds = %534, %531
  br label %538

538:                                              ; preds = %537, %530
  br label %539

539:                                              ; preds = %538, %417
  %540 = load i32, ptr %19, align 4, !tbaa !9
  %541 = add i32 %540, 1
  store i32 %541, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  br label %542

542:                                              ; preds = %539
  %543 = load i64, ptr %25, align 8, !tbaa !63
  %544 = add i64 %543, 1
  store i64 %544, ptr %25, align 8, !tbaa !63
  br label %215, !llvm.loop !82

545:                                              ; preds = %447, %250, %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #10
  br label %579

546:                                              ; preds = %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  br label %547

547:                                              ; preds = %546
  %548 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #10
  br label %209

549:                                              ; preds = %211
  %550 = load i8, ptr %17, align 1, !tbaa !62, !range !30, !noundef !31
  %551 = trunc i8 %550 to i1
  br i1 %551, label %561, label %552

552:                                              ; preds = %549
  %553 = load ptr, ptr %11, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.aiMesh, ptr %553, i32 0, i32 4
  %555 = load ptr, ptr %554, align 8, !tbaa !32
  %556 = icmp eq ptr %555, null
  br i1 %556, label %558, label %557

557:                                              ; preds = %552
  call void @_ZdaPv(ptr noundef %555) #13
  br label %558

558:                                              ; preds = %557, %552
  %559 = load ptr, ptr %11, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.aiMesh, ptr %559, i32 0, i32 4
  store ptr null, ptr %560, align 8, !tbaa !32
  br label %561

561:                                              ; preds = %558, %549
  %562 = load i8, ptr %18, align 1, !tbaa !62, !range !30, !noundef !31
  %563 = trunc i8 %562 to i1
  br i1 %563, label %575, label %564

564:                                              ; preds = %561
  %565 = load ptr, ptr %11, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.aiMesh, ptr %565, i32 0, i32 8
  %567 = getelementptr inbounds [8 x ptr], ptr %566, i64 0, i64 0
  %568 = load ptr, ptr %567, align 8, !tbaa !5
  %569 = icmp eq ptr %568, null
  br i1 %569, label %571, label %570

570:                                              ; preds = %564
  call void @_ZdaPv(ptr noundef %568) #13
  br label %571

571:                                              ; preds = %570, %564
  %572 = load ptr, ptr %11, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.aiMesh, ptr %572, i32 0, i32 8
  %574 = getelementptr inbounds [8 x ptr], ptr %573, i64 0, i64 0
  store ptr null, ptr %574, align 8, !tbaa !5
  br label %575

575:                                              ; preds = %571, %561
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #10
  store i32 0, ptr %14, align 4
  br label %576

576:                                              ; preds = %575, %61
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  %577 = load i32, ptr %14, align 4
  switch i32 %577, label %585 [
    i32 0, label %578
    i32 1, label %578
  ]

578:                                              ; preds = %576, %576, %46
  ret void

579:                                              ; preds = %545, %85, %73
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  br label %580

580:                                              ; preds = %579
  %581 = load ptr, ptr %15, align 8
  %582 = load i32, ptr %16, align 4
  %583 = insertvalue { ptr, i32 } poison, ptr %581, 0
  %584 = insertvalue { ptr, i32 } %583, i32 %582, 1
  resume { ptr, i32 } %584

585:                                              ; preds = %576
  unreachable
}

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #9

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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"="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 = { "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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { nounwind }
attributes #11 = { noreturn }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 64}
!12 = !{!"_ZTSN6Assimp7ObjFile4MeshE", !13, i64 0, !16, i64 32, !6, i64 56, !10, i64 64, !7, i64 68, !10, i64 100, !20, i64 104}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"bool", !7, i64 0}
!21 = !{!22, !10, i64 4}
!22 = !{!"_ZTS6aiMesh", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !10, i64 216, !6, i64 224, !10, i64 232, !23, i64 236, !10, i64 1264, !6, i64 1272, !24, i64 1280, !25, i64 1284, !6, i64 1312}
!23 = !{!"_ZTS8aiString", !10, i64 0, !7, i64 4}
!24 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!25 = !{!"_ZTS6aiAABB", !26, i64 0, !26, i64 12}
!26 = !{!"_ZTS10aiVector3tIfE", !27, i64 0, !27, i64 4, !27, i64 8}
!27 = !{!"float", !7, i64 0}
!28 = !{!22, !6, i64 16}
!29 = !{!12, !20, i64 104}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!22, !6, i64 24}
!33 = !{!34, !10, i64 288}
!34 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !13, i64 0, !35, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !39, i64 80, !43, i64 104, !43, i64 128, !43, i64 152, !47, i64 176, !6, i64 224, !13, i64 232, !43, i64 264, !10, i64 288, !6, i64 296, !55, i64 304, !59, i64 328}
!35 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!47 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !48, i64 0}
!48 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !49, i64 0}
!49 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !50, i64 0, !52, i64 8}
!50 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !51, i64 0}
!51 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!52 = !{!"_ZTSSt15_Rb_tree_header", !53, i64 0, !15, i64 32}
!53 = !{!"_ZTSSt18_Rb_tree_node_base", !54, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!54 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!55 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !60, i64 0}
!60 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !61, i64 0}
!61 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !50, i64 0, !52, i64 8}
!62 = !{!20, !20, i64 0}
!63 = !{!15, !15, i64 0}
!64 = !{i64 0, i64 4, !65, i64 4, i64 4, !65, i64 8, i64 4, !65}
!65 = !{!27, !27, i64 0}
!66 = !{!26, !27, i64 0}
!67 = !{!26, !27, i64 4}
!68 = !{!26, !27, i64 8}
!69 = !{i64 0, i64 4, !65, i64 4, i64 4, !65, i64 8, i64 4, !65, i64 12, i64 4, !65}
!70 = !{!22, !6, i64 208}
!71 = !{!72, !73, i64 0}
!72 = !{!"_ZTSN6Assimp7ObjFile4FaceE", !73, i64 0, !74, i64 8, !74, i64 32, !74, i64 56, !6, i64 80}
!73 = !{!"_ZTS15aiPrimitiveType", !7, i64 0}
!74 = !{!"_ZTSSt6vectorIjSaIjEE", !75, i64 0}
!75 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!78 = !{!79, !6, i64 8}
!79 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!80 = distinct !{!80, !81}
!81 = !{!"llvm.loop.mustprogress"}
!82 = distinct !{!82, !81}


; 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.__gnu_cxx::__normal_iterator.63" = type { ptr }
%class.aiColor4t = type { float, float, float, float }
%class.aiVector3t = type { float, float, float }
%struct.aiFace = type { i32, ptr }

@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.14 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

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

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp15ObjFileImporter17createVertexArrayEPKNS_7ObjFile5ModelEPKNS1_6ObjectEjP6aiMeshj(ptr nocapture noundef nonnull readnone align 8 dereferenceable(136) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.63", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.63", align 8
  %9 = alloca %class.aiColor4t, align 4
  %10 = alloca %class.aiVector3t, align 4
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %11, label %12

11:                                               ; preds = %6
  tail call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.14, i32 noundef 406)
  br label %12

12:                                               ; preds = %11, %6
  %13 = getelementptr inbounds i8, ptr %2, i64 120
  %14 = tail call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #9
  br i1 %14, label %271, label %15

15:                                               ; preds = %12
  %16 = getelementptr inbounds i8, ptr %1, i64 304
  %17 = zext i32 %3 to i64
  %18 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %16, i64 noundef %17) #9
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  %20 = icmp eq ptr %19, null
  br i1 %20, label %271, label %21

21:                                               ; preds = %15
  %22 = getelementptr inbounds i8, ptr %19, i64 64
  %23 = load i32, ptr %22, align 8, !tbaa !9
  %24 = icmp eq i32 %23, 0
  br i1 %24, label %271, label %25

25:                                               ; preds = %21
  %26 = getelementptr inbounds i8, ptr %4, i64 4
  store i32 %5, ptr %26, align 4, !tbaa !20
  %27 = icmp eq i32 %5, 0
  br i1 %27, label %28, label %33

28:                                               ; preds = %25
  %29 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull @.str.21)
          to label %30 unwind label %31

30:                                               ; preds = %28
  tail call void @__cxa_throw(ptr nonnull %29, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

31:                                               ; preds = %28
  %32 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %29) #9
  br label %272

33:                                               ; preds = %25
  %34 = icmp slt i32 %5, 0
  br i1 %34, label %35, label %40

35:                                               ; preds = %33
  %36 = tail call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %36, ptr noundef nonnull @.str.22)
          to label %37 unwind label %38

37:                                               ; preds = %35
  tail call void @__cxa_throw(ptr nonnull %36, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

38:                                               ; preds = %35
  %39 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %36) #9
  br label %272

40:                                               ; preds = %33
  %41 = zext nneg i32 %5 to i64
  %42 = mul nuw nsw i64 %41, 12
  %43 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %42) #11
  %44 = getelementptr inbounds %class.aiVector3t, ptr %43, i64 %41
  br label %45

45:                                               ; preds = %45, %40
  %46 = phi ptr [ %43, %40 ], [ %47, %45 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %46) #9
  %47 = getelementptr inbounds i8, ptr %46, i64 12
  %48 = icmp eq ptr %47, %44
  br i1 %48, label %49, label %45

49:                                               ; preds = %45
  %50 = getelementptr inbounds i8, ptr %4, i64 16
  store ptr %43, ptr %50, align 8, !tbaa !27
  %51 = getelementptr inbounds i8, ptr %1, i64 128
  %52 = tail call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  br i1 %52, label %70, label %53

53:                                               ; preds = %49
  %54 = getelementptr inbounds i8, ptr %19, i64 104
  %55 = load i8, ptr %54, align 8, !tbaa !28, !range !29, !noundef !30
  %56 = trunc nuw i8 %55 to i1
  br i1 %56, label %57, label %70

57:                                               ; preds = %53
  %58 = load i32, ptr %26, align 4, !tbaa !20
  %59 = zext i32 %58 to i64
  %60 = mul nuw nsw i64 %59, 12
  %61 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %60) #11
  %62 = icmp eq i32 %58, 0
  br i1 %62, label %.loopexit179, label %63

63:                                               ; preds = %57
  %64 = getelementptr inbounds %class.aiVector3t, ptr %61, i64 %59
  br label %65

65:                                               ; preds = %65, %63
  %66 = phi ptr [ %61, %63 ], [ %67, %65 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %66) #9
  %67 = getelementptr inbounds i8, ptr %66, i64 12
  %68 = icmp eq ptr %67, %64
  br i1 %68, label %.loopexit179, label %65

.loopexit179:                                     ; preds = %65, %57
  %69 = getelementptr inbounds i8, ptr %4, i64 24
  store ptr %61, ptr %69, align 8, !tbaa !31
  br label %70

70:                                               ; preds = %.loopexit179, %53, %49
  %71 = getelementptr inbounds i8, ptr %1, i64 152
  %72 = tail call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #9
  br i1 %72, label %86, label %73

73:                                               ; preds = %70
  %74 = load i32, ptr %26, align 4, !tbaa !20
  %75 = zext i32 %74 to i64
  %76 = shl nuw nsw i64 %75, 4
  %77 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %76) #11
  %78 = icmp eq i32 %74, 0
  br i1 %78, label %.loopexit178, label %79

79:                                               ; preds = %73
  %80 = getelementptr inbounds %class.aiColor4t, ptr %77, i64 %75
  br label %81

81:                                               ; preds = %81, %79
  %82 = phi ptr [ %77, %79 ], [ %83, %81 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %82) #9
  %83 = getelementptr inbounds i8, ptr %82, i64 16
  %84 = icmp eq ptr %83, %80
  br i1 %84, label %.loopexit178, label %81

.loopexit178:                                     ; preds = %81, %73
  %85 = getelementptr inbounds i8, ptr %4, i64 48
  store ptr %77, ptr %85, align 8, !tbaa !5
  br label %86

86:                                               ; preds = %.loopexit178, %70
  %87 = getelementptr inbounds i8, ptr %1, i64 264
  %88 = tail call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #9
  br i1 %88, label %108, label %89

89:                                               ; preds = %86
  %90 = getelementptr inbounds i8, ptr %19, i64 68
  %91 = load i32, ptr %90, align 4, !tbaa !32
  %.not163 = icmp eq i32 %91, 0
  br i1 %.not163, label %108, label %92

92:                                               ; preds = %89
  %93 = getelementptr inbounds i8, ptr %1, i64 288
  %94 = load i32, ptr %93, align 8, !tbaa !33
  %95 = getelementptr inbounds i8, ptr %4, i64 176
  store i32 %94, ptr %95, align 8, !tbaa !32
  %96 = load i32, ptr %26, align 4, !tbaa !20
  %97 = zext i32 %96 to i64
  %98 = mul nuw nsw i64 %97, 12
  %99 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %98) #11
  %100 = icmp eq i32 %96, 0
  br i1 %100, label %.loopexit177, label %101

101:                                              ; preds = %92
  %102 = getelementptr inbounds %class.aiVector3t, ptr %99, i64 %97
  br label %103

103:                                              ; preds = %103, %101
  %104 = phi ptr [ %99, %101 ], [ %105, %103 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %104) #9
  %105 = getelementptr inbounds i8, ptr %104, i64 12
  %106 = icmp eq ptr %105, %102
  br i1 %106, label %.loopexit177, label %103

.loopexit177:                                     ; preds = %103, %92
  %107 = getelementptr inbounds i8, ptr %4, i64 112
  store ptr %99, ptr %107, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %.loopexit177, %89, %86
  %109 = getelementptr inbounds i8, ptr %19, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  %110 = tail call ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #9
  store ptr %110, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  %111 = tail call ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #9
  store ptr %111, ptr %8, align 8
  %112 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  br i1 %112, label %.lr.ph214, label %.thread225

.thread225:                                       ; preds = %108
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %271

.lr.ph214:                                        ; preds = %108
  %113 = getelementptr inbounds i8, ptr %1, i64 104
  %114 = getelementptr inbounds i8, ptr %4, i64 24
  %115 = getelementptr inbounds i8, ptr %4, i64 48
  %116 = getelementptr inbounds i8, ptr %4, i64 112
  %117 = getelementptr inbounds i8, ptr %4, i64 208
  br label %120

._crit_edge215:                                   ; preds = %._crit_edge
  %118 = trunc nuw i8 %.1134.lcssa to i1
  %119 = trunc nuw i8 %.1136.lcssa to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br i1 %118, label %264, label %258

120:                                              ; preds = %.lr.ph214, %._crit_edge
  %.0133212 = phi i8 [ 1, %.lr.ph214 ], [ %.1134.lcssa, %._crit_edge ]
  %.0135211 = phi i8 [ 1, %.lr.ph214 ], [ %.1136.lcssa, %._crit_edge ]
  %.0139210 = phi i32 [ 0, %.lr.ph214 ], [ %.1140.lcssa, %._crit_edge ]
  %.0143209 = phi i32 [ 0, %.lr.ph214 ], [ %.1144.lcssa, %._crit_edge ]
  %121 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  %122 = load ptr, ptr %121, align 8, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %122, i64 8
  %124 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %123) #9
  %.not218 = icmp eq i64 %124, 0
  br i1 %.not218, label %._crit_edge, label %.lr.ph205

.lr.ph205:                                        ; preds = %120
  %125 = getelementptr inbounds i8, ptr %122, i64 32
  %126 = getelementptr inbounds i8, ptr %122, i64 56
  br label %129

._crit_edge:                                      ; preds = %252, %120
  %.1144.lcssa = phi i32 [ %.0143209, %120 ], [ %.3146, %252 ]
  %.1140.lcssa = phi i32 [ %.0139210, %120 ], [ %253, %252 ]
  %.1136.lcssa = phi i8 [ %.0135211, %120 ], [ %.3138, %252 ]
  %.1134.lcssa = phi i8 [ %.0133212, %120 ], [ %.3, %252 ]
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #9
  %128 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPPN6Assimp7ObjFile4FaceESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  br i1 %128, label %120, label %._crit_edge215

129:                                              ; preds = %.lr.ph205, %252
  %.1134204 = phi i8 [ %.0133212, %.lr.ph205 ], [ %.3, %252 ]
  %.1136203 = phi i8 [ %.0135211, %.lr.ph205 ], [ %.3138, %252 ]
  %.1140202 = phi i32 [ %.0139210, %.lr.ph205 ], [ %253, %252 ]
  %.1144201 = phi i32 [ %.0143209, %.lr.ph205 ], [ %.3146, %252 ]
  %.0147200 = phi i64 [ 0, %.lr.ph205 ], [ %.2149, %252 ]
  %.0150199 = phi i64 [ 0, %.lr.ph205 ], [ %254, %252 ]
  %130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %123, i64 noundef %.0150199)
  %131 = load i32, ptr %130, align 4, !tbaa !32
  %132 = zext i32 %131 to i64
  %133 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %113) #9
  %.not164 = icmp ugt i64 %133, %132
  br i1 %.not164, label %139, label %134

134:                                              ; preds = %129
  %135 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %135, ptr noundef nonnull @.str.23)
          to label %136 unwind label %137

136:                                              ; preds = %134
  call void @__cxa_throw(ptr nonnull %135, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

137:                                              ; preds = %134
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %257

139:                                              ; preds = %129
  %140 = load i32, ptr %26, align 4, !tbaa !20
  %.not165 = icmp ugt i32 %140, %.1140202
  br i1 %.not165, label %146, label %141

141:                                              ; preds = %139
  %142 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %142, ptr noundef nonnull @.str.24)
          to label %143 unwind label %144

143:                                              ; preds = %141
  call void @__cxa_throw(ptr nonnull %142, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

144:                                              ; preds = %141
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %257

146:                                              ; preds = %139
  %147 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %132) #9
  %148 = load ptr, ptr %50, align 8, !tbaa !27
  %149 = zext i32 %.1140202 to i64
  %150 = getelementptr inbounds %class.aiVector3t, ptr %148, i64 %149
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %150, ptr noundef nonnull align 4 dereferenceable(12) %147, i64 12, i1 false), !tbaa.struct !62
  %151 = trunc nuw i8 %.1134204 to i1
  br i1 %151, label %152, label %166

152:                                              ; preds = %146
  %153 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  br i1 %153, label %166, label %154

154:                                              ; preds = %152
  %155 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %125) #9
  %156 = icmp ult i64 %.0150199, %155
  br i1 %156, label %157, label %166

157:                                              ; preds = %154
  %158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %125, i64 noundef %.0150199)
  %159 = load i32, ptr %158, align 4, !tbaa !32
  %160 = zext i32 %159 to i64
  %161 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  %.not166 = icmp ugt i64 %161, %160
  br i1 %.not166, label %162, label %166

162:                                              ; preds = %157
  %163 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %51, i64 noundef %160) #9
  %164 = load ptr, ptr %114, align 8, !tbaa !31
  %165 = getelementptr inbounds %class.aiVector3t, ptr %164, i64 %149
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %165, ptr noundef nonnull align 4 dereferenceable(12) %163, i64 12, i1 false), !tbaa.struct !62
  br label %166

166:                                              ; preds = %162, %157, %154, %152, %146
  %.3 = phi i8 [ %.1134204, %152 ], [ %.1134204, %154 ], [ %.1134204, %146 ], [ %.1134204, %162 ], [ 0, %157 ]
  %167 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #9
  %168 = icmp ugt i64 %167, %132
  br i1 %168, label %169, label %178

169:                                              ; preds = %166
  %170 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %132) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  %171 = load float, ptr %170, align 4, !tbaa !64
  %172 = getelementptr inbounds i8, ptr %170, i64 4
  %173 = load float, ptr %172, align 4, !tbaa !65
  %174 = getelementptr inbounds i8, ptr %170, i64 8
  %175 = load float, ptr %174, align 4, !tbaa !66
  call void @_ZN9aiColor4tIfEC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %9, float noundef %171, float noundef %173, float noundef %175, float noundef 1.000000e+00)
  %176 = load ptr, ptr %115, align 8, !tbaa !5
  %177 = getelementptr inbounds %class.aiColor4t, ptr %176, i64 %149
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %177, ptr noundef nonnull align 4 dereferenceable(16) %9, i64 16, i1 false), !tbaa.struct !67
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  br label %178

178:                                              ; preds = %169, %166
  %179 = trunc nuw i8 %.1136203 to i1
  br i1 %179, label %180, label %199

180:                                              ; preds = %178
  %181 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #9
  br i1 %181, label %199, label %182

182:                                              ; preds = %180
  %183 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %126) #9
  %184 = icmp ult i64 %.0150199, %183
  br i1 %184, label %185, label %199

185:                                              ; preds = %182
  %186 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %126, i64 noundef %.0150199)
  %187 = load i32, ptr %186, align 4, !tbaa !32
  %188 = zext i32 %187 to i64
  %189 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #9
  %.not167 = icmp ugt i64 %189, %188
  br i1 %.not167, label %190, label %199

190:                                              ; preds = %185
  %191 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNKSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %87, i64 noundef %188) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #9
  %192 = load float, ptr %191, align 4, !tbaa !64
  %193 = getelementptr inbounds i8, ptr %191, i64 4
  %194 = load float, ptr %193, align 4, !tbaa !65
  %195 = getelementptr inbounds i8, ptr %191, i64 8
  %196 = load float, ptr %195, align 4, !tbaa !66
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %10, float noundef %192, float noundef %194, float noundef %196)
  %197 = load ptr, ptr %116, align 8, !tbaa !5
  %198 = getelementptr inbounds %class.aiVector3t, ptr %197, i64 %149
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %198, ptr noundef nonnull align 4 dereferenceable(12) %10, i64 12, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #9
  br label %199

199:                                              ; preds = %190, %185, %182, %180, %178
  %.3138 = phi i8 [ %.1136203, %180 ], [ %.1136203, %182 ], [ %.1136203, %178 ], [ %.1136203, %190 ], [ 0, %185 ]
  %200 = load ptr, ptr %117, align 8, !tbaa !68
  %201 = zext i32 %.1144201 to i64
  %202 = getelementptr inbounds %struct.aiFace, ptr %200, i64 %201
  %203 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %123) #9
  %204 = add i64 %203, -1
  %205 = icmp ne i64 %.0150199, %204
  %206 = load i32, ptr %122, align 8, !tbaa !69
  %.not168 = icmp ne i32 %206, 2
  %brmerge = or i1 %.not168, %205
  br i1 %brmerge, label %207, label %.thread

207:                                              ; preds = %199
  %208 = getelementptr inbounds i8, ptr %202, i64 8
  %209 = load ptr, ptr %208, align 8, !tbaa !76
  %210 = getelementptr inbounds i32, ptr %209, i64 %.0147200
  store i32 %.1140202, ptr %210, align 4, !tbaa !32
  switch i32 %206, label %249 [
    i32 1, label %211
    i32 2, label %.thread
  ]

211:                                              ; preds = %207
  %212 = add i32 %.1144201, 1
  br label %252

.thread:                                          ; preds = %199, %207
  %213 = zext i1 %205 to i32
  %spec.select = add i32 %.1144201, %213
  %.not169 = icmp eq i64 %.0150199, 0
  br i1 %.not169, label %252, label %214

214:                                              ; preds = %.thread
  br i1 %205, label %215, label %.loopexit

215:                                              ; preds = %214
  %216 = load i32, ptr %26, align 4, !tbaa !20
  %217 = add nuw i32 %.1140202, 1
  %.not170 = icmp ugt i32 %216, %217
  br i1 %.not170, label %223, label %218

218:                                              ; preds = %215
  %219 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %219, ptr noundef nonnull @.str.24)
          to label %220 unwind label %221

220:                                              ; preds = %218
  call void @__cxa_throw(ptr nonnull %219, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

221:                                              ; preds = %218
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %257

223:                                              ; preds = %215
  %224 = load ptr, ptr %50, align 8, !tbaa !27
  %225 = getelementptr inbounds %class.aiVector3t, ptr %224, i64 %149
  %226 = zext i32 %217 to i64
  %227 = getelementptr inbounds %class.aiVector3t, ptr %224, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %227, ptr noundef nonnull align 4 dereferenceable(12) %225, i64 12, i1 false), !tbaa.struct !62
  %228 = call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %125) #9
  br i1 %228, label %235, label %229

229:                                              ; preds = %223
  %230 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #9
  br i1 %230, label %235, label %231

231:                                              ; preds = %229
  %232 = load ptr, ptr %114, align 8, !tbaa !31
  %233 = getelementptr inbounds %class.aiVector3t, ptr %232, i64 %149
  %234 = getelementptr inbounds %class.aiVector3t, ptr %232, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %234, ptr noundef nonnull align 4 dereferenceable(12) %233, i64 12, i1 false), !tbaa.struct !62
  br label %235

235:                                              ; preds = %231, %229, %223
  %236 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #9
  br i1 %236, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %235
  %237 = call noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %4)
  %.not219 = icmp eq i32 %237, 0
  br i1 %.not219, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %.lr.ph
  %.0198 = phi i64 [ %242, %.lr.ph ], [ 0, %.preheader ]
  %238 = getelementptr inbounds [8 x ptr], ptr %116, i64 0, i64 %.0198
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = getelementptr inbounds %class.aiVector3t, ptr %239, i64 %149
  %241 = getelementptr inbounds %class.aiVector3t, ptr %239, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %241, ptr noundef nonnull align 4 dereferenceable(12) %240, i64 12, i1 false), !tbaa.struct !62
  %242 = add nuw nsw i64 %.0198, 1
  %243 = call noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %4)
  %244 = zext i32 %243 to i64
  %245 = icmp ult i64 %242, %244
  br i1 %245, label %.lr.ph, label %.loopexit, !llvm.loop !78

.loopexit:                                        ; preds = %.lr.ph, %.preheader, %235, %214
  %.2141 = phi i32 [ %.1140202, %214 ], [ %217, %235 ], [ %217, %.preheader ], [ %217, %.lr.ph ]
  %246 = getelementptr inbounds i8, ptr %202, i64 -8
  %247 = load ptr, ptr %246, align 8, !tbaa !76
  %248 = getelementptr inbounds i8, ptr %247, i64 4
  store i32 %.2141, ptr %248, align 4, !tbaa !32
  br label %252

249:                                              ; preds = %207
  %250 = add i64 %.0147200, 1
  %not. = xor i1 %205, true
  %251 = zext i1 %not. to i32
  %spec.select175 = add i32 %.1144201, %251
  br label %252

252:                                              ; preds = %249, %.loopexit, %.thread, %211
  %.2149 = phi i64 [ 0, %211 ], [ 0, %.loopexit ], [ 0, %.thread ], [ %250, %249 ]
  %.3146 = phi i32 [ %212, %211 ], [ %spec.select, %.loopexit ], [ %spec.select, %.thread ], [ %spec.select175, %249 ]
  %.3142 = phi i32 [ %.1140202, %211 ], [ %.2141, %.loopexit ], [ %.1140202, %.thread ], [ %.1140202, %249 ]
  %253 = add i32 %.3142, 1
  %254 = add nuw i64 %.0150199, 1
  %255 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %123) #9
  %256 = icmp ult i64 %254, %255
  br i1 %256, label %129, label %._crit_edge, !llvm.loop !80

257:                                              ; preds = %221, %144, %137
  %.sink = phi ptr [ %219, %221 ], [ %142, %144 ], [ %135, %137 ]
  %.pn = phi { ptr, i32 } [ %222, %221 ], [ %145, %144 ], [ %138, %137 ]
  call void @__cxa_free_exception(ptr %.sink) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %272

258:                                              ; preds = %._crit_edge215
  %259 = getelementptr inbounds i8, ptr %4, i64 24
  %260 = load ptr, ptr %259, align 8, !tbaa !31
  %261 = icmp eq ptr %260, null
  br i1 %261, label %263, label %262

262:                                              ; preds = %258
  call void @_ZdaPv(ptr noundef nonnull %260) #12
  br label %263

263:                                              ; preds = %262, %258
  store ptr null, ptr %259, align 8, !tbaa !31
  br i1 %119, label %271, label %265

264:                                              ; preds = %._crit_edge215
  br i1 %119, label %271, label %265

265:                                              ; preds = %263, %264
  %266 = getelementptr inbounds i8, ptr %4, i64 112
  %267 = load ptr, ptr %266, align 8, !tbaa !5
  %268 = icmp eq ptr %267, null
  br i1 %268, label %270, label %269

269:                                              ; preds = %265
  call void @_ZdaPv(ptr noundef nonnull %267) #12
  br label %270

270:                                              ; preds = %269, %265
  store ptr null, ptr %266, align 8, !tbaa !5
  br label %271

271:                                              ; preds = %263, %.thread225, %21, %15, %270, %264, %12
  ret void

272:                                              ; preds = %257, %38, %31
  %.pn172 = phi { ptr, i32 } [ %32, %31 ], [ %39, %38 ], [ %.pn, %257 ]
  resume { ptr, i32 } %.pn172
}

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #8

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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"="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 = { "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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { noreturn }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { 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, !18, i64 64}
!10 = !{!"_ZTSN6Assimp7ObjFile4MeshE", !11, i64 0, !14, i64 32, !6, i64 56, !18, i64 64, !7, i64 68, !18, i64 100, !19, i64 104}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !13, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"int", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!21, !18, i64 4}
!21 = !{!"_ZTS6aiMesh", !18, i64 0, !18, i64 4, !18, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !18, i64 216, !6, i64 224, !18, i64 232, !22, i64 236, !18, i64 1264, !6, i64 1272, !23, i64 1280, !24, i64 1284, !6, i64 1312}
!22 = !{!"_ZTS8aiString", !18, i64 0, !7, i64 4}
!23 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!24 = !{!"_ZTS6aiAABB", !25, i64 0, !25, i64 12}
!25 = !{!"_ZTS10aiVector3tIfE", !26, i64 0, !26, i64 4, !26, i64 8}
!26 = !{!"float", !7, i64 0}
!27 = !{!21, !6, i64 16}
!28 = !{!10, !19, i64 104}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!21, !6, i64 24}
!32 = !{!18, !18, i64 0}
!33 = !{!34, !18, i64 288}
!34 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !11, i64 0, !35, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !39, i64 80, !43, i64 104, !43, i64 128, !43, i64 152, !47, i64 176, !6, i64 224, !11, i64 232, !43, i64 264, !18, i64 288, !6, i64 296, !55, i64 304, !59, i64 328}
!35 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!47 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !48, i64 0}
!48 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !49, i64 0}
!49 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !50, i64 0, !52, i64 8}
!50 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !51, i64 0}
!51 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!52 = !{!"_ZTSSt15_Rb_tree_header", !53, i64 0, !13, i64 32}
!53 = !{!"_ZTSSt18_Rb_tree_node_base", !54, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!54 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!55 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !60, i64 0}
!60 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !61, i64 0}
!61 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !50, i64 0, !52, i64 8}
!62 = !{i64 0, i64 4, !63, i64 4, i64 4, !63, i64 8, i64 4, !63}
!63 = !{!26, !26, i64 0}
!64 = !{!25, !26, i64 0}
!65 = !{!25, !26, i64 4}
!66 = !{!25, !26, i64 8}
!67 = !{i64 0, i64 4, !63, i64 4, i64 4, !63, i64 8, i64 4, !63, i64 12, i64 4, !63}
!68 = !{!21, !6, i64 208}
!69 = !{!70, !71, i64 0}
!70 = !{!"_ZTSN6Assimp7ObjFile4FaceE", !71, i64 0, !72, i64 8, !72, i64 32, !72, i64 56, !6, i64 80}
!71 = !{!"_ZTS15aiPrimitiveType", !7, i64 0}
!72 = !{!"_ZTSSt6vectorIjSaIjEE", !73, i64 0}
!73 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!76 = !{!77, !6, i64 8}
!77 = !{!"_ZTS6aiFace", !18, i64 0, !6, i64 8}
!78 = distinct !{!78, !79}
!79 = !{!"llvm.loop.mustprogress"}
!80 = distinct !{!80, !79}


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