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

; 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" = type { ptr }
%"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.std::allocator" = type { i8 }
%"class.Assimp::ObjFileParser" = type { %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator", %"class.std::unique_ptr", i32, [4096 x i8], ptr, ptr, ptr, %"class.std::__cxx11::basic_string" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"struct.Assimp::ObjFile::Model" = type { %"class.std::__cxx11::basic_string", %"class.std::vector", ptr, ptr, ptr, %"class.std::vector.5", %"class.std::vector.10", %"class.std::vector.10", %"class.std::vector.10", %"class.std::map", ptr, %"class.std::__cxx11::basic_string", %"class.std::vector.10", i32, ptr, %"class.std::vector.18", %"class.std::map.23" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = 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.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = 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.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = 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.23" = type { %"class.std::_Rb_tree.24" }
%"class.std::_Rb_tree.24" = 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::Face" = type { i32, %"class.std::vector.38", %"class.std::vector.38", %"class.std::vector.38", ptr }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = 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::Mesh" = type <{ %"class.std::__cxx11::basic_string", %"class.std::vector.43", ptr, i32, [8 x i32], i32, i8, [7 x i8] }>
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = 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 }

@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.9 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN6AssimpL14DefaultObjNameE = external hidden constant [14 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: 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) #5

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp13ObjFileParser7getFaceE15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(4184) %0, i32 noundef %1) #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator", align 1
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %32 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator", align 1
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator", align 1
  %38 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  %41 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #11
  %42 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 8 %42, i64 8, i1 false), !tbaa.struct !11
  %43 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %43, i64 8, i1 false), !tbaa.struct !11
  %44 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %6, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8
  %46 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %7, i32 0, i32 0
  %47 = load ptr, ptr %46, align 8
  %48 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %45, ptr %47)
  %49 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %5, i32 0, i32 0
  store ptr %48, ptr %49, align 8
  %50 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %50, ptr align 8 %5, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #11
  %51 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %52 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  %53 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %52) #11
  br i1 %53, label %60, label %54

54:                                               ; preds = %2
  %55 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %56 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %55) #11
  %57 = load i8, ptr %56, align 1, !tbaa !12
  %58 = sext i8 %57 to i32
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %60, label %61

60:                                               ; preds = %54, %2
  br label %408

61:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #11
  %62 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 88) #12
  %63 = load i32, ptr %4, align 4, !tbaa !9
  invoke void @_ZN6Assimp7ObjFile4FaceC2E15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(88) %62, i32 noundef %63)
          to label %64 unwind label %102

64:                                               ; preds = %61
  store ptr %62, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #11
  store i8 0, ptr %11, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %65 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %66 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #11
  %67 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %66, i32 0, i32 6
  %68 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %67) #11
  %69 = trunc i64 %68 to i32
  store i32 %69, ptr %12, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %70 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %71 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #11
  %72 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %71, i32 0, i32 12
  %73 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %72) #11
  %74 = trunc i64 %73 to i32
  store i32 %74, ptr %13, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %75 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %76 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %75) #11
  %77 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %76, i32 0, i32 7
  %78 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %77) #11
  %79 = trunc i64 %78 to i32
  store i32 %79, ptr %14, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #11
  %80 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %81 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %80) #11
  %82 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %81, i32 0, i32 12
  %83 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %82) #11
  %84 = xor i1 %83, true
  %85 = zext i1 %84 to i8
  store i8 %85, ptr %15, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #11
  %86 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %87 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %86) #11
  %88 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %87, i32 0, i32 7
  %89 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %88) #11
  %90 = xor i1 %89, true
  %91 = zext i1 %90 to i8
  store i8 %91, ptr %16, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  store i32 0, ptr %17, align 4, !tbaa !15
  br label %92

92:                                               ; preds = %272, %64
  %93 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %94 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  %95 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %94) #11
  br i1 %95, label %96, label %273

96:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #11
  store i32 1, ptr %18, align 4, !tbaa !15
  %97 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %98 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %97) #11
  %99 = load i8, ptr %98, align 1, !tbaa !12
  %100 = call noundef zeroext i1 @_ZN6Assimp9IsLineEndIcEEbT_(i8 noundef signext %99)
  br i1 %100, label %101, label %106

101:                                              ; preds = %96
  store i32 3, ptr %19, align 4
  br label %270

102:                                              ; preds = %61
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %9, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %10, align 4
  call void @_ZdlPvm(ptr noundef %62, i64 noundef 88) #13
  br label %410

106:                                              ; preds = %96
  %107 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %108 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %107) #11
  %109 = load i8, ptr %108, align 1, !tbaa !12
  %110 = sext i8 %109 to i32
  %111 = icmp eq i32 %110, 47
  br i1 %111, label %112, label %120

112:                                              ; preds = %106
  %113 = load i32, ptr %4, align 4, !tbaa !9
  %114 = icmp eq i32 %113, 1
  br i1 %114, label %115, label %117

115:                                              ; preds = %112
  %116 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %116, ptr noundef @.str.9)
  br label %117

117:                                              ; preds = %115, %112
  %118 = load i32, ptr %17, align 4, !tbaa !15
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %17, align 4, !tbaa !15
  br label %265

120:                                              ; preds = %106
  %121 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %122 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %121) #11
  %123 = load i8, ptr %122, align 1, !tbaa !12
  %124 = call noundef zeroext i1 @_ZN6Assimp16IsSpaceOrNewLineIcEEbT_(i8 noundef signext %123)
  br i1 %124, label %125, label %126

