; 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.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = 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 }
%"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.aiVector3t = type { float, float, float }
%"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" }

@.str = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp13ObjFileParser9parseFileERNS_14IOStreamBufferIcEE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(80) %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.std::vector.30", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca i64, align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca i64, align 8
  %21 = alloca %class.aiVector3t, align 4
  %22 = alloca %class.aiVector3t, align 4
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %29 = alloca i64, align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", 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 i64, align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca i32, align 4
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %40 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %45 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = call noundef i64 @_ZNK6Assimp14IOStreamBufferIcE4sizeEv(ptr noundef nonnull align 8 dereferenceable(80) %46)
  %48 = trunc i64 %47 to i32
  store i32 %48, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %49 = load i32, ptr %5, align 4, !tbaa !9
  store i32 %49, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  store i64 0, ptr %8, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #7
  store i8 0, ptr %9, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #7
  call void @_ZNSt6vectorIcSaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  br label %50

50:                                               ; preds = %421, %2
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = invoke noundef zeroext i1 @_ZN6Assimp14IOStreamBufferIcE15getNextDataLineERSt6vectorIcSaIcEEc(ptr noundef nonnull align 8 dereferenceable(80) %51, ptr noundef nonnull align 8 dereferenceable(24) %10, i8 noundef signext 92)
          to label %53 unwind label %84

53:                                               ; preds = %50
  br i1 %52, label %54, label %423

54:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %55 = call ptr @_ZNSt6vectorIcSaIcEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  %56 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  store ptr %55, ptr %56, align 8
  %57 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %13, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %58 = call ptr @_ZNSt6vectorIcSaIcEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  %59 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  store ptr %58, ptr %59, align 8
  %60 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %60, ptr align 8 %14, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  %61 = call noundef i64 @_ZNKSt6vectorIcSaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  %62 = sub i64 %61, 1
  %63 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %62) #7
  %64 = getelementptr inbounds i8, ptr %63, i64 1
  %65 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 5
  store ptr %64, ptr %65, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = invoke noundef i64 @_ZNK6Assimp14IOStreamBufferIcE10getFilePosEv(ptr noundef nonnull align 8 dereferenceable(80) %66)
          to label %68 unwind label %88

68:                                               ; preds = %54
  store i64 %67, ptr %15, align 8, !tbaa !11
  %69 = load i64, ptr %8, align 8, !tbaa !11
  %70 = load i64, ptr %15, align 8, !tbaa !11
  %71 = icmp ult i64 %69, %70
  br i1 %71, label %72, label %92

72:                                               ; preds = %68
  %73 = load i64, ptr %15, align 8, !tbaa !11
  %74 = trunc i64 %73 to i32
  store i32 %74, ptr %7, align 4, !tbaa !9
  %75 = load i64, ptr %15, align 8, !tbaa !11
  store i64 %75, ptr %8, align 8, !tbaa !11
  %76 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 7
  %77 = load ptr, ptr %76, align 8, !tbaa !27
  %78 = load i32, ptr %7, align 4, !tbaa !9
  %79 = load i32, ptr %6, align 4, !tbaa !9
  %80 = load ptr, ptr %77, align 8, !tbaa !28
  %81 = getelementptr inbounds ptr, ptr %80, i64 3
  %82 = load ptr, ptr %81, align 8
  invoke void %82(ptr noundef nonnull align 8 dereferenceable(8) %77, i32 noundef %78, i32 noundef %79)
          to label %83 unwind label %88

83:                                               ; preds = %72
  br label %92

84:                                               ; preds = %50
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %11, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %12, align 4
  br label %424

88:                                               ; preds = %385, %383, %381, %295, %292, %267, %72, %54
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %11, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %12, align 4
  br label %422

92:                                               ; preds = %83, %68
  %93 = load i8, ptr %9, align 1, !tbaa !13, !range !30, !noundef !31
  %94 = trunc i8 %93 to i1
  br i1 %94, label %95, label %118

95:                                               ; preds = %92
  %96 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %97 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #7
  %98 = load i8, ptr %97, align 1, !tbaa !32
  %99 = sext i8 %98 to i32
  switch i32 %99, label %117 [
    i32 101, label %100
  ]

100:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  %101 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %101, i64 8, i1 false), !tbaa.struct !15
  %102 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %18, ptr align 8 %102, i64 8, i1 false), !tbaa.struct !15
  %103 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  %104 = load ptr, ptr %103, align 8
  %105 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %18, i32 0, i32 0
  %106 = load ptr, ptr %105, align 8
  %107 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %104, ptr %106, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %108 unwind label %113

108:                                              ; preds = %100
  %109 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %107, ptr %109, align 8
  %110 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef @.str)
          to label %111 unwind label %113

111:                                              ; preds = %108
  %112 = zext i1 %110 to i8
  store i8 %112, ptr %9, align 1, !tbaa !13
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %117

113:                                              ; preds = %108, %100
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %11, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %422

117:                                              ; preds = %111, %95
  br label %405

