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

; 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.Assimp::ObjFileMtlImporter" = type { %"class.std::__cxx11::basic_string", %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator", ptr, i32, %"class.std::vector" }
%"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::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.Assimp::ObjFile::Model" = type { %"class.std::__cxx11::basic_string", %"class.std::vector.0", 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.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = 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::Material" = type { %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, [6 x %struct.aiString], %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, %struct.aiString, [20 x i8], %struct.aiColor3D, %struct.aiColor3D, %struct.aiColor3D, %struct.aiColor3D, float, float, i32, float, %struct.aiColor3D, %"struct.Assimp::Maybe", %"struct.Assimp::Maybe", %"struct.Assimp::Maybe.28", %"struct.Assimp::Maybe", %"struct.Assimp::Maybe", float, float }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiColor3D = type { float, float, float }
%"struct.Assimp::Maybe.28" = type <{ %struct.aiColor3D, i8, [3 x i8] }>
%"struct.Assimp::Maybe" = type <{ float, i8, [3 x i8] }>

@_ZN6AssimpL11ClampOptionE = external hidden constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZN6AssimpL10TypeOptionE = external hidden constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZN6AssimpL10BumpOptionE = external hidden constant [4 x i8], align 1
@_ZN6AssimpL12BlendUOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL12BlendVOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL11BoostOptionE = external hidden constant [7 x i8], align 1
@_ZN6AssimpL16ResolutionOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL13ChannelOptionE = external hidden constant [9 x i8], align 1
@_ZN6AssimpL15ModifyMapOptionE = external hidden constant [4 x i8], align 1
@_ZN6AssimpL12OffsetOptionE = external hidden constant [3 x i8], align 1
@_ZN6AssimpL11ScaleOptionE = external hidden constant [3 x i8], align 1
@_ZN6AssimpL16TurbulenceOptionE = external hidden constant [3 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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr, ptr, ptr noundef, i64 noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef, ptr noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp18ObjFileMtlImporter16getTextureOptionERbRiRP8aiString(ptr noundef nonnull align 8 dereferenceable(88) %0, ptr noundef nonnull align 1 dereferenceable(1) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #4 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca [3 x i8], align 1
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %26 = alloca [12 x i8], align 1
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %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.__gnu_cxx::__normal_iterator", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %40 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %41 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %10, ptr align 8 %41, i64 8, i1 false), !tbaa.struct !9
  %42 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %42, i64 8, i1 false), !tbaa.struct !9
  %43 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %10, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8
  %45 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %11, i32 0, i32 0
  %46 = load ptr, ptr %45, align 8
  %47 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %44, ptr %46)
  %48 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  store ptr %47, ptr %48, align 8
  %49 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %49, ptr align 8 %9, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  br label %50

50:                                               ; preds = %301, %4
  %51 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %12, ptr align 8 %51, i64 8, i1 false), !tbaa.struct !9
  %52 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %13, ptr align 8 %52, i64 8, i1 false), !tbaa.struct !9
  %53 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8
  %55 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8
  %57 = call noundef zeroext i1 @_ZN6Assimp13isEndOfBufferIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbT_S8_(ptr %54, ptr %56)
  br i1 %57, label %64, label %58

58:                                               ; preds = %50
  %59 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  %60 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #6
  %61 = load i8, ptr %60, align 1, !tbaa !10
  %62 = sext i8 %61 to i32
  %63 = icmp eq i32 %62, 45
  br label %64

64:                                               ; preds = %58, %50
  %65 = phi i1 [ false, %50 ], [ %63, %58 ]
  br i1 %65, label %66, label %302

66:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %67 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  %68 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #6
  store ptr %68, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 1, ptr %15, align 4, !tbaa !11
  %69 = load ptr, ptr %14, align 8, !tbaa !5
  %70 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %69, ptr noundef @_ZN6AssimpL11ClampOptionE, i32 noundef 6)
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %95, label %72

72:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %73 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %73, i64 8, i1 false), !tbaa.struct !9
  %74 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 %74, i64 8, i1 false), !tbaa.struct !9
  %75 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8
  %77 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %18, i32 0, i32 0
  %78 = load ptr, ptr %77, align 8
  %79 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %76, ptr %78)
  %80 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %16, i32 0, i32 0
  store ptr %79, ptr %80, align 8
  call void @llvm.lifetime.start.p0(i64 3, ptr %19) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %16, i64 8, i1 false), !tbaa.struct !9
  %81 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %81, i64 8, i1 false), !tbaa.struct !9
  %82 = getelementptr inbounds [3 x i8], ptr %19, i64 0, i64 0
  %83 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8
  %85 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %21, i32 0, i32 0
  %86 = load ptr, ptr %85, align 8
  %87 = call ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr %84, ptr %86, ptr noundef %82, i64 noundef 3)
  %88 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %22, i32 0, i32 0
  store ptr %87, ptr %88, align 8
  %89 = getelementptr inbounds [3 x i8], ptr %19, i64 0, i64 0
  %90 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %89, ptr noundef @.str.8, i32 noundef 2)
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %94, label %92

92:                                               ; preds = %72
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  store i8 1, ptr %93, align 1, !tbaa !13
  br label %94

94:                                               ; preds = %92, %72
  store i32 2, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 3, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  br label %282

95:                                               ; preds = %66
  %96 = load ptr, ptr %14, align 8, !tbaa !5
  %97 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %96, ptr noundef @_ZN6AssimpL10TypeOptionE, i32 noundef 5)
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %213, label %99

99:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %100 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %100, i64 8, i1 false), !tbaa.struct !9
  %101 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %101, i64 8, i1 false), !tbaa.struct !9
  %102 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %24, i32 0, i32 0
  %103 = load ptr, ptr %102, align 8
  %104 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %25, i32 0, i32 0
  %105 = load ptr, ptr %104, align 8
  %106 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %103, ptr %105)
  %107 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %23, i32 0, i32 0
  store ptr %106, ptr %107, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr %26) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 %23, i64 8, i1 false), !tbaa.struct !9
  %108 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %28, ptr align 8 %108, i64 8, i1 false), !tbaa.struct !9
  %109 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %110 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %27, i32 0, i32 0
  %111 = load ptr, ptr %110, align 8
  %112 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %28, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8
  %114 = call ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr %111, ptr %113, ptr noundef %109, i64 noundef 12)
  %115 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %29, i32 0, i32 0
  store ptr %114, ptr %115, align 8
  %116 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %117 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %116, ptr noundef @.str.9, i32 noundef 8)
  %118 = icmp ne i32 %117, 0
  br i1 %118, label %128, label %119

119:                                              ; preds = %99
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 7, ptr %120, align 4, !tbaa !11
  %121 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %122 = load ptr, ptr %121, align 8, !tbaa !15
  %123 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %122, i32 0, i32 3
  %124 = load ptr, ptr %123, align 8, !tbaa !25
  %125 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %124, i32 0, i32 7
  %126 = getelementptr inbounds [6 x %struct.aiString], ptr %125, i64 0, i64 0
  %127 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %126, ptr %127, align 8, !tbaa !5
  br label %212

128:                                              ; preds = %99
  %129 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %130 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %129, ptr noundef @.str.10, i32 noundef 11)
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %141, label %132

132:                                              ; preds = %128
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 8, ptr %133, align 4, !tbaa !11
  %134 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %135 = load ptr, ptr %134, align 8, !tbaa !15
  %136 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %135, i32 0, i32 3
  %137 = load ptr, ptr %136, align 8, !tbaa !25
  %138 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %137, i32 0, i32 7
  %139 = getelementptr inbounds [6 x %struct.aiString], ptr %138, i64 0, i64 1
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %139, ptr %140, align 8, !tbaa !5
  br label %211

141:                                              ; preds = %128
  %142 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %143 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %142, ptr noundef @.str.11, i32 noundef 10)
  %144 = icmp ne i32 %143, 0
  br i1 %144, label %154, label %145

145:                                              ; preds = %141
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 9, ptr %146, align 4, !tbaa !11
  %147 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %148 = load ptr, ptr %147, align 8, !tbaa !15
  %149 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %148, i32 0, i32 3
  %150 = load ptr, ptr %149, align 8, !tbaa !25
  %151 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %150, i32 0, i32 7
  %152 = getelementptr inbounds [6 x %struct.aiString], ptr %151, i64 0, i64 2
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %152, ptr %153, align 8, !tbaa !5
  br label %210

154:                                              ; preds = %141
  %155 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %156 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %155, ptr noundef @.str.12, i32 noundef 9)
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %167, label %158