125:                                              ; preds = %120
  store i32 0, ptr %17, align 4, !tbaa !15
  br label %264

126:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %127 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %127, i64 8, i1 false), !tbaa.struct !11
  br label %128

128:                                              ; preds = %138, %126
  %129 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  %130 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %129) #11
  br i1 %130, label %131, label %136

131:                                              ; preds = %128
  %132 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  %133 = load i8, ptr %132, align 1, !tbaa !12
  %134 = sext i8 %133 to i32
  %135 = icmp ne i32 %134, 0
  br label %136

136:                                              ; preds = %131, %128
  %137 = phi i1 [ false, %128 ], [ %135, %131 ]
  br i1 %137, label %138, label %140

138:                                              ; preds = %136
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  br label %128, !llvm.loop !17

140:                                              ; preds = %136
  %141 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  %142 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %141) #11
  br i1 %142, label %143, label %147

143:                                              ; preds = %140
  %144 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %145 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %144) #11
  %146 = call i32 @atoi(ptr noundef %145) #14
  store i32 %146, ptr %20, align 4, !tbaa !15
  br label %160

147:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #11
  %148 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %149 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %148) #11
  %150 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  %151 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %152 = call noundef i64 @_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_(ptr noundef nonnull align 8 dereferenceable(8) %150, ptr noundef nonnull align 8 dereferenceable(8) %151) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef %149, i64 noundef %152, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %153 unwind label %156

153:                                              ; preds = %147
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  %154 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %22) #11
  %155 = call i32 @atoi(ptr noundef %154) #14
  store i32 %155, ptr %20, align 4, !tbaa !15
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #11
  br label %160

156:                                              ; preds = %147
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %9, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %10, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #11
  br label %263

160:                                              ; preds = %153, %143
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  %161 = load i32, ptr %20, align 4, !tbaa !15
  store i32 %161, ptr %24, align 4, !tbaa !15
  %162 = load i32, ptr %20, align 4, !tbaa !15
  %163 = icmp slt i32 %162, 0
  br i1 %163, label %164, label %167

164:                                              ; preds = %160
  %165 = load i32, ptr %18, align 4, !tbaa !15
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %18, align 4, !tbaa !15
  br label %167

167:                                              ; preds = %164, %160
  br label %168

168:                                              ; preds = %172, %167
  %169 = load i32, ptr %24, align 4, !tbaa !15
  %170 = sdiv i32 %169, 10
  store i32 %170, ptr %24, align 4, !tbaa !15
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %175

172:                                              ; preds = %168
  %173 = load i32, ptr %18, align 4, !tbaa !15
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %18, align 4, !tbaa !15
  br label %168, !llvm.loop !19

175:                                              ; preds = %168
  %176 = load i32, ptr %17, align 4, !tbaa !15
  %177 = icmp eq i32 %176, 1
  br i1 %177, label %178, label %185

178:                                              ; preds = %175
  %179 = load i8, ptr %15, align 1, !tbaa !13, !range !20, !noundef !21
  %180 = trunc i8 %179 to i1
  br i1 %180, label %185, label %181

181:                                              ; preds = %178
  %182 = load i8, ptr %16, align 1, !tbaa !13, !range !20, !noundef !21
  %183 = trunc i8 %182 to i1
  br i1 %183, label %184, label %185

184:                                              ; preds = %181
  store i32 2, ptr %17, align 4, !tbaa !15
  br label %185

185:                                              ; preds = %184, %181, %178, %175
  %186 = load i32, ptr %20, align 4, !tbaa !15
  %187 = icmp sgt i32 %186, 0
  br i1 %187, label %188, label %216

188:                                              ; preds = %185
  %189 = load i32, ptr %17, align 4, !tbaa !15
  %190 = icmp eq i32 0, %189
  br i1 %190, label %191, label %196

191:                                              ; preds = %188
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %192, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  %194 = load i32, ptr %20, align 4, !tbaa !15
  %195 = sub nsw i32 %194, 1
  store i32 %195, ptr %25, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %193, ptr noundef nonnull align 4 dereferenceable(4) %25)
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  br label %215

196:                                              ; preds = %188
  %197 = load i32, ptr %17, align 4, !tbaa !15
  %198 = icmp eq i32 1, %197
  br i1 %198, label %199, label %204

199:                                              ; preds = %196
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %200, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  %202 = load i32, ptr %20, align 4, !tbaa !15
  %203 = sub nsw i32 %202, 1
  store i32 %203, ptr %26, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %201, ptr noundef nonnull align 4 dereferenceable(4) %26)
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  br label %214

204:                                              ; preds = %196
  %205 = load i32, ptr %17, align 4, !tbaa !15
  %206 = icmp eq i32 2, %205
  br i1 %206, label %207, label %212

207:                                              ; preds = %204
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %208, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #11
  %210 = load i32, ptr %20, align 4, !tbaa !15
  %211 = sub nsw i32 %210, 1
  store i32 %211, ptr %27, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %209, ptr noundef nonnull align 4 dereferenceable(4) %27)
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  store i8 1, ptr %11, align 1, !tbaa !13
  br label %213

212:                                              ; preds = %204
  call void @_ZN6Assimp13ObjFileParser22reportErrorTokenInFaceEv(ptr noundef nonnull align 8 dereferenceable(4184) %41)
  br label %213