118:                                              ; preds = %92
  %119 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %120 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %119) #7
  %121 = load i8, ptr %120, align 1, !tbaa !32
  %122 = sext i8 %121 to i32
  switch i32 %122, label %404 [
    i32 118, label %123
    i32 112, label %277
    i32 108, label %277
    i32 102, label %277
    i32 35, label %295
    i32 117, label %297
    i32 109, label %334
    i32 103, label %381
    i32 115, label %383
    i32 111, label %385
    i32 99, label %387
  ]

123:                                              ; preds = %118
  %124 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %124) #7
  %126 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %127 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #7
  %128 = load i8, ptr %127, align 1, !tbaa !32
  %129 = sext i8 %128 to i32
  %130 = icmp eq i32 %129, 32
  br i1 %130, label %137, label %131

131:                                              ; preds = %123
  %132 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %133 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %132) #7
  %134 = load i8, ptr %133, align 1, !tbaa !32
  %135 = sext i8 %134 to i32
  %136 = icmp eq i32 %135, 9
  br i1 %136, label %137, label %227

137:                                              ; preds = %131, %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %138 = invoke noundef i64 @_ZN6Assimp13ObjFileParser32getNumComponentsInDataDefinitionEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %139 unwind label %147

139:                                              ; preds = %137
  store i64 %138, ptr %20, align 8, !tbaa !11
  %140 = load i64, ptr %20, align 8, !tbaa !11
  %141 = icmp eq i64 %140, 3
  br i1 %141, label %142, label %151

142:                                              ; preds = %139
  %143 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %144 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %143) #7
  %145 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %144, i32 0, i32 6
  invoke void @_ZN6Assimp13ObjFileParser10getVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %45, ptr noundef nonnull align 8 dereferenceable(24) %145)
          to label %146 unwind label %147

146:                                              ; preds = %142
  br label %196

147:                                              ; preds = %186, %154, %142, %137
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %11, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %12, align 4
  br label %226

151:                                              ; preds = %139
  %152 = load i64, ptr %20, align 8, !tbaa !11
  %153 = icmp eq i64 %152, 4
  br i1 %153, label %154, label %159

154:                                              ; preds = %151
  %155 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %156 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %155) #7
  %157 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %156, i32 0, i32 6
  invoke void @_ZN6Assimp13ObjFileParser21getHomogeneousVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %45, ptr noundef nonnull align 8 dereferenceable(24) %157)
          to label %158 unwind label %147

158:                                              ; preds = %154
  br label %195

159:                                              ; preds = %151
  %160 = load i64, ptr %20, align 8, !tbaa !11
  %161 = icmp eq i64 %160, 6
  br i1 %161, label %162, label %194

162:                                              ; preds = %159
  %163 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %164 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %163) #7
  %165 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %164, i32 0, i32 8
  %166 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %165) #7
  %167 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %168 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %167) #7
  %169 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %168, i32 0, i32 6
  %170 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %169) #7
  %171 = icmp ult i64 %166, %170
  br i1 %171, label %172, label %186

172:                                              ; preds = %162
  %173 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %174 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %173) #7
  %175 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %174, i32 0, i32 8
  %176 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %177 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %176) #7
  %178 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %177, i32 0, i32 6
  %179 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %178) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %21) #7
  invoke void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %21, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %180 unwind label %182

180:                                              ; preds = %172
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EE6resizeEmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %175, i64 noundef %179, ptr noundef nonnull align 4 dereferenceable(12) %21)
          to label %181 unwind label %182

181:                                              ; preds = %180
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #7
  br label %186

182:                                              ; preds = %180, %172
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %11, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #7
  br label %226

186:                                              ; preds = %181, %162
  %187 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %188 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %187) #7
  %189 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %188, i32 0, i32 6
  %190 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %191 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %190) #7
  %192 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %191, i32 0, i32 8
  invoke void @_ZN6Assimp13ObjFileParser14getTwoVectors3ERSt6vectorI10aiVector3tIfESaIS3_EES6_(ptr noundef nonnull align 8 dereferenceable(4184) %45, ptr noundef nonnull align 8 dereferenceable(24) %189, ptr noundef nonnull align 8 dereferenceable(24) %192)
          to label %193 unwind label %147

193:                                              ; preds = %186
  br label %194

194:                                              ; preds = %193, %159
  br label %195

195:                                              ; preds = %194, %158
  br label %196

196:                                              ; preds = %195, %146
  %197 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %198 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %197) #7
  %199 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %198, i32 0, i32 8
  %200 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %199) #7
  br i1 %200, label %225, label %201

201:                                              ; preds = %196
  %202 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %203 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %202) #7
  %204 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %203, i32 0, i32 8
  %205 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %204) #7
  %206 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %207 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %206) #7
  %208 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %207, i32 0, i32 6
  %209 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %208) #7
  %210 = icmp ult i64 %205, %209
  br i1 %210, label %211, label %225

211:                                              ; preds = %201
  %212 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %213 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %212) #7
  %214 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %213, i32 0, i32 8
  %215 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %216 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %215) #7
  %217 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %216, i32 0, i32 6
  %218 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %217) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %22) #7
  invoke void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %22, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %219 unwind label %221

219:                                              ; preds = %211
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EE6resizeEmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %214, i64 noundef %218, ptr noundef nonnull align 4 dereferenceable(12) %22)
          to label %220 unwind label %221

220:                                              ; preds = %219
  call void @llvm.lifetime.end.p0(i64 12, ptr %22) #7
  br label %225