158:                                              ; preds = %154
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 10, ptr %159, align 4, !tbaa !11
  %160 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %161 = load ptr, ptr %160, align 8, !tbaa !15
  %162 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %161, i32 0, i32 3
  %163 = load ptr, ptr %162, align 8, !tbaa !25
  %164 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %163, i32 0, i32 7
  %165 = getelementptr inbounds [6 x %struct.aiString], ptr %164, i64 0, i64 3
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %165, ptr %166, align 8, !tbaa !5
  br label %209

167:                                              ; preds = %154
  %168 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %169 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %168, ptr noundef @.str.13, i32 noundef 9)
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %180, label %171

171:                                              ; preds = %167
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 11, ptr %172, align 4, !tbaa !11
  %173 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %174 = load ptr, ptr %173, align 8, !tbaa !15
  %175 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %174, i32 0, i32 3
  %176 = load ptr, ptr %175, align 8, !tbaa !25
  %177 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %176, i32 0, i32 7
  %178 = getelementptr inbounds [6 x %struct.aiString], ptr %177, i64 0, i64 4
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %178, ptr %179, align 8, !tbaa !5
  br label %208

180:                                              ; preds = %167
  %181 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %182 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %181, ptr noundef @.str.14, i32 noundef 10)
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %193, label %184

184:                                              ; preds = %180
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 12, ptr %185, align 4, !tbaa !11
  %186 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %187 = load ptr, ptr %186, align 8, !tbaa !15
  %188 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %187, i32 0, i32 3
  %189 = load ptr, ptr %188, align 8, !tbaa !25
  %190 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %189, i32 0, i32 7
  %191 = getelementptr inbounds [6 x %struct.aiString], ptr %190, i64 0, i64 5
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %191, ptr %192, align 8, !tbaa !5
  br label %207

193:                                              ; preds = %180
  %194 = getelementptr inbounds [12 x i8], ptr %26, i64 0, i64 0
  %195 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %194, ptr noundef @.str.15, i32 noundef 6)
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %206, label %197

197:                                              ; preds = %193
  %198 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 6, ptr %198, align 4, !tbaa !11
  %199 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %200 = load ptr, ptr %199, align 8, !tbaa !15
  %201 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %200, i32 0, i32 3
  %202 = load ptr, ptr %201, align 8, !tbaa !25
  %203 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %202, i32 0, i32 7
  %204 = getelementptr inbounds [6 x %struct.aiString], ptr %203, i64 0, i64 0
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %204, ptr %205, align 8, !tbaa !5
  br label %206

206:                                              ; preds = %197, %193
  br label %207

207:                                              ; preds = %206, %184
  br label %208

208:                                              ; preds = %207, %171
  br label %209

209:                                              ; preds = %208, %158
  br label %210

210:                                              ; preds = %209, %145
  br label %211

211:                                              ; preds = %210, %132
  br label %212

212:                                              ; preds = %211, %119
  store i32 2, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %281

213:                                              ; preds = %95
  %214 = load ptr, ptr %14, align 8, !tbaa !5
  %215 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %214, ptr noundef @_ZN6AssimpL10BumpOptionE, i32 noundef 3)
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %238, label %217

217:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %218 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %31, ptr align 8 %218, i64 8, i1 false), !tbaa.struct !9
  %219 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %219, i64 8, i1 false), !tbaa.struct !9
  %220 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %31, i32 0, i32 0
  %221 = load ptr, ptr %220, align 8
  %222 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %32, i32 0, i32 0
  %223 = load ptr, ptr %222, align 8
  %224 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %221, ptr %223)
  %225 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %30, i32 0, i32 0
  store ptr %224, ptr %225, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 8 %30, i64 8, i1 false), !tbaa.struct !9
  %226 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %226, i64 8, i1 false), !tbaa.struct !9
  %227 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 3
  %228 = load ptr, ptr %227, align 8, !tbaa !15
  %229 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %228, i32 0, i32 3
  %230 = load ptr, ptr %229, align 8, !tbaa !25
  %231 = getelementptr inbounds %"struct.Assimp::ObjFile::Material", ptr %230, i32 0, i32 31
  %232 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %33, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8
  %234 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %34, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8
  %236 = call ptr @_ZN6Assimp8getFloatIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rf(ptr %233, ptr %235, ptr noundef nonnull align 4 dereferenceable(4) %231)
  %237 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %35, i32 0, i32 0
  store ptr %236, ptr %237, align 8
  store i32 2, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %280