213:                                              ; preds = %212, %207
  br label %214

214:                                              ; preds = %213, %199
  br label %215

215:                                              ; preds = %214, %191
  br label %262

216:                                              ; preds = %185
  %217 = load i32, ptr %20, align 4, !tbaa !15
  %218 = icmp slt i32 %217, 0
  br i1 %218, label %219, label %250

219:                                              ; preds = %216
  %220 = load i32, ptr %17, align 4, !tbaa !15
  %221 = icmp eq i32 0, %220
  br i1 %221, label %222, label %228

222:                                              ; preds = %219
  %223 = load ptr, ptr %8, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %223, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  %225 = load i32, ptr %12, align 4, !tbaa !15
  %226 = load i32, ptr %20, align 4, !tbaa !15
  %227 = add nsw i32 %225, %226
  store i32 %227, ptr %28, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %224, ptr noundef nonnull align 4 dereferenceable(4) %28)
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  br label %249

228:                                              ; preds = %219
  %229 = load i32, ptr %17, align 4, !tbaa !15
  %230 = icmp eq i32 1, %229
  br i1 %230, label %231, label %237

231:                                              ; preds = %228
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %232, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #11
  %234 = load i32, ptr %13, align 4, !tbaa !15
  %235 = load i32, ptr %20, align 4, !tbaa !15
  %236 = add nsw i32 %234, %235
  store i32 %236, ptr %29, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %233, ptr noundef nonnull align 4 dereferenceable(4) %29)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  br label %248

237:                                              ; preds = %228
  %238 = load i32, ptr %17, align 4, !tbaa !15
  %239 = icmp eq i32 2, %238
  br i1 %239, label %240, label %246

240:                                              ; preds = %237
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %241, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #11
  %243 = load i32, ptr %14, align 4, !tbaa !15
  %244 = load i32, ptr %20, align 4, !tbaa !15
  %245 = add nsw i32 %243, %244
  store i32 %245, ptr %30, align 4, !tbaa !15
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %242, ptr noundef nonnull align 4 dereferenceable(4) %30)
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #11
  store i8 1, ptr %11, align 1, !tbaa !13
  br label %247

246:                                              ; preds = %237
  call void @_ZN6Assimp13ObjFileParser22reportErrorTokenInFaceEv(ptr noundef nonnull align 8 dereferenceable(4184) %41)
  br label %247

247:                                              ; preds = %246, %240
  br label %248

248:                                              ; preds = %247, %231
  br label %249

249:                                              ; preds = %248, %222
  br label %261

250:                                              ; preds = %216
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = icmp eq ptr %251, null
  br i1 %252, label %254, label %253

253:                                              ; preds = %250
  call void @_ZN6Assimp7ObjFile4FaceD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %251) #11
  call void @_ZdlPvm(ptr noundef %251, i64 noundef 88) #13
  br label %254

254:                                              ; preds = %253, %250
  %255 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %255, ptr noundef @.str.10)
          to label %256 unwind label %257

256:                                              ; preds = %254
  call void @__cxa_throw(ptr %255, ptr @_ZTI17DeadlyImportError, ptr @_ZNSt13runtime_errorD2Ev) #15
  unreachable

257:                                              ; preds = %254
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %9, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %10, align 4
  call void @__cxa_free_exception(ptr %255) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  br label %263

261:                                              ; preds = %249
  br label %262

262:                                              ; preds = %261, %215
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  br label %264

263:                                              ; preds = %257, %156
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  br label %409

264:                                              ; preds = %262, %125
  br label %265

265:                                              ; preds = %264, %117
  %266 = load i32, ptr %18, align 4, !tbaa !15
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEpLEl(ptr noundef nonnull align 8 dereferenceable(8) %268, i64 noundef %267) #11
  store i32 0, ptr %19, align 4
  br label %270

270:                                              ; preds = %265, %101
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #11
  %271 = load i32, ptr %19, align 4
  switch i32 %271, label %416 [
    i32 0, label %272
    i32 3, label %273
  ]

272:                                              ; preds = %270
  br label %92, !llvm.loop !22

273:                                              ; preds = %270, %92
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %274, i32 0, i32 1
  %276 = call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %275) #11
  br i1 %276, label %277, label %293

277:                                              ; preds = %273
  %278 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %278, ptr noundef @.str.11)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  %279 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %279, i64 8, i1 false), !tbaa.struct !11
  %280 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 8 %280, i64 8, i1 false), !tbaa.struct !11
  %281 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 3
  %282 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %32, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8
  %284 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %33, i32 0, i32 0
  %285 = load ptr, ptr %284, align 8
  %286 = call ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr %283, ptr %285, ptr noundef nonnull align 4 dereferenceable(4) %281)
  %287 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %31, i32 0, i32 0
  store ptr %286, ptr %287, align 8
  %288 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %288, ptr align 8 %31, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  %290 = icmp eq ptr %289, null
  br i1 %290, label %292, label %291

291:                                              ; preds = %277
  call void @_ZN6Assimp7ObjFile4FaceD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %289) #11
  call void @_ZdlPvm(ptr noundef %289, i64 noundef 88) #13
  br label %292

292:                                              ; preds = %291, %277
  store i32 1, ptr %19, align 4
  br label %406

293:                                              ; preds = %273
  %294 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %295 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %294) #11
  %296 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %295, i32 0, i32 3
  %297 = load ptr, ptr %296, align 8, !tbaa !23
  %298 = icmp ne ptr null, %297
  br i1 %298, label %299, label %306