221:                                              ; preds = %219, %211
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %11, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %22) #7
  br label %226

225:                                              ; preds = %220, %201, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %276

226:                                              ; preds = %221, %182, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %422

227:                                              ; preds = %131
  %228 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %229 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %228) #7
  %230 = load i8, ptr %229, align 1, !tbaa !32
  %231 = sext i8 %230 to i32
  %232 = icmp eq i32 %231, 116
  br i1 %232, label %233, label %261

233:                                              ; preds = %227
  %234 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %235 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %234) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %236 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %237 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %236) #7
  %238 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %237, i32 0, i32 12
  %239 = invoke noundef i64 @_ZN6Assimp13ObjFileParser17getTexCoordVectorERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %45, ptr noundef nonnull align 8 dereferenceable(24) %238)
          to label %240 unwind label %252

240:                                              ; preds = %233
  store i64 %239, ptr %23, align 8, !tbaa !11
  %241 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %242 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %241) #7
  %243 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %242, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %244 = load i64, ptr %23, align 8, !tbaa !11
  %245 = trunc i64 %244 to i32
  store i32 %245, ptr %24, align 4, !tbaa !9
  %246 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %243, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %247 unwind label %256

247:                                              ; preds = %240
  %248 = load i32, ptr %246, align 4, !tbaa !9
  %249 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %250 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %249) #7
  %251 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %250, i32 0, i32 13
  store i32 %248, ptr %251, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %275

252:                                              ; preds = %233
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %11, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %12, align 4
  br label %260

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

260:                                              ; preds = %256, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %422

261:                                              ; preds = %227
  %262 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %263 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %262) #7
  %264 = load i8, ptr %263, align 1, !tbaa !32
  %265 = sext i8 %264 to i32
  %266 = icmp eq i32 %265, 110
  br i1 %266, label %267, label %274

267:                                              ; preds = %261
  %268 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %268) #7
  %270 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 2
  %271 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %270) #7
  %272 = getelementptr inbounds %"struct.Assimp::ObjFile::Model", ptr %271, i32 0, i32 7
  invoke void @_ZN6Assimp13ObjFileParser10getVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %45, ptr noundef nonnull align 8 dereferenceable(24) %272)
          to label %273 unwind label %88

273:                                              ; preds = %267
  br label %274

274:                                              ; preds = %273, %261
  br label %275

275:                                              ; preds = %274, %247
  br label %276

276:                                              ; preds = %275, %225
  br label %421

277:                                              ; preds = %118, %118, %118
  %278 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %279 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %278) #7
  %280 = load i8, ptr %279, align 1, !tbaa !32
  %281 = sext i8 %280 to i32
  %282 = icmp eq i32 %281, 102
  br i1 %282, label %283, label %284

283:                                              ; preds = %277
  br label %292

284:                                              ; preds = %277
  %285 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  %286 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %285) #7
  %287 = load i8, ptr %286, align 1, !tbaa !32
  %288 = sext i8 %287 to i32
  %289 = icmp eq i32 %288, 108
  %290 = zext i1 %289 to i64
  %291 = select i1 %289, i32 2, i32 1
  br label %292

292:                                              ; preds = %284, %283
  %293 = phi i32 [ 8, %283 ], [ %291, %284 ]
  invoke void @_ZN6Assimp13ObjFileParser7getFaceE15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(4184) %45, i32 noundef %293)
          to label %294 unwind label %88

294:                                              ; preds = %292
  br label %421

295:                                              ; preds = %118
  invoke void @_ZN6Assimp13ObjFileParser10getCommentEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %296 unwind label %88

296:                                              ; preds = %295
  br label %421

297:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  %298 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %26, ptr align 8 %298, i64 8, i1 false), !tbaa.struct !15
  %299 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 %299, i64 8, i1 false), !tbaa.struct !15
  %300 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %26, i32 0, i32 0
  %301 = load ptr, ptr %300, align 8
  %302 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %27, i32 0, i32 0
  %303 = load ptr, ptr %302, align 8
  %304 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %301, ptr %303, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %305 unwind label %314

305:                                              ; preds = %297
  %306 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %28, i32 0, i32 0
  store ptr %304, ptr %306, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %307 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32) %25, i8 noundef signext 32, i64 noundef 0) #7
  store i64 %307, ptr %29, align 8, !tbaa !11
  %308 = load i64, ptr %29, align 8, !tbaa !11
  %309 = icmp ne i64 %308, -1
  br i1 %309, label %310, label %322

310:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  %311 = load i64, ptr %29, align 8, !tbaa !11
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %25, i64 noundef 0, i64 noundef %311)
          to label %312 unwind label %318

312:                                              ; preds = %310
  %313 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %322

314:                                              ; preds = %297
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %11, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %12, align 4
  br label %333

318:                                              ; preds = %310
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %11, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  br label %332

322:                                              ; preds = %312, %305
  %323 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.1)
          to label %324 unwind label %327

324:                                              ; preds = %322
  br i1 %323, label %325, label %331

325:                                              ; preds = %324
  invoke void @_ZN6Assimp13ObjFileParser15getMaterialDescEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %326 unwind label %327

326:                                              ; preds = %325
  br label %331