238:                                              ; preds = %213
  %239 = load ptr, ptr %14, align 8, !tbaa !5
  %240 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %239, ptr noundef @_ZN6AssimpL12BlendUOptionE, i32 noundef 7)
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %242, label %258

242:                                              ; preds = %238
  %243 = load ptr, ptr %14, align 8, !tbaa !5
  %244 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %243, ptr noundef @_ZN6AssimpL12BlendVOptionE, i32 noundef 7)
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %258

246:                                              ; preds = %242
  %247 = load ptr, ptr %14, align 8, !tbaa !5
  %248 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %247, ptr noundef @_ZN6AssimpL11BoostOptionE, i32 noundef 6)
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %258

250:                                              ; preds = %246
  %251 = load ptr, ptr %14, align 8, !tbaa !5
  %252 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %251, ptr noundef @_ZN6AssimpL16ResolutionOptionE, i32 noundef 7)
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %254, label %258

254:                                              ; preds = %250
  %255 = load ptr, ptr %14, align 8, !tbaa !5
  %256 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %255, ptr noundef @_ZN6AssimpL13ChannelOptionE, i32 noundef 8)
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %259, label %258

258:                                              ; preds = %254, %250, %246, %242, %238
  store i32 2, ptr %15, align 4, !tbaa !11
  br label %279

259:                                              ; preds = %254
  %260 = load ptr, ptr %14, align 8, !tbaa !5
  %261 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %260, ptr noundef @_ZN6AssimpL15ModifyMapOptionE, i32 noundef 3)
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %264, label %263

263:                                              ; preds = %259
  store i32 3, ptr %15, align 4, !tbaa !11
  br label %278

264:                                              ; preds = %259
  %265 = load ptr, ptr %14, align 8, !tbaa !5
  %266 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %265, ptr noundef @_ZN6AssimpL12OffsetOptionE, i32 noundef 2)
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %268, label %276

268:                                              ; preds = %264
  %269 = load ptr, ptr %14, align 8, !tbaa !5
  %270 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %269, ptr noundef @_ZN6AssimpL11ScaleOptionE, i32 noundef 2)
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %276

272:                                              ; preds = %268
  %273 = load ptr, ptr %14, align 8, !tbaa !5
  %274 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef %273, ptr noundef @_ZN6AssimpL16TurbulenceOptionE, i32 noundef 2)
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %277, label %276

276:                                              ; preds = %272, %268, %264
  store i32 4, ptr %15, align 4, !tbaa !11
  br label %277

277:                                              ; preds = %276, %272
  br label %278

278:                                              ; preds = %277, %263
  br label %279

279:                                              ; preds = %278, %258
  br label %280

280:                                              ; preds = %279, %217
  br label %281

281:                                              ; preds = %280, %212
  br label %282

282:                                              ; preds = %281, %94
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 0, ptr %36, align 4, !tbaa !11
  br label %283

283:                                              ; preds = %298, %282
  %284 = load i32, ptr %36, align 4, !tbaa !11
  %285 = load i32, ptr %15, align 4, !tbaa !11
  %286 = icmp slt i32 %284, %285
  br i1 %286, label %288, label %287

287:                                              ; preds = %283
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %301

288:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %289 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %38, ptr align 8 %289, i64 8, i1 false), !tbaa.struct !9
  %290 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %290, i64 8, i1 false), !tbaa.struct !9
  %291 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %38, i32 0, i32 0
  %292 = load ptr, ptr %291, align 8
  %293 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %39, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8
  %295 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %292, ptr %294)
  %296 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %37, i32 0, i32 0
  store ptr %295, ptr %296, align 8
  %297 = getelementptr inbounds %"class.Assimp::ObjFileMtlImporter", ptr %40, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %297, ptr align 8 %37, i64 8, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %298

298:                                              ; preds = %288
  %299 = load i32, ptr %36, align 4, !tbaa !11
  %300 = add nsw i32 %299, 1
  store i32 %300, ptr %36, align 4, !tbaa !11
  br label %283, !llvm.loop !54

301:                                              ; preds = %287
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %50, !llvm.loop !56