299:                                              ; preds = %293
  %300 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %301 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %300) #11
  %302 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %301, i32 0, i32 3
  %303 = load ptr, ptr %302, align 8, !tbaa !23
  %304 = load ptr, ptr %8, align 8, !tbaa !5
  %305 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %304, i32 0, i32 4
  store ptr %303, ptr %305, align 8, !tbaa !55
  br label %313

306:                                              ; preds = %293
  %307 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %308 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %307) #11
  %309 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %308, i32 0, i32 4
  %310 = load ptr, ptr %309, align 8, !tbaa !61
  %311 = load ptr, ptr %8, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %311, i32 0, i32 4
  store ptr %310, ptr %312, align 8, !tbaa !55
  br label %313

313:                                              ; preds = %306, %299
  %314 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %315 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %314) #11
  %316 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %315, i32 0, i32 2
  %317 = load ptr, ptr %316, align 8, !tbaa !62
  %318 = icmp eq ptr null, %317
  br i1 %318, label %319, label %331

319:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef @_ZN6AssimpL14DefaultObjNameE, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %320 unwind label %322

320:                                              ; preds = %319
  invoke void @_ZN6Assimp13ObjFileParser12createObjectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4184) %41, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %321 unwind label %326

321:                                              ; preds = %320
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #11
  br label %331

322:                                              ; preds = %319
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %9, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %10, align 4
  br label %330

326:                                              ; preds = %320
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %9, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  br label %330

330:                                              ; preds = %326, %322
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #11
  br label %409

331:                                              ; preds = %321, %313
  %332 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %333 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %332) #11
  %334 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %333, i32 0, i32 14
  %335 = load ptr, ptr %334, align 8, !tbaa !63
  %336 = icmp eq ptr null, %335
  br i1 %336, label %337, label %349

337:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef @_ZN6AssimpL14DefaultObjNameE, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %338 unwind label %340

338:                                              ; preds = %337
  invoke void @_ZN6Assimp13ObjFileParser10createMeshERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4184) %41, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %339 unwind label %344

339:                                              ; preds = %338
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #11
  br label %349

340:                                              ; preds = %337
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %9, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %10, align 4
  br label %348

344:                                              ; preds = %338
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %9, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %10, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #11
  br label %348

348:                                              ; preds = %344, %340
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #11
  br label %409

349:                                              ; preds = %339, %331
  %350 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %351 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %350) #11
  %352 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %351, i32 0, i32 14
  %353 = load ptr, ptr %352, align 8, !tbaa !63
  %354 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %353, i32 0, i32 1
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE12emplace_backIJRS3_EEES7_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %354, ptr noundef nonnull align 8 dereferenceable(8) %8)
  %356 = load ptr, ptr %8, align 8, !tbaa !5
  %357 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %356, i32 0, i32 1
  %358 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %357) #11
  %359 = trunc i64 %358 to i32
  %360 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %361 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %360) #11
  %362 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %361, i32 0, i32 14
  %363 = load ptr, ptr %362, align 8, !tbaa !63
  %364 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %363, i32 0, i32 3
  %365 = load i32, ptr %364, align 8, !tbaa !64
  %366 = add i32 %365, %359
  store i32 %366, ptr %364, align 8, !tbaa !64
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.Assimp::ObjFile::Face", ptr %367, i32 0, i32 3
  %369 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %368) #11
  %370 = trunc i64 %369 to i32
  %371 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %372 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %371) #11
  %373 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %372, i32 0, i32 14
  %374 = load ptr, ptr %373, align 8, !tbaa !63
  %375 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %374, i32 0, i32 4
  %376 = getelementptr inbounds [8 x i32], ptr %375, i64 0, i64 0
  %377 = load i32, ptr %376, align 4, !tbaa !15
  %378 = add i32 %377, %370
  store i32 %378, ptr %376, align 4, !tbaa !15
  %379 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %380 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %379) #11
  %381 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %380, i32 0, i32 14
  %382 = load ptr, ptr %381, align 8, !tbaa !63
  %383 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %382, i32 0, i32 6
  %384 = load i8, ptr %383, align 8, !tbaa !70, !range !20, !noundef !21
  %385 = trunc i8 %384 to i1
  br i1 %385, label %395, label %386

386:                                              ; preds = %349
  %387 = load i8, ptr %11, align 1, !tbaa !13, !range !20, !noundef !21
  %388 = trunc i8 %387 to i1
  br i1 %388, label %389, label %395

389:                                              ; preds = %386
  %390 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 2
  %391 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %390) #11
  %392 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %391, i32 0, i32 14
  %393 = load ptr, ptr %392, align 8, !tbaa !63
  %394 = getelementptr inbounds %"struct.Assimp::ObjFile::Mesh", ptr %393, i32 0, i32 6
  store i8 1, ptr %394, align 8, !tbaa !70
  br label %395

395:                                              ; preds = %389, %386, %349
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  %396 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %396, i64 8, i1 false), !tbaa.struct !11
  %397 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %397, i64 8, i1 false), !tbaa.struct !11
  %398 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 3
  %399 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %39, i32 0, i32 0
  %400 = load ptr, ptr %399, align 8
  %401 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %40, i32 0, i32 0
  %402 = load ptr, ptr %401, align 8
  %403 = call ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr %400, ptr %402, ptr noundef nonnull align 4 dereferenceable(4) %398)
  %404 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %38, i32 0, i32 0
  store ptr %403, ptr %404, align 8
  %405 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %41, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %405, ptr align 8 %38, i64 8, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  store i32 0, ptr %19, align 4
  br label %406