327:                                              ; preds = %325, %322
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %11, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %12, align 4
  br label %332

331:                                              ; preds = %326, %324
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #7
  br label %421

332:                                              ; preds = %327, %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %333

333:                                              ; preds = %332, %314
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #7
  br label %422

334:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  %335 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %335, i64 8, i1 false), !tbaa.struct !15
  %336 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 8 %336, i64 8, i1 false), !tbaa.struct !15
  %337 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %32, i32 0, i32 0
  %338 = load ptr, ptr %337, align 8
  %339 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %33, i32 0, i32 0
  %340 = load ptr, ptr %339, align 8
  %341 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %338, ptr %340, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %342 unwind label %351

342:                                              ; preds = %334
  %343 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %34, i32 0, i32 0
  store ptr %341, ptr %343, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %344 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32) %31, i8 noundef signext 32, i64 noundef 0) #7
  store i64 %344, ptr %35, align 8, !tbaa !11
  %345 = load i64, ptr %35, align 8, !tbaa !11
  %346 = icmp ne i64 %345, -1
  br i1 %346, label %347, label %359

347:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #7
  %348 = load i64, ptr %35, align 8, !tbaa !11
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %31, i64 noundef 0, i64 noundef %348)
          to label %349 unwind label %355

349:                                              ; preds = %347
  %350 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  br label %359

351:                                              ; preds = %334
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %11, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %12, align 4
  br label %380

355:                                              ; preds = %347
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %11, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #7
  br label %379

359:                                              ; preds = %349, %342
  %360 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.2)
          to label %361 unwind label %364

361:                                              ; preds = %359
  br i1 %360, label %362, label %368

362:                                              ; preds = %361
  invoke void @_ZN6Assimp13ObjFileParser27getGroupNumberAndResolutionEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %363 unwind label %364

363:                                              ; preds = %362
  br label %375

364:                                              ; preds = %371, %368, %362, %359
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %11, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %12, align 4
  br label %379

368:                                              ; preds = %361
  %369 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.3)
          to label %370 unwind label %364

370:                                              ; preds = %368
  br i1 %369, label %371, label %373

371:                                              ; preds = %370
  invoke void @_ZN6Assimp13ObjFileParser14getMaterialLibEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %372 unwind label %364

372:                                              ; preds = %371
  br label %374

373:                                              ; preds = %370
  store i32 5, ptr %37, align 4
  br label %376

374:                                              ; preds = %372
  br label %375

375:                                              ; preds = %374, %363
  store i32 0, ptr %37, align 4
  br label %376

376:                                              ; preds = %375, %373
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  %377 = load i32, ptr %37, align 4
  switch i32 %377, label %430 [
    i32 0, label %378
    i32 5, label %405
  ]

378:                                              ; preds = %376
  br label %421

379:                                              ; preds = %364, %355
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %380

380:                                              ; preds = %379, %351
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #7
  br label %422

381:                                              ; preds = %118
  invoke void @_ZN6Assimp13ObjFileParser12getGroupNameEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %382 unwind label %88

382:                                              ; preds = %381
  br label %421

383:                                              ; preds = %118
  invoke void @_ZN6Assimp13ObjFileParser14getGroupNumberEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %384 unwind label %88

384:                                              ; preds = %383
  br label %421

385:                                              ; preds = %118
  invoke void @_ZN6Assimp13ObjFileParser13getObjectNameEv(ptr noundef nonnull align 8 dereferenceable(4184) %45)
          to label %386 unwind label %88

386:                                              ; preds = %385
  br label %421

387:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  %388 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %388, i64 8, i1 false), !tbaa.struct !15
  %389 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %389, i64 8, i1 false), !tbaa.struct !15
  %390 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %39, i32 0, i32 0
  %391 = load ptr, ptr %390, align 8
  %392 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %40, i32 0, i32 0
  %393 = load ptr, ptr %392, align 8
  %394 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %391, ptr %393, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %395 unwind label %400

395:                                              ; preds = %387
  %396 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %41, i32 0, i32 0
  store ptr %394, ptr %396, align 8
  %397 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef @.str.4)
          to label %398 unwind label %400

398:                                              ; preds = %395
  %399 = zext i1 %397 to i8
  store i8 %399, ptr %9, align 1, !tbaa !13
  store i32 5, ptr %37, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  br label %405

400:                                              ; preds = %395, %387
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %11, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #7
  br label %422

404:                                              ; preds = %118
  br label %405

405:                                              ; preds = %404, %398, %376, %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %406 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %406, i64 8, i1 false), !tbaa.struct !15
  %407 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %407, i64 8, i1 false), !tbaa.struct !15
  %408 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 3
  %409 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %43, i32 0, i32 0
  %410 = load ptr, ptr %409, align 8
  %411 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %44, i32 0, i32 0
  %412 = load ptr, ptr %411, align 8
  %413 = invoke ptr @_ZN6Assimp8skipLineIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_Rj(ptr %410, ptr %412, ptr noundef nonnull align 4 dereferenceable(4) %408)
          to label %414 unwind label %417

414:                                              ; preds = %405
  %415 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %42, i32 0, i32 0
  store ptr %413, ptr %415, align 8
  %416 = getelementptr inbounds %"class.Assimp::ObjFileParser", ptr %45, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %416, ptr align 8 %42, i64 8, i1 false), !tbaa.struct !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %421