302:                                              ; preds = %64
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13isEndOfBufferIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbT_S8_(ptr, ptr) #5

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #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 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 #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 8, !5}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !6, i64 48}
!16 = !{!"_ZTSN6Assimp18ObjFileMtlImporterE", !17, i64 0, !20, i64 32, !20, i64 40, !6, i64 48, !12, i64 56, !21, i64 64}
!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 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEE", !6, i64 0}
!21 = !{!"_ZTSSt6vectorIcSaIcEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIcSaIcEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!26, !6, i64 64}
!26 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !17, i64 0, !27, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !31, i64 80, !35, i64 104, !35, i64 128, !35, i64 152, !39, i64 176, !6, i64 224, !17, i64 232, !35, i64 264, !12, i64 288, !6, i64 296, !47, i64 304, !51, i64 328}
!27 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !40, i64 0}
!40 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !41, i64 0}
!41 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !42, i64 0, !44, i64 8}
!42 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !43, i64 0}
!43 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!44 = !{!"_ZTSSt15_Rb_tree_header", !45, i64 0, !19, i64 32}
!45 = !{!"_ZTSSt18_Rb_tree_node_base", !46, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!46 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!47 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!51 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !52, i64 0}
!52 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !53, i64 0}
!53 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !42, i64 0, !44, i64 8}
!54 = distinct !{!54, !55}
!55 = !{!"llvm.loop.mustprogress"}
!56 = distinct !{!56, !55}


; 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"

@_ZN6AssimpL11ClampOptionE = external hidden constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZN6AssimpL10TypeOptionE = external hidden constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZN6AssimpL10BumpOptionE = external hidden constant [4 x i8], align 1
@_ZN6AssimpL12BlendUOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL12BlendVOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL11BoostOptionE = external hidden constant [7 x i8], align 1
@_ZN6AssimpL16ResolutionOptionE = external hidden constant [8 x i8], align 1
@_ZN6AssimpL13ChannelOptionE = external hidden constant [9 x i8], align 1
@_ZN6AssimpL15ModifyMapOptionE = external hidden constant [4 x i8], align 1
@_ZN6AssimpL12OffsetOptionE = external hidden constant [3 x i8], align 1
@_ZN6AssimpL11ScaleOptionE = external hidden constant [3 x i8], align 1
@_ZN6AssimpL16TurbulenceOptionE = external hidden constant [3 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

; 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 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: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr, ptr) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr, ptr, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp18ObjFileMtlImporter16getTextureOptionERbRiRP8aiString(ptr noundef nonnull align 8 dereferenceable(88) %0, ptr nocapture noundef nonnull writeonly align 1 dereferenceable(1) %1, ptr nocapture noundef nonnull writeonly align 4 dereferenceable(4) %2, ptr nocapture noundef nonnull writeonly align 8 dereferenceable(8) %3) local_unnamed_addr #3 align 2 {
  %5 = alloca [3 x i8], align 1
  %6 = alloca [12 x i8], align 1
  %7 = getelementptr inbounds i8, ptr %0, i64 32
  %.sroa.037.0.copyload = load ptr, ptr %7, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 40
  %.sroa.036.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %9 = tail call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.037.0.copyload, ptr %.sroa.036.0.copyload)
  store ptr %9, ptr %7, align 8, !tbaa !5
  %.sroa.034.0.copyload77 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = tail call noundef zeroext i1 @_ZN6Assimp13isEndOfBufferIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbT_S8_(ptr %9, ptr %.sroa.034.0.copyload77)
  br i1 %10, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %4
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  br label %13

.loopexit:                                        ; preds = %78
  %.sroa.034.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %12 = call noundef zeroext i1 @_ZN6Assimp13isEndOfBufferIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbT_S8_(ptr %79, ptr %.sroa.034.0.copyload)
  br i1 %12, label %.critedge, label %13, !llvm.loop !9

13:                                               ; preds = %.lr.ph, %.loopexit
  %14 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  %15 = load i8, ptr %14, align 1, !tbaa !11
  %16 = icmp eq i8 %15, 45
  br i1 %16, label %17, label %.critedge

17:                                               ; preds = %13
  %18 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  %19 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL11ClampOptionE, i32 noundef 6)
  %.not = icmp eq i32 %19, 0
  br i1 %.not, label %20, label %26