406:                                              ; preds = %395, %292
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  %407 = load i32, ptr %19, align 4
  switch i32 %407, label %416 [
    i32 0, label %408
    i32 1, label %408
  ]

408:                                              ; preds = %406, %406, %60
  ret void

409:                                              ; preds = %348, %330, %263
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #11
  br label %410

410:                                              ; preds = %409, %102
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #11
  br label %411

411:                                              ; preds = %410
  %412 = load ptr, ptr %9, align 8
  %413 = load i32, ptr %10, align 4
  %414 = insertvalue { ptr, i32 } poison, ptr %412, 0
  %415 = insertvalue { ptr, i32 } %414, i32 %413, 1
  resume { ptr, i32 } %415

416:                                              ; preds = %406, %270
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp16IsSpaceOrNewLineIcEEbT_(i8 noundef signext) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp9IsLineEndIcEEbT_(i8 noundef signext) #7

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr, ptr) #6

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6Assimp7ObjFile4FaceC2E15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(88), i32 noundef) unnamed_addr #1 align 2

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

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #9

declare void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) #9

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #10

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #7

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

!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 = !{!"_ZTS15aiPrimitiveType", !7, i64 0}
!11 = !{i64 0, i64 8, !5}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = distinct !{!22, !18}
!23 = !{!24, !6, i64 64}
!24 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !25, i64 0, !28, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !32, i64 80, !36, i64 104, !36, i64 128, !36, i64 152, !40, i64 176, !6, i64 224, !25, i64 232, !36, i64 264, !16, i64 288, !6, i64 296, !48, i64 304, !52, i64 328}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !26, i64 0, !27, i64 8, !7, i64 16}
!26 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !41, i64 0}
!41 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !42, i64 0}
!42 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !43, i64 0, !45, i64 8}
!43 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !44, i64 0}
!44 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!45 = !{!"_ZTSSt15_Rb_tree_header", !46, i64 0, !27, i64 32}
!46 = !{!"_ZTSSt18_Rb_tree_node_base", !47, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!47 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!48 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!52 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !53, i64 0}
!53 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !54, i64 0}
!54 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !43, i64 0, !45, i64 8}
!55 = !{!56, !6, i64 80}
!56 = !{!"_ZTSN6Assimp7ObjFile4FaceE", !10, i64 0, !57, i64 8, !57, i64 32, !57, i64 56, !6, i64 80}
!57 = !{!"_ZTSSt6vectorIjSaIjEE", !58, i64 0}
!58 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!61 = !{!24, !6, i64 72}
!62 = !{!24, !6, i64 56}
!63 = !{!24, !6, i64 296}
!64 = !{!65, !16, i64 64}
!65 = !{!"_ZTSN6Assimp7ObjFile4MeshE", !25, i64 0, !66, i64 32, !6, i64 56, !16, i64 64, !7, i64 68, !16, i64 100, !14, i64 104}
!66 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!65, !14, i64 104}


; 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" = type { ptr }
%"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.std::allocator" = type { i8 }

@_ZTI17DeadlyImportError = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.9 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [25 x i8], align 1
@_ZN6AssimpL14DefaultObjNameE = external hidden constant [14 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp13ObjFileParser7getFaceE15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(4184) %0, i32 noundef %1) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::allocator", align 1
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator", align 1
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::allocator", align 1
  %.sroa.036.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 8
  %.sroa.035.0.copyload = load ptr, ptr %17, align 8, !tbaa !5
  %18 = tail call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.036.0.copyload, ptr %.sroa.035.0.copyload)
  store ptr %18, ptr %0, align 8, !tbaa !5
  %19 = tail call noundef zeroext i1 @_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %19, label %205, label %20

20:                                               ; preds = %2
  %21 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %22 = load i8, ptr %21, align 1, !tbaa !9
  %23 = icmp eq i8 %22, 0
  br i1 %23, label %205, label %24

24:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #10
  %25 = tail call noalias noundef nonnull dereferenceable(88) ptr @_Znwm(i64 noundef 88) #11
  tail call void @_ZN6Assimp7ObjFile4FaceC2E15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(88) %25, i32 noundef %1)
  store ptr %25, ptr %3, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %0, i64 16
  %27 = tail call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %28 = getelementptr inbounds i8, ptr %27, i64 104
  %29 = tail call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #10
  %30 = trunc i64 %29 to i32
  %31 = tail call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %32 = getelementptr inbounds i8, ptr %31, i64 264
  %33 = tail call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  %34 = trunc i64 %33 to i32
  %35 = tail call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %36 = getelementptr inbounds i8, ptr %35, i64 128
  %37 = tail call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %36) #10
  %38 = trunc i64 %37 to i32
  %39 = tail call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %40 = getelementptr inbounds i8, ptr %39, i64 264
  %41 = tail call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  %42 = tail call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %43 = getelementptr inbounds i8, ptr %42, i64 128
  %44 = tail call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  %45 = tail call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %45, label %.lr.ph89, label %.thread