417:                                              ; preds = %405
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %11, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %422

421:                                              ; preds = %414, %386, %384, %382, %378, %331, %296, %294, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %50, !llvm.loop !62

422:                                              ; preds = %417, %400, %380, %333, %260, %226, %113, %88
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %424

423:                                              ; preds = %53
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  ret void

424:                                              ; preds = %422, %84
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %425

425:                                              ; preds = %424
  %426 = load ptr, ptr %11, align 8
  %427 = load i32, ptr %12, align 4
  %428 = insertvalue { ptr, i32 } poison, ptr %426, 0
  %429 = insertvalue { ptr, i32 } %428, i32 %427, 1
  resume { ptr, i32 } %429

430:                                              ; preds = %376
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIcSaIcEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #0 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) #3

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp14IOStreamBufferIcE15getNextDataLineERSt6vectorIcSaIcEEc(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(24), i8 noundef signext) #5 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK6Assimp14IOStreamBufferIcE10getFilePosEv(ptr noundef nonnull align 8 dereferenceable(80)) #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)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr, ptr, ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) #6

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector.30" = type { %"struct.std::_Vector_base.31" }
%"struct.std::_Vector_base.31" = 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 }
%"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.aiVector3t = type { float, float, float }

@.str = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp13ObjFileParser9parseFileERNS_14IOStreamBufferIcEE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(80) %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector.30", align 8
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %class.aiVector3t, align 4
  %6 = alloca %class.aiVector3t, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = tail call noundef i64 @_ZNK6Assimp14IOStreamBufferIcE4sizeEv(ptr noundef nonnull align 8 dereferenceable(80) %1)
  %14 = trunc i64 %13 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #6
  call void @_ZNSt6vectorIcSaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = getelementptr inbounds i8, ptr %0, i64 4128
  %17 = getelementptr inbounds i8, ptr %0, i64 4144
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = getelementptr inbounds i8, ptr %0, i64 24
  br label %20

20:                                               ; preds = %.backedge, %2
  %.038 = phi i1 [ false, %2 ], [ %.038.be, %.backedge ]
  %.0 = phi i64 [ 0, %2 ], [ %.1, %.backedge ]
  %21 = invoke noundef zeroext i1 @_ZN6Assimp14IOStreamBufferIcE15getNextDataLineERSt6vectorIcSaIcEEc(ptr noundef nonnull align 8 dereferenceable(80) %1, ptr noundef nonnull align 8 dereferenceable(24) %3, i8 noundef signext 92)
          to label %22 unwind label %38

22:                                               ; preds = %20
  br i1 %21, label %23, label %209

23:                                               ; preds = %22
  %24 = call ptr @_ZNSt6vectorIcSaIcEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  store ptr %24, ptr %0, align 8, !tbaa !5
  %25 = call ptr @_ZNSt6vectorIcSaIcEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  store ptr %25, ptr %15, align 8, !tbaa !5
  %26 = call noundef i64 @_ZNKSt6vectorIcSaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %27 = add i64 %26, -1
  %28 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %27) #6
  %29 = getelementptr inbounds i8, ptr %28, i64 1
  store ptr %29, ptr %16, align 8, !tbaa !9
  %30 = call noundef i64 @_ZNK6Assimp14IOStreamBufferIcE10getFilePosEv(ptr noundef nonnull align 8 dereferenceable(80) %1)
  %31 = icmp ult i64 %.0, %30
  br i1 %31, label %32, label %42

32:                                               ; preds = %23
  %33 = trunc i64 %30 to i32
  %34 = load ptr, ptr %17, align 8, !tbaa !22
  %35 = load ptr, ptr %34, align 8, !tbaa !23
  %36 = getelementptr inbounds i8, ptr %35, i64 24
  %37 = load ptr, ptr %36, align 8
  invoke void %37(ptr noundef nonnull align 8 dereferenceable(8) %34, i32 noundef %33, i32 noundef %14)
          to label %42 unwind label %40

38:                                               ; preds = %20
  %39 = landingpad { ptr, i32 }
          cleanup
  br label %210

40:                                               ; preds = %197, %196, %195, %155, %153, %140, %32
  %41 = landingpad { ptr, i32 }
          cleanup
  br label %210

42:                                               ; preds = %32, %23
  %.1 = phi i64 [ %30, %32 ], [ %.0, %23 ]
  %43 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %44 = load i8, ptr %43, align 1, !tbaa !25
  br i1 %.038, label %45, label %53

45:                                               ; preds = %42
  %cond = icmp eq i8 %44, 101
  br i1 %cond, label %46, label %204

46:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  %.sroa.022.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.021.0.copyload = load ptr, ptr %15, align 8, !tbaa !5
  %47 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %.sroa.022.0.copyload, ptr %.sroa.021.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %48 unwind label %51

48:                                               ; preds = %46
  %49 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str)
          to label %50 unwind label %51

50:                                               ; preds = %48
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %204

51:                                               ; preds = %48, %46
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %210