20:                                               ; preds = %17
  %.sroa.020.0.copyload = load ptr, ptr %7, align 8, !tbaa !5
  %.sroa.019.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %21 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.020.0.copyload, ptr %.sroa.019.0.copyload)
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %5) #5
  %.sroa.017.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %22 = call ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr %21, ptr %.sroa.017.0.copyload, ptr noundef nonnull %5, i64 noundef 3)
  %23 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %5, ptr noundef nonnull @.str.8, i32 noundef 2)
  %.not56 = icmp eq i32 %23, 0
  br i1 %.not56, label %24, label %25

24:                                               ; preds = %20
  store i8 1, ptr %1, align 1, !tbaa !12
  br label %25

25:                                               ; preds = %24, %20
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %5) #5
  br label %77

26:                                               ; preds = %17
  %27 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL10TypeOptionE, i32 noundef 5)
  %.not57 = icmp eq i32 %27, 0
  br i1 %.not57, label %28, label %49

28:                                               ; preds = %26
  %.sroa.014.0.copyload = load ptr, ptr %7, align 8, !tbaa !5
  %.sroa.013.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %29 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.014.0.copyload, ptr %.sroa.013.0.copyload)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #5
  %.sroa.011.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %30 = call ptr @_ZN6Assimp12CopyNextWordIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_S3_m(ptr %29, ptr %.sroa.011.0.copyload, ptr noundef nonnull %6, i64 noundef 12)
  %31 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.9, i32 noundef 8)
  %.not58 = icmp eq i32 %31, 0
  br i1 %.not58, label %.sink.split, label %32

32:                                               ; preds = %28
  %33 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.10, i32 noundef 11)
  %.not59 = icmp eq i32 %33, 0
  br i1 %.not59, label %.sink.split, label %34

34:                                               ; preds = %32
  %35 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.11, i32 noundef 10)
  %.not60 = icmp eq i32 %35, 0
  br i1 %.not60, label %.sink.split, label %36

36:                                               ; preds = %34
  %37 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.12, i32 noundef 9)
  %.not61 = icmp eq i32 %37, 0
  br i1 %.not61, label %.sink.split, label %38

38:                                               ; preds = %36
  %39 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.13, i32 noundef 9)
  %.not62 = icmp eq i32 %39, 0
  br i1 %.not62, label %.sink.split, label %40

40:                                               ; preds = %38
  %41 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.14, i32 noundef 10)
  %.not63 = icmp eq i32 %41, 0
  br i1 %.not63, label %.sink.split, label %42

42:                                               ; preds = %40
  %43 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %6, ptr noundef nonnull @.str.15, i32 noundef 6)
  %.not64 = icmp eq i32 %43, 0
  br i1 %.not64, label %.sink.split, label %48

.sink.split:                                      ; preds = %42, %40, %38, %36, %34, %32, %28
  %.sink = phi i32 [ 7, %28 ], [ 8, %32 ], [ 9, %34 ], [ 10, %36 ], [ 11, %38 ], [ 12, %40 ], [ 6, %42 ]
  %.sink81 = phi i64 [ 7196, %28 ], [ 8224, %32 ], [ 9252, %34 ], [ 10280, %36 ], [ 11308, %38 ], [ 12336, %40 ], [ 7196, %42 ]
  store i32 %.sink, ptr %2, align 4, !tbaa !14
  %44 = load ptr, ptr %11, align 8, !tbaa !16
  %45 = getelementptr inbounds i8, ptr %44, i64 64
  %46 = load ptr, ptr %45, align 8, !tbaa !26
  %47 = getelementptr inbounds i8, ptr %46, i64 %.sink81
  store ptr %47, ptr %3, align 8, !tbaa !5
  br label %48

48:                                               ; preds = %.sink.split, %42
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #5
  br label %77

49:                                               ; preds = %26
  %50 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL10BumpOptionE, i32 noundef 3)
  %.not65 = icmp eq i32 %50, 0
  br i1 %.not65, label %51, label %58

51:                                               ; preds = %49
  %.sroa.08.0.copyload = load ptr, ptr %7, align 8, !tbaa !5
  %.sroa.07.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %52 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.08.0.copyload, ptr %.sroa.07.0.copyload)
  %.sroa.05.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %53 = load ptr, ptr %11, align 8, !tbaa !16
  %54 = getelementptr inbounds i8, ptr %53, i64 64
  %55 = load ptr, ptr %54, align 8, !tbaa !26
  %56 = getelementptr inbounds i8, ptr %55, i64 20708
  %57 = call ptr @_ZN6Assimp8getFloatIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rf(ptr %52, ptr %.sroa.05.0.copyload, ptr noundef nonnull align 4 dereferenceable(4) %56)
  br label %77