.lr.ph89:                                         ; preds = %24
  %spec.select72 = select i1 %44, i32 1, i32 2
  %46 = icmp eq i32 %1, 1
  %47 = getelementptr inbounds i8, ptr %25, i64 32
  %48 = getelementptr inbounds i8, ptr %25, i64 56
  %49 = getelementptr inbounds i8, ptr %25, i64 8
  %50 = getelementptr inbounds i8, ptr %25, i64 32
  %51 = getelementptr inbounds i8, ptr %25, i64 56
  %52 = getelementptr inbounds i8, ptr %25, i64 8
  br label %53

53:                                               ; preds = %.lr.ph89, %120
  %.04587 = phi i1 [ false, %.lr.ph89 ], [ %.247, %120 ]
  %.04986 = phi i32 [ 0, %.lr.ph89 ], [ %.251, %120 ]
  %54 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %55 = load i8, ptr %54, align 1, !tbaa !9
  %56 = call noundef zeroext i1 @_ZN6Assimp9IsLineEndIcEEbT_(i8 noundef signext %55)
  br i1 %56, label %.thread.loopexit, label %57

57:                                               ; preds = %53
  %58 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %59 = load i8, ptr %58, align 1, !tbaa !9
  %60 = icmp eq i8 %59, 47
  br i1 %60, label %61, label %66

61:                                               ; preds = %57
  br i1 %46, label %62, label %64

62:                                               ; preds = %61
  %63 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %63, ptr noundef nonnull @.str.9)
  br label %64

64:                                               ; preds = %62, %61
  %65 = add nsw i32 %.04986, 1
  br label %120

66:                                               ; preds = %57
  %67 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %68 = load i8, ptr %67, align 1, !tbaa !9
  %69 = call noundef zeroext i1 @_ZN6Assimp16IsSpaceOrNewLineIcEEbT_(i8 noundef signext %68)
  br i1 %69, label %120, label %70

70:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #10
  %71 = load i64, ptr %0, align 8, !tbaa !5
  store i64 %71, ptr %4, align 8, !tbaa !5
  %72 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %72, label %.lr.ph, label %.critedge

.lr.ph:                                           ; preds = %70, %75
  %73 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #10
  %74 = load i8, ptr %73, align 1, !tbaa !9
  %.not = icmp eq i8 %74, 0
  br i1 %.not, label %.critedge, label %75

75:                                               ; preds = %.lr.ph
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #10
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %77, label %.lr.ph, label %.critedge, !llvm.loop !10

.critedge:                                        ; preds = %.lr.ph, %75, %70
  %78 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %78, label %79, label %82

79:                                               ; preds = %.critedge
  %80 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %81 = call i32 @atoi(ptr nocapture noundef %80) #12
  br label %90

82:                                               ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #10
  %83 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  %84 = call noundef i64 @_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %0) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull %83, i64 noundef %84, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %85 unwind label %88

85:                                               ; preds = %82
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  %86 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  %87 = call i32 @atoi(ptr nocapture noundef %86) #12
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  br label %90

88:                                               ; preds = %82
  %89 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  br label %119

90:                                               ; preds = %85, %79
  %.058 = phi i32 [ %81, %79 ], [ %87, %85 ]
  %91 = icmp slt i32 %.058, 0
  %spec.select = select i1 %91, i32 2, i32 1
  %.057.off81 = add i32 %.058, 9
  %.not6282 = icmp ult i32 %.057.off81, 19
  br i1 %.not6282, label %._crit_edge, label %.lr.ph85

.lr.ph85:                                         ; preds = %90, %.lr.ph85
  %.15484 = phi i32 [ %93, %.lr.ph85 ], [ %spec.select, %90 ]
  %.05783 = phi i32 [ %92, %.lr.ph85 ], [ %.058, %90 ]
  %92 = sdiv i32 %.05783, 10
  %93 = add nuw nsw i32 %.15484, 1
  %.057.off = add nsw i32 %92, 9
  %.not62 = icmp ult i32 %.057.off, 19
  br i1 %.not62, label %._crit_edge, label %.lr.ph85, !llvm.loop !12

._crit_edge:                                      ; preds = %.lr.ph85, %90
  %.154.lcssa = phi i32 [ %spec.select, %90 ], [ %93, %.lr.ph85 ]
  %94 = icmp eq i32 %.04986, 1
  %brmerge.not = and i1 %41, %94
  %.150 = select i1 %brmerge.not, i32 %spec.select72, i32 %.04986
  %95 = icmp sgt i32 %.058, 0
  br i1 %95, label %96, label %104

96:                                               ; preds = %._crit_edge
  switch i32 %.150, label %103 [
    i32 0, label %97
    i32 1, label %99
    i32 2, label %101
  ]

97:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #10
  %98 = add nsw i32 %.058, -1
  store i32 %98, ptr %7, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 4 dereferenceable(4) %7)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  br label %118

99:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #10
  %100 = add nsw i32 %.058, -1
  store i32 %100, ptr %8, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 4 dereferenceable(4) %8)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #10
  br label %118

101:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  %102 = add nsw i32 %.058, -1
  store i32 %102, ptr %9, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 4 dereferenceable(4) %9)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  br label %118

103:                                              ; preds = %96
  call void @_ZN6Assimp13ObjFileParser22reportErrorTokenInFaceEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
  br label %118

104:                                              ; preds = %._crit_edge
  br i1 %91, label %105, label %113

105:                                              ; preds = %104
  switch i32 %.150, label %112 [
    i32 0, label %106
    i32 1, label %108
    i32 2, label %110
  ]

106:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #10
  %107 = add nsw i32 %.058, %30
  store i32 %107, ptr %10, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 4 dereferenceable(4) %10)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  br label %118

108:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #10
  %109 = add nsw i32 %.058, %34
  store i32 %109, ptr %11, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 4 dereferenceable(4) %11)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  br label %118

110:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #10
  %111 = add nsw i32 %.058, %38
  store i32 %111, ptr %12, align 4, !tbaa !13
  call void @_ZNSt6vectorIjSaIjEE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #10
  br label %118

112:                                              ; preds = %105
  call void @_ZN6Assimp13ObjFileParser22reportErrorTokenInFaceEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
  br label %118

113:                                              ; preds = %104
  call void @_ZN6Assimp7ObjFile4FaceD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %25) #10
  call void @_ZdlPvm(ptr noundef nonnull %25, i64 noundef 88) #13
  %114 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZN17DeadlyImportErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %114, ptr noundef nonnull @.str.10)
          to label %115 unwind label %116

115:                                              ; preds = %113
  call void @__cxa_throw(ptr nonnull %114, ptr nonnull @_ZTI17DeadlyImportError, ptr nonnull @_ZNSt13runtime_errorD2Ev) #14
  unreachable

116:                                              ; preds = %113
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %114) #10
  br label %119

118:                                              ; preds = %108, %112, %110, %106, %97, %101, %103, %99
  %.146 = phi i1 [ %.04587, %97 ], [ %.04587, %99 ], [ true, %101 ], [ %.04587, %103 ], [ %.04587, %106 ], [ %.04587, %108 ], [ true, %110 ], [ %.04587, %112 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  br label %120

119:                                              ; preds = %116, %88
  %.pn = phi { ptr, i32 } [ %117, %116 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  br label %206

120:                                              ; preds = %64, %118, %66
  %.255 = phi i32 [ 1, %64 ], [ %.154.lcssa, %118 ], [ 1, %66 ]
  %.251 = phi i32 [ %65, %64 ], [ %.150, %118 ], [ 0, %66 ]
  %.247 = phi i1 [ %.04587, %64 ], [ %.146, %118 ], [ %.04587, %66 ]
  %121 = sext i32 %.255 to i64
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEpLEl(ptr noundef nonnull align 8 dereferenceable(8) %0, i64 noundef %121) #10
  %123 = call noundef zeroext i1 @_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  br i1 %123, label %53, label %.thread.loopexit

.thread.loopexit:                                 ; preds = %53, %120
  %.045.lcssa.ph = phi i1 [ %.247, %120 ], [ %.04587, %53 ]
  %124 = xor i1 %.045.lcssa.ph, true
  br label %.thread

.thread:                                          ; preds = %.thread.loopexit, %24
  %.045.lcssa = phi i1 [ true, %24 ], [ %124, %.thread.loopexit ]
  %125 = getelementptr inbounds i8, ptr %25, i64 8
  %126 = call noundef zeroext i1 @_ZNKSt6vectorIjSaIjEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %125) #10
  br i1 %126, label %127, label %131

127:                                              ; preds = %.thread
  %128 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %128, ptr noundef nonnull @.str.11)
  %.sroa.04.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.03.0.copyload = load ptr, ptr %17, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %0, i64 24
  %130 = call ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr %.sroa.04.0.copyload, ptr %.sroa.03.0.copyload, ptr noundef nonnull align 4 dereferenceable(4) %129)
  store ptr %130, ptr %0, align 8, !tbaa !5
  call void @_ZN6Assimp7ObjFile4FaceD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %25) #10
  call void @_ZdlPvm(ptr noundef nonnull %25, i64 noundef 88) #13
  br label %204

131:                                              ; preds = %.thread
  %132 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %133 = getelementptr inbounds i8, ptr %132, i64 64
  %134 = load ptr, ptr %133, align 8, !tbaa !15
  %.not64 = icmp eq ptr %134, null
  %135 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %136 = getelementptr inbounds i8, ptr %25, i64 80
  %. = select i1 %.not64, i64 72, i64 64
  %137 = getelementptr inbounds i8, ptr %135, i64 %.
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  store ptr %138, ptr %136, align 8, !tbaa !47
  %139 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %140 = getelementptr inbounds i8, ptr %139, i64 56
  %141 = load ptr, ptr %140, align 8, !tbaa !54
  %142 = icmp eq ptr %141, null
  br i1 %142, label %143, label %151

143:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @_ZN6AssimpL14DefaultObjNameE, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %144 unwind label %146

144:                                              ; preds = %143
  invoke void @_ZN6Assimp13ObjFileParser12createObjectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %145 unwind label %148

145:                                              ; preds = %144
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  br label %151

146:                                              ; preds = %143
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %150

148:                                              ; preds = %144
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  br label %150