53:                                               ; preds = %42
  switch i8 %44, label %204 [
    i8 118, label %54
    i8 112, label %144
    i8 108, label %144
    i8 102, label %144
    i8 35, label %155
    i8 117, label %156
    i8 109, label %174
    i8 103, label %195
    i8 115, label %196
    i8 111, label %197
    i8 99, label %198
  ]

54:                                               ; preds = %53
  %55 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %56 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %57 = load i8, ptr %56, align 1, !tbaa !25
  %58 = icmp eq i8 %57, 32
  br i1 %58, label %63, label %59

59:                                               ; preds = %54
  %60 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %61 = load i8, ptr %60, align 1, !tbaa !25
  %62 = icmp eq i8 %61, 9
  br i1 %62, label %63, label %117

63:                                               ; preds = %59, %54
  %64 = invoke noundef i64 @_ZN6Assimp13ObjFileParser32getNumComponentsInDataDefinitionEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %65 unwind label %69

65:                                               ; preds = %63
  switch i64 %64, label %96 [
    i64 3, label %66
    i64 4, label %71
    i64 6, label %74
  ]

66:                                               ; preds = %65
  %67 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %68 = getelementptr inbounds i8, ptr %67, i64 104
  invoke void @_ZN6Assimp13ObjFileParser10getVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(24) %68)
          to label %96 unwind label %69

69:                                               ; preds = %91, %71, %66, %63
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %210

71:                                               ; preds = %65
  %72 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %73 = getelementptr inbounds i8, ptr %72, i64 104
  invoke void @_ZN6Assimp13ObjFileParser21getHomogeneousVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(24) %73)
          to label %96 unwind label %69

74:                                               ; preds = %65
  %75 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %76 = getelementptr inbounds i8, ptr %75, i64 152
  %77 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #6
  %78 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %79 = getelementptr inbounds i8, ptr %78, i64 104
  %80 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %79) #6
  %81 = icmp ult i64 %77, %80
  br i1 %81, label %82, label %91

82:                                               ; preds = %74
  %83 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %84 = getelementptr inbounds i8, ptr %83, i64 152
  %85 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %86 = getelementptr inbounds i8, ptr %85, i64 104
  %87 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %86) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %5) #6
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %5, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EE6resizeEmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %87, ptr noundef nonnull align 4 dereferenceable(12) %5)
          to label %88 unwind label %89

88:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #6
  br label %91

89:                                               ; preds = %82
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #6
  br label %210

91:                                               ; preds = %88, %74
  %92 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %93 = getelementptr inbounds i8, ptr %92, i64 104
  %94 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %95 = getelementptr inbounds i8, ptr %94, i64 152
  invoke void @_ZN6Assimp13ObjFileParser14getTwoVectors3ERSt6vectorI10aiVector3tIfESaIS3_EES6_(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 8 dereferenceable(24) %95)
          to label %96 unwind label %69

96:                                               ; preds = %65, %71, %91, %66
  %97 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %98 = getelementptr inbounds i8, ptr %97, i64 152
  %99 = call noundef zeroext i1 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %98) #6
  br i1 %99, label %.backedge, label %100

100:                                              ; preds = %96
  %101 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %102 = getelementptr inbounds i8, ptr %101, i64 152
  %103 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %102) #6
  %104 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %105 = getelementptr inbounds i8, ptr %104, i64 104
  %106 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #6
  %107 = icmp ult i64 %103, %106
  br i1 %107, label %108, label %.backedge

108:                                              ; preds = %100
  %109 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %110 = getelementptr inbounds i8, ptr %109, i64 152
  %111 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %112 = getelementptr inbounds i8, ptr %111, i64 104
  %113 = call noundef i64 @_ZNKSt6vectorI10aiVector3tIfESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %112) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #6
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %6, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EE6resizeEmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %110, i64 noundef %113, ptr noundef nonnull align 4 dereferenceable(12) %6)
          to label %114 unwind label %115

114:                                              ; preds = %108
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #6
  br label %.backedge

115:                                              ; preds = %108
  %116 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #6
  br label %210

117:                                              ; preds = %59
  %118 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %119 = load i8, ptr %118, align 1, !tbaa !25
  %120 = icmp eq i8 %119, 116
  br i1 %120, label %121, label %136

121:                                              ; preds = %117
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %123 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %124 = getelementptr inbounds i8, ptr %123, i64 264
  %125 = invoke noundef i64 @_ZN6Assimp13ObjFileParser17getTexCoordVectorERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(24) %124)
          to label %126 unwind label %134

126:                                              ; preds = %121
  %127 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %128 = getelementptr inbounds i8, ptr %127, i64 288
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %129 = trunc i64 %125 to i32
  store i32 %129, ptr %7, align 4, !tbaa !26
  %130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %128, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %131 = load i32, ptr %130, align 4, !tbaa !26
  %132 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %133 = getelementptr inbounds i8, ptr %132, i64 288
  store i32 %131, ptr %133, align 8, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  br label %.backedge

134:                                              ; preds = %121
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %210

136:                                              ; preds = %117
  %137 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %138 = load i8, ptr %137, align 1, !tbaa !25
  %139 = icmp eq i8 %138, 110
  br i1 %139, label %140, label %.backedge