58:                                               ; preds = %49
  %59 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL12BlendUOptionE, i32 noundef 7)
  %.not66 = icmp eq i32 %59, 0
  br i1 %.not66, label %77, label %60

60:                                               ; preds = %58
  %61 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL12BlendVOptionE, i32 noundef 7)
  %.not67 = icmp eq i32 %61, 0
  br i1 %.not67, label %77, label %62

62:                                               ; preds = %60
  %63 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL11BoostOptionE, i32 noundef 6)
  %.not68 = icmp eq i32 %63, 0
  br i1 %.not68, label %77, label %64

64:                                               ; preds = %62
  %65 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL16ResolutionOptionE, i32 noundef 7)
  %.not69 = icmp eq i32 %65, 0
  br i1 %.not69, label %77, label %66

66:                                               ; preds = %64
  %67 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL13ChannelOptionE, i32 noundef 8)
  %.not70 = icmp eq i32 %67, 0
  br i1 %.not70, label %77, label %68

68:                                               ; preds = %66
  %69 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL15ModifyMapOptionE, i32 noundef 3)
  %.not71 = icmp eq i32 %69, 0
  br i1 %.not71, label %77, label %70

70:                                               ; preds = %68
  %71 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL12OffsetOptionE, i32 noundef 2)
  %.not72 = icmp eq i32 %71, 0
  br i1 %.not72, label %76, label %72

72:                                               ; preds = %70
  %73 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL11ScaleOptionE, i32 noundef 2)
  %.not73 = icmp eq i32 %73, 0
  br i1 %.not73, label %76, label %74

74:                                               ; preds = %72
  %75 = call noundef i32 @_ZN6Assimp15ASSIMP_strincmpEPKcS1_j(ptr noundef nonnull %18, ptr noundef nonnull @_ZN6AssimpL16TurbulenceOptionE, i32 noundef 2)
  %.not74 = icmp eq i32 %75, 0
  br i1 %.not74, label %76, label %77

76:                                               ; preds = %74, %72, %70
  br label %77

77:                                               ; preds = %68, %58, %60, %62, %64, %66, %48, %74, %76, %51, %25
  %.0 = phi i32 [ 1, %74 ], [ 4, %76 ], [ 2, %51 ], [ 2, %48 ], [ 2, %25 ], [ 2, %66 ], [ 2, %64 ], [ 2, %62 ], [ 2, %60 ], [ 2, %58 ], [ 3, %68 ]
  %.sroa.01.0.copyload.pre = load ptr, ptr %7, align 8, !tbaa !5
  br label %78

78:                                               ; preds = %77, %78
  %.sroa.01.0.copyload = phi ptr [ %.sroa.01.0.copyload.pre, %77 ], [ %79, %78 ]
  %.05575 = phi i32 [ 0, %77 ], [ %80, %78 ]
  %.sroa.0.0.copyload = load ptr, ptr %8, align 8, !tbaa !5
  %79 = call ptr @_ZN6Assimp12getNextTokenIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_(ptr %.sroa.01.0.copyload, ptr %.sroa.0.0.copyload)
  store ptr %79, ptr %7, align 8, !tbaa !5
  %80 = add nuw nsw i32 %.05575, 1
  %exitcond.not = icmp eq i32 %80, %.0
  br i1 %exitcond.not, label %.loopexit, label %78, !llvm.loop !55

.critedge:                                        ; preds = %13, %.loopexit, %4
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13isEndOfBufferIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbT_S8_(ptr, ptr) local_unnamed_addr #4

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 = { 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 #3 = { 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 #4 = { 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 #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !6, i64 48}
!17 = !{!"_ZTSN6Assimp18ObjFileMtlImporterE", !18, i64 0, !21, i64 32, !21, i64 40, !6, i64 48, !15, i64 56, !22, i64 64}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !19, i64 0, !20, i64 8, !7, i64 16}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEE", !6, i64 0}
!22 = !{!"_ZTSSt6vectorIcSaIcEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIcSaIcEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!27, !6, i64 64}
!27 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !18, 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, !18, i64 232, !36, i64 264, !15, i64 288, !6, i64 296, !48, i64 304, !52, i64 328}
!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, !20, 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 = distinct !{!55, !10}


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