150:                                              ; preds = %148, %146
  %.pn65 = phi { ptr, i32 } [ %149, %148 ], [ %147, %146 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #10
  br label %206

151:                                              ; preds = %145, %131
  %152 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %153 = getelementptr inbounds i8, ptr %152, i64 296
  %154 = load ptr, ptr %153, align 8, !tbaa !55
  %155 = icmp eq ptr %154, null
  br i1 %155, label %156, label %164

156:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @_ZN6AssimpL14DefaultObjNameE, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %157 unwind label %159

157:                                              ; preds = %156
  invoke void @_ZN6Assimp13ObjFileParser10createMeshERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %158 unwind label %161

158:                                              ; preds = %157
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  br label %164

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

161:                                              ; preds = %157
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #10
  br label %163

163:                                              ; preds = %161, %159
  %.pn67 = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #10
  br label %206

164:                                              ; preds = %158, %151
  %165 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %166 = getelementptr inbounds i8, ptr %165, i64 296
  %167 = load ptr, ptr %166, align 8, !tbaa !55
  %168 = getelementptr inbounds i8, ptr %167, i64 32
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE12emplace_backIJRS3_EEES7_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %168, ptr noundef nonnull align 8 dereferenceable(8) %3)
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i64 8
  %172 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %171) #10
  %173 = trunc i64 %172 to i32
  %174 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %175 = getelementptr inbounds i8, ptr %174, i64 296
  %176 = load ptr, ptr %175, align 8, !tbaa !55
  %177 = getelementptr inbounds i8, ptr %176, i64 64
  %178 = load i32, ptr %177, align 8, !tbaa !56
  %179 = add i32 %178, %173
  store i32 %179, ptr %177, align 8, !tbaa !56
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i64 56
  %182 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %181) #10
  %183 = trunc i64 %182 to i32
  %184 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %185 = getelementptr inbounds i8, ptr %184, i64 296
  %186 = load ptr, ptr %185, align 8, !tbaa !55
  %187 = getelementptr inbounds i8, ptr %186, i64 68
  %188 = load i32, ptr %187, align 4, !tbaa !13
  %189 = add i32 %188, %183
  store i32 %189, ptr %187, align 4, !tbaa !13
  %190 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %191 = getelementptr inbounds i8, ptr %190, i64 296
  %192 = load ptr, ptr %191, align 8, !tbaa !55
  %193 = getelementptr inbounds i8, ptr %192, i64 104
  %194 = load i8, ptr %193, align 8, !tbaa !63, !range !64, !noundef !65
  %195 = trunc nuw i8 %194 to i1
  %brmerge = select i1 %195, i1 true, i1 %.045.lcssa
  br i1 %brmerge, label %201, label %196

196:                                              ; preds = %164
  %197 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  %198 = getelementptr inbounds i8, ptr %197, i64 296
  %199 = load ptr, ptr %198, align 8, !tbaa !55
  %200 = getelementptr inbounds i8, ptr %199, i64 104
  store i8 1, ptr %200, align 8, !tbaa !63
  br label %201

201:                                              ; preds = %164, %196
  %.sroa.01.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.0.0.copyload = load ptr, ptr %17, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %0, i64 24
  %203 = call ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr %.sroa.01.0.copyload, ptr %.sroa.0.0.copyload, ptr noundef nonnull align 4 dereferenceable(4) %202)
  store ptr %203, ptr %0, align 8, !tbaa !5
  br label %204

204:                                              ; preds = %127, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  br label %205

205:                                              ; preds = %2, %20, %204
  ret void

206:                                              ; preds = %163, %150, %119
  %.pn67.pn = phi { ptr, i32 } [ %.pn67, %163 ], [ %.pn65, %150 ], [ %.pn, %119 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  resume { ptr, i32 } %.pn67.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr, ptr, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp16IsSpaceOrNewLineIcEEbT_(i8 noundef signext) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp9IsLineEndIcEEbT_(i8 noundef signext) local_unnamed_addr #6

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr, ptr) local_unnamed_addr #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6Assimp7ObjFile4FaceC2E15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(88), i32 noundef) unnamed_addr #1 align 2

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

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #8

declare void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #9

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

!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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !6, i64 64}
!16 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !17, i64 0, !20, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !24, i64 80, !28, i64 104, !28, i64 128, !28, i64 152, !32, i64 176, !6, i64 224, !17, i64 232, !28, i64 264, !14, i64 288, !6, i64 296, !40, i64 304, !44, i64 328}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !18, i64 0, !19, i64 8, !7, i64 16}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !33, i64 0}
!33 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !34, i64 0}
!34 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !35, i64 0, !37, i64 8}
!35 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !36, i64 0}
!36 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!37 = !{!"_ZTSSt15_Rb_tree_header", !38, i64 0, !19, i64 32}
!38 = !{!"_ZTSSt18_Rb_tree_node_base", !39, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!39 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!40 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !45, i64 0}
!45 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !46, i64 0}
!46 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !35, i64 0, !37, i64 8}
!47 = !{!48, !6, i64 80}
!48 = !{!"_ZTSN6Assimp7ObjFile4FaceE", !49, i64 0, !50, i64 8, !50, i64 32, !50, i64 56, !6, i64 80}
!49 = !{!"_ZTS15aiPrimitiveType", !7, i64 0}
!50 = !{!"_ZTSSt6vectorIjSaIjEE", !51, i64 0}
!51 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!54 = !{!16, !6, i64 56}
!55 = !{!16, !6, i64 296}
!56 = !{!57, !14, i64 64}
!57 = !{!"_ZTSN6Assimp7ObjFile4MeshE", !17, i64 0, !58, i64 32, !6, i64 56, !14, i64 64, !7, i64 68, !14, i64 100, !62, i64 104}
!58 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4FaceESaIS3_EE", !59, i64 0}
!59 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE12_Vector_implE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4FaceESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!62 = !{!"bool", !7, i64 0}
!63 = !{!57, !62, i64 104}
!64 = !{i8 0, i8 2}
!65 = !{}


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