140:                                              ; preds = %136
  %141 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %142 = call noundef ptr @_ZNKSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #6
  %143 = getelementptr inbounds i8, ptr %142, i64 128
  invoke void @_ZN6Assimp13ObjFileParser10getVector3ERSt6vectorI10aiVector3tIfESaIS3_EE(ptr noundef nonnull align 8 dereferenceable(4184) %0, ptr noundef nonnull align 8 dereferenceable(24) %143)
          to label %.backedge unwind label %40

144:                                              ; preds = %53, %53, %53
  %145 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %146 = load i8, ptr %145, align 1, !tbaa !25
  %147 = icmp eq i8 %146, 102
  br i1 %147, label %153, label %148

148:                                              ; preds = %144
  %149 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %0) #6
  %150 = load i8, ptr %149, align 1, !tbaa !25
  %151 = icmp eq i8 %150, 108
  %152 = select i1 %151, i32 2, i32 1
  br label %153

153:                                              ; preds = %144, %148
  %154 = phi i32 [ %152, %148 ], [ 8, %144 ]
  invoke void @_ZN6Assimp13ObjFileParser7getFaceE15aiPrimitiveType(ptr noundef nonnull align 8 dereferenceable(4184) %0, i32 noundef %154)
          to label %.backedge unwind label %40

155:                                              ; preds = %53
  invoke void @_ZN6Assimp13ObjFileParser10getCommentEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.backedge unwind label %40

156:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  %.sroa.015.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.014.0.copyload = load ptr, ptr %15, align 8, !tbaa !5
  %157 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %.sroa.015.0.copyload, ptr %.sroa.014.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %158 unwind label %163

158:                                              ; preds = %156
  %159 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32) %8, i8 noundef signext 32, i64 noundef 0) #6
  %.not57 = icmp eq i64 %159, -1
  br i1 %.not57, label %167, label %160

160:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %8, i64 noundef 0, i64 noundef %159)
          to label %161 unwind label %165

161:                                              ; preds = %160
  %162 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %167

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

165:                                              ; preds = %160
  %166 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %173

167:                                              ; preds = %161, %158
  %168 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.1)
  br i1 %168, label %169, label %172

169:                                              ; preds = %167
  invoke void @_ZN6Assimp13ObjFileParser15getMaterialDescEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %172 unwind label %170

170:                                              ; preds = %169
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %173

172:                                              ; preds = %169, %167
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %.backedge

173:                                              ; preds = %165, %170, %163
  %.pn58.pn = phi { ptr, i32 } [ %164, %163 ], [ %171, %170 ], [ %166, %165 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %210

174:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  %.sroa.010.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.09.0.copyload = load ptr, ptr %15, align 8, !tbaa !5
  %175 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %.sroa.010.0.copyload, ptr %.sroa.09.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %176 unwind label %181

176:                                              ; preds = %174
  %177 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32) %10, i8 noundef signext 32, i64 noundef 0) #6
  %.not = icmp eq i64 %177, -1
  br i1 %.not, label %185, label %178

178:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %10, i64 noundef 0, i64 noundef %177)
          to label %179 unwind label %183

179:                                              ; preds = %178
  %180 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %185

181:                                              ; preds = %174
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %194

183:                                              ; preds = %178
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %194

185:                                              ; preds = %179, %176
  %186 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.2)
  br i1 %186, label %187, label %190

187:                                              ; preds = %185
  invoke void @_ZN6Assimp13ObjFileParser27getGroupNumberAndResolutionEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.thread unwind label %188

188:                                              ; preds = %192, %187
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %194

190:                                              ; preds = %185
  %191 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.3)
  br i1 %191, label %192, label %193

192:                                              ; preds = %190
  invoke void @_ZN6Assimp13ObjFileParser14getMaterialLibEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.thread unwind label %188

.thread:                                          ; preds = %192, %187
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %.backedge

.backedge:                                        ; preds = %.thread, %96, %100, %114, %197, %196, %195, %155, %153, %136, %140, %126, %206, %172
  %.038.be = phi i1 [ %.139, %206 ], [ false, %197 ], [ false, %196 ], [ false, %195 ], [ false, %172 ], [ false, %155 ], [ false, %153 ], [ false, %126 ], [ false, %140 ], [ false, %136 ], [ false, %114 ], [ false, %100 ], [ false, %96 ], [ false, %.thread ]
  br label %20, !llvm.loop !56

193:                                              ; preds = %190
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %204

194:                                              ; preds = %183, %188, %181
  %.pn.pn = phi { ptr, i32 } [ %182, %181 ], [ %189, %188 ], [ %184, %183 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %210

195:                                              ; preds = %53
  invoke void @_ZN6Assimp13ObjFileParser12getGroupNameEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.backedge unwind label %40

196:                                              ; preds = %53
  invoke void @_ZN6Assimp13ObjFileParser14getGroupNumberEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.backedge unwind label %40

197:                                              ; preds = %53
  invoke void @_ZN6Assimp13ObjFileParser13getObjectNameEv(ptr noundef nonnull align 8 dereferenceable(4184) %0)
          to label %.backedge unwind label %40

198:                                              ; preds = %53
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  %.sroa.05.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.04.0.copyload = load ptr, ptr %15, align 8, !tbaa !5
  %199 = invoke ptr @_ZN6Assimp14getNameNoSpaceIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEET_S8_S8_RNSt7__cxx1112basic_stringIcSt11char_traitsIcES5_EE(ptr %.sroa.05.0.copyload, ptr %.sroa.04.0.copyload, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %200 unwind label %202

200:                                              ; preds = %198
  %201 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.4)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %204

202:                                              ; preds = %198
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %210

204:                                              ; preds = %193, %53, %50, %45, %200
  %.139 = phi i1 [ %49, %50 ], [ true, %45 ], [ false, %53 ], [ %201, %200 ], [ false, %193 ]
  %.sroa.01.0.copyload = load ptr, ptr %0, align 8, !tbaa !5
  %.sroa.0.0.copyload = load ptr, ptr %15, align 8, !tbaa !5
  %205 = invoke 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) %19)
          to label %206 unwind label %207

206:                                              ; preds = %204
  store ptr %205, ptr %0, align 8, !tbaa !5
  br label %.backedge

207:                                              ; preds = %204
  %208 = landingpad { ptr, i32 }
          cleanup
  br label %210

209:                                              ; preds = %22
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  ret void

210:                                              ; preds = %40, %51, %134, %173, %194, %202, %207, %115, %89, %69, %38
  %.pn63.pn = phi { ptr, i32 } [ %39, %38 ], [ %208, %207 ], [ %52, %51 ], [ %203, %202 ], [ %41, %40 ], [ %.pn.pn, %194 ], [ %.pn58.pn, %173 ], [ %135, %134 ], [ %116, %115 ], [ %70, %69 ], [ %90, %89 ]
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn63.pn
}

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK6Assimp14IOStreamBufferIcE4sizeEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp14IOStreamBufferIcE15getNextDataLineERSt6vectorIcSaIcEEc(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(24), i8 noundef signext) local_unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK6Assimp14IOStreamBufferIcE10getFilePosEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #3 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 #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

; 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 #0 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp13ObjFileParser14getTwoVectors3ERSt6vectorI10aiVector3tIfESaIS3_EES6_(ptr noundef nonnull align 8 dereferenceable(4184), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 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 #0 align 2

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

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

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

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

; Function Attrs: nounwind
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 #5 = { 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 #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 = !{!10, !6, i64 4128}
!10 = !{!"_ZTSN6Assimp13ObjFileParserE", !11, i64 0, !11, i64 8, !12, i64 16, !18, i64 24, !7, i64 28, !6, i64 4128, !6, i64 4136, !6, i64 4144, !19, i64 4152}
!11 = !{!"_ZTSN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEE", !6, i64 0}
!12 = !{!"_ZTSSt10unique_ptrIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EE", !13, i64 0}
!13 = !{!"_ZTSSt15__uniq_ptr_dataIN6Assimp7ObjFile5ModelESt14default_deleteIS2_ELb1ELb1EE", !14, i64 0}
!14 = !{!"_ZTSSt15__uniq_ptr_implIN6Assimp7ObjFile5ModelESt14default_deleteIS2_EE", !15, i64 0}
!15 = !{!"_ZTSSt5tupleIJPN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEE", !16, i64 0}
!16 = !{!"_ZTSSt11_Tuple_implILm0EJPN6Assimp7ObjFile5ModelESt14default_deleteIS2_EEE", !17, i64 0}
!17 = !{!"_ZTSSt10_Head_baseILm0EPN6Assimp7ObjFile5ModelELb0EE", !6, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !20, i64 0, !21, i64 8, !7, i64 16}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = !{!10, !6, i64 4144}
!23 = !{!24, !24, i64 0}
!24 = !{!"vtable pointer", !8, i64 0}
!25 = !{!7, !7, i64 0}
!26 = !{!18, !18, i64 0}
!27 = !{!28, !18, i64 288}
!28 = !{!"_ZTSN6Assimp7ObjFile5ModelE", !19, i64 0, !29, i64 32, !6, i64 56, !6, i64 64, !6, i64 72, !33, i64 80, !37, i64 104, !37, i64 128, !37, i64 152, !41, i64 176, !6, i64 224, !19, i64 232, !37, i64 264, !18, i64 288, !6, i64 296, !49, i64 304, !53, i64 328}
!29 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile6ObjectESaIS3_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile6ObjectESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!"_ZTSSt6vectorI10aiVector3tIfESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseI10aiVector3tIfESaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseI10aiVector3tIfESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!41 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt6vectorIjSaIjEESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !42, i64 0}
!42 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !43, i64 0}
!43 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PSt6vectorIjSaIjEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !44, i64 0, !46, i64 8}
!44 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !45, i64 0}
!45 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!46 = !{!"_ZTSSt15_Rb_tree_header", !47, i64 0, !21, i64 32}
!47 = !{!"_ZTSSt18_Rb_tree_node_base", !48, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!48 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!49 = !{!"_ZTSSt6vectorIPN6Assimp7ObjFile4MeshESaIS3_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp7ObjFile4MeshESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN6Assimp7ObjFile8MaterialESt4lessIS5_ESaISt4pairIKS5_S9_EEE", !54, i64 0}
!54 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE", !55, i64 0}
!55 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN6Assimp7ObjFile8MaterialEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEE", !44, i64 0, !46, i64 8}
!56 = distinct !{!56, !57}
!57 = !{!"llvm.loop.mustprogress"}


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