; LLVM IR from Devaniti/BoolkaEngine :: ThirdParty/tinyobjloader (tiny_obj_loader)

; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_stringstream" = type { %"class.std::basic_iostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_iostream.base" = type { %"class.std::basic_istream.base", %"class.std::basic_ostream.base" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.41" = type { %"struct.std::_Vector_base.42" }
%"struct.std::_Vector_base.42" = type { %"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::PrimGroup" = type { %"class.std::vector.46", %"class.std::vector.51", %"class.std::vector.56" }
%"class.std::vector.46" = type { %"struct.std::_Vector_base.47" }
%"struct.std::_Vector_base.47" = type { %"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.51" = type { %"struct.std::_Vector_base.52" }
%"struct.std::_Vector_base.52" = type { %"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.3" = type { %"class.std::_Rb_tree.4" }
%"class.std::_Rb_tree.4" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, 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>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, 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 }
%"struct.tinyobj::shape_t" = type { %"class.std::__cxx11::basic_string", %"struct.tinyobj::mesh_t", %"struct.tinyobj::lines_t", %"struct.tinyobj::points_t" }
%"struct.tinyobj::mesh_t" = type { %"class.std::vector.61", %"class.std::vector.66", %"class.std::vector.71", %"class.std::vector.76", %"class.std::vector.41" }
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.71" = type { %"struct.std::_Vector_base.72" }
%"struct.std::_Vector_base.72" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.76" = type { %"struct.std::_Vector_base.77" }
%"struct.std::_Vector_base.77" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::lines_t" = type { %"class.std::vector.61", %"class.std::vector.71" }
%"struct.tinyobj::points_t" = type { %"class.std::vector.61" }
%"struct.tinyobj::skin_weight_t" = type { i32, %"class.std::vector.81" }
%"class.std::vector.81" = type { %"struct.std::_Vector_base.82" }
%"struct.std::_Vector_base.82" = type { %"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::joint_and_weight_t" = type { i32, float }
%"struct.tinyobj::__line_t" = type { %"class.std::vector.86" }
%"class.std::vector.86" = type { %"struct.std::_Vector_base.87" }
%"struct.std::_Vector_base.87" = type { %"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::vertex_index_t" = type { i32, i32, i32 }
%"struct.tinyobj::__points_t" = type { %"class.std::vector.86" }
%"struct.tinyobj::face_t" = type { i32, i32, %"class.std::vector.86" }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = 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::allocator" = type { i8 }
%"struct.tinyobj::tag_t" = type { %"class.std::__cxx11::basic_string", %"class.std::vector.71", %"class.std::vector.26", %"class.std::vector.20" }
%"struct.tinyobj::tag_sizes" = type { i32, i32, i32 }
%"struct.std::pair.91" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"struct.tinyobj::attrib_t" = type { %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.26", %"class.std::vector.31" }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [1 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb = external hidden unnamed_addr constant [161 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strspn(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef, double noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef) #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) #3

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #5 align 2

declare noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16)) #6

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) #5 align 2

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #7

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i1 noundef zeroext %7, i1 noundef zeroext %8) #5 personality ptr @__gxx_personality_v0 {
  %10 = alloca i1, align 1
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %21 = alloca %"class.std::vector.26", align 8
  %22 = alloca %"class.std::vector.26", align 8
  %23 = alloca %"class.std::vector.26", align 8
  %24 = alloca %"class.std::vector.26", align 8
  %25 = alloca %"class.std::vector.31", align 8
  %26 = alloca %"class.std::vector.41", align 8
  %27 = alloca %"struct.tinyobj::PrimGroup", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::map.3", align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"struct.tinyobj::shape_t", align 8
  %36 = alloca i8, align 1
  %37 = alloca i64, align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca i32, align 4
  %55 = alloca %"struct.tinyobj::skin_weight_t", align 8
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"struct.tinyobj::joint_and_weight_t", align 4
  %61 = alloca i64, align 8
  %62 = alloca %"struct.tinyobj::__line_t", align 8
  %63 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %64 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca i64, align 8
  %67 = alloca %"struct.tinyobj::__points_t", align 8
  %68 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %69 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca i64, align 8
  %72 = alloca %"struct.tinyobj::face_t", align 8
  %73 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %74 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca i64, align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca i32, align 4
  %79 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %80 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %81 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %82 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::vector.20", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::allocator", align 1
  %88 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca i8, align 1
  %91 = alloca i64, align 8
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca i8, align 1
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::allocator", align 1
  %97 = alloca i8, align 1
  %98 = alloca %"struct.tinyobj::shape_t", align 8
  %99 = alloca %"class.std::vector.20", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %104 = alloca i64, align 8
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca i8, align 1
  %107 = alloca %"struct.tinyobj::shape_t", align 8
  %108 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca i32, align 4
  %111 = alloca %"struct.tinyobj::tag_t", align 8
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"struct.tinyobj::tag_sizes", align 4
  %114 = alloca { i64, i32 }, align 8
  %115 = alloca i64, align 8
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  %119 = alloca i32, align 4
  %120 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %123 = alloca %"class.std::__cxx11::basic_string", align 8
  %124 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %125 = alloca %"class.std::__cxx11::basic_string", align 8
  %126 = alloca i8, align 1
  %127 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  %128 = zext i1 %7 to i8
  store i8 %128, ptr %18, align 1, !tbaa !9
  %129 = zext i1 %8 to i8
  store i8 %129, ptr %19, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 392, ptr %20) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %20)
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.start.p0(i64 72, ptr %27) #10
  call void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %27) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %29) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %29) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  store i32 -1, ptr %30, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store i32 0, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  store i32 -1, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  store i32 -1, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  store i32 -1, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 224, ptr %35) #10
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %35) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #10
  store i8 1, ptr %36, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  store i64 0, ptr %37, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  br label %130

130:                                              ; preds = %1549, %1547, %180, %9
  %131 = load ptr, ptr %16, align 8, !tbaa !5
  %132 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %131)
          to label %133 unwind label %156

133:                                              ; preds = %130
  %134 = icmp ne i32 %132, -1
  br i1 %134, label %135, label %1551

135:                                              ; preds = %133
  %136 = load ptr, ptr %16, align 8, !tbaa !5
  %137 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %136, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %138 unwind label %156

138:                                              ; preds = %135
  %139 = load i64, ptr %37, align 8, !tbaa !13
  %140 = add i64 %139, 1
  store i64 %140, ptr %37, align 8, !tbaa !13
  %141 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %142 = icmp ugt i64 %141, 0
  br i1 %142, label %143, label %161

143:                                              ; preds = %138
  %144 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %145 = sub i64 %144, 1
  %146 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %38, i64 noundef %145)
          to label %147 unwind label %156

147:                                              ; preds = %143
  %148 = load i8, ptr %146, align 1, !tbaa !15
  %149 = sext i8 %148 to i32
  %150 = icmp eq i32 %149, 10
  br i1 %150, label %151, label %160

151:                                              ; preds = %147
  %152 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %153 = sub i64 %152, 1
  %154 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %38, i64 noundef %153, i64 noundef -1)
          to label %155 unwind label %156

155:                                              ; preds = %151
  br label %160

156:                                              ; preds = %172, %164, %151, %143, %135, %130
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %39, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %40, align 4
  br label %1750

160:                                              ; preds = %155, %147
  br label %161

161:                                              ; preds = %160, %138
  %162 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %163 = icmp ugt i64 %162, 0
  br i1 %163, label %164, label %178

164:                                              ; preds = %161
  %165 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %166 = sub i64 %165, 1
  %167 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %38, i64 noundef %166)
          to label %168 unwind label %156

168:                                              ; preds = %164
  %169 = load i8, ptr %167, align 1, !tbaa !15
  %170 = sext i8 %169 to i32
  %171 = icmp eq i32 %170, 13
  br i1 %171, label %172, label %177

172:                                              ; preds = %168
  %173 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  %174 = sub i64 %173, 1
  %175 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %38, i64 noundef %174, i64 noundef -1)
          to label %176 unwind label %156

176:                                              ; preds = %172
  br label %177

177:                                              ; preds = %176, %168
  br label %178

178:                                              ; preds = %177, %161
  %179 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  br i1 %179, label %180, label %181

180:                                              ; preds = %178
  br label %130, !llvm.loop !16

181:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %182 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  store ptr %182, ptr %41, align 8, !tbaa !5
  %183 = load ptr, ptr %41, align 8, !tbaa !5
  %184 = call i64 @strspn(ptr noundef %183, ptr noundef @.str) #11
  %185 = load ptr, ptr %41, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %185, i64 %184
  store ptr %186, ptr %41, align 8, !tbaa !5
  %187 = load ptr, ptr %41, align 8, !tbaa !5
  %188 = icmp ne ptr %187, null
  br i1 %188, label %189, label %190

189:                                              ; preds = %181
  br label %192

190:                                              ; preds = %181
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.16, i32 noundef 2571, ptr noundef @__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb) #12
  unreachable

191:                                              ; No predecessors!
  br label %192

192:                                              ; preds = %191, %189
  %193 = load ptr, ptr %41, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i64 0
  %195 = load i8, ptr %194, align 1, !tbaa !15
  %196 = sext i8 %195 to i32
  %197 = icmp eq i32 %196, 0
  br i1 %197, label %198, label %199

198:                                              ; preds = %192
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

199:                                              ; preds = %192
  %200 = load ptr, ptr %41, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 0
  %202 = load i8, ptr %201, align 1, !tbaa !15
  %203 = sext i8 %202 to i32
  %204 = icmp eq i32 %203, 35
  br i1 %204, label %205, label %206

205:                                              ; preds = %199
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

206:                                              ; preds = %199
  %207 = load ptr, ptr %41, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %207, i64 0
  %209 = load i8, ptr %208, align 1, !tbaa !15
  %210 = sext i8 %209 to i32
  %211 = icmp eq i32 %210, 118
  br i1 %211, label %212, label %253

212:                                              ; preds = %206
  %213 = load ptr, ptr %41, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i64 1
  %215 = load i8, ptr %214, align 1, !tbaa !15
  %216 = sext i8 %215 to i32
  %217 = icmp eq i32 %216, 32
  br i1 %217, label %224, label %218

218:                                              ; preds = %212
  %219 = load ptr, ptr %41, align 8, !tbaa !5
  %220 = getelementptr inbounds i8, ptr %219, i64 1
  %221 = load i8, ptr %220, align 1, !tbaa !15
  %222 = sext i8 %221 to i32
  %223 = icmp eq i32 %222, 9
  br i1 %223, label %224, label %253

224:                                              ; preds = %218, %212
  %225 = load ptr, ptr %41, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i64 2
  store ptr %226, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #10
  %227 = invoke noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef %43, ptr noundef %44, ptr noundef %45, ptr noundef %46, ptr noundef %47, ptr noundef %48, ptr noundef %41, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %228 unwind label %248

228:                                              ; preds = %224
  %229 = zext i1 %227 to i32
  %230 = load i8, ptr %36, align 1, !tbaa !9, !range !18, !noundef !19
  %231 = trunc i8 %230 to i1
  %232 = zext i1 %231 to i32
  %233 = and i32 %232, %229
  %234 = icmp ne i32 %233, 0
  %235 = zext i1 %234 to i8
  store i8 %235, ptr %36, align 1, !tbaa !9
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %236 unwind label %248

236:                                              ; preds = %228
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %237 unwind label %248

237:                                              ; preds = %236
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %238 unwind label %248

238:                                              ; preds = %237
  %239 = load i8, ptr %36, align 1, !tbaa !9, !range !18, !noundef !19
  %240 = trunc i8 %239 to i1
  br i1 %240, label %244, label %241

241:                                              ; preds = %238
  %242 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %243 = trunc i8 %242 to i1
  br i1 %243, label %244, label %252

244:                                              ; preds = %241, %238
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %245 unwind label %248

245:                                              ; preds = %244
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %246 unwind label %248

246:                                              ; preds = %245
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %247 unwind label %248

247:                                              ; preds = %246
  br label %252

248:                                              ; preds = %246, %245, %244, %237, %236, %228, %224
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %39, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %1550

252:                                              ; preds = %247, %241
  store i32 2, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %1547

253:                                              ; preds = %218, %206
  %254 = load ptr, ptr %41, align 8, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %254, i64 0
  %256 = load i8, ptr %255, align 1, !tbaa !15
  %257 = sext i8 %256 to i32
  %258 = icmp eq i32 %257, 118
  br i1 %258, label %259, label %288

259:                                              ; preds = %253
  %260 = load ptr, ptr %41, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i64 1
  %262 = load i8, ptr %261, align 1, !tbaa !15
  %263 = sext i8 %262 to i32
  %264 = icmp eq i32 %263, 110
  br i1 %264, label %265, label %288

265:                                              ; preds = %259
  %266 = load ptr, ptr %41, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 2
  %268 = load i8, ptr %267, align 1, !tbaa !15
  %269 = sext i8 %268 to i32
  %270 = icmp eq i32 %269, 32
  br i1 %270, label %277, label %271

271:                                              ; preds = %265
  %272 = load ptr, ptr %41, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i64 2
  %274 = load i8, ptr %273, align 1, !tbaa !15
  %275 = sext i8 %274 to i32
  %276 = icmp eq i32 %275, 9
  br i1 %276, label %277, label %288

277:                                              ; preds = %271, %265
  %278 = load ptr, ptr %41, align 8, !tbaa !5
  %279 = getelementptr inbounds i8, ptr %278, i64 3
  store ptr %279, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %49, ptr noundef %50, ptr noundef %51, ptr noundef %41, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %280 unwind label %284

280:                                              ; preds = %277
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %281 unwind label %284

281:                                              ; preds = %280
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %282 unwind label %284

282:                                              ; preds = %281
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %283 unwind label %284

283:                                              ; preds = %282
  store i32 2, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  br label %1547

284:                                              ; preds = %282, %281, %280, %277
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %39, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  br label %1550

288:                                              ; preds = %271, %259, %253
  %289 = load ptr, ptr %41, align 8, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %289, i64 0
  %291 = load i8, ptr %290, align 1, !tbaa !15
  %292 = sext i8 %291 to i32
  %293 = icmp eq i32 %292, 118
  br i1 %293, label %294, label %322

294:                                              ; preds = %288
  %295 = load ptr, ptr %41, align 8, !tbaa !5
  %296 = getelementptr inbounds i8, ptr %295, i64 1
  %297 = load i8, ptr %296, align 1, !tbaa !15
  %298 = sext i8 %297 to i32
  %299 = icmp eq i32 %298, 116
  br i1 %299, label %300, label %322

300:                                              ; preds = %294
  %301 = load ptr, ptr %41, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %301, i64 2
  %303 = load i8, ptr %302, align 1, !tbaa !15
  %304 = sext i8 %303 to i32
  %305 = icmp eq i32 %304, 32
  br i1 %305, label %312, label %306

306:                                              ; preds = %300
  %307 = load ptr, ptr %41, align 8, !tbaa !5
  %308 = getelementptr inbounds i8, ptr %307, i64 2
  %309 = load i8, ptr %308, align 1, !tbaa !15
  %310 = sext i8 %309 to i32
  %311 = icmp eq i32 %310, 9
  br i1 %311, label %312, label %322

312:                                              ; preds = %306, %300
  %313 = load ptr, ptr %41, align 8, !tbaa !5
  %314 = getelementptr inbounds i8, ptr %313, i64 3
  store ptr %314, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef %52, ptr noundef %53, ptr noundef %41, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %315 unwind label %318

315:                                              ; preds = %312
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %316 unwind label %318

316:                                              ; preds = %315
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %53)
          to label %317 unwind label %318

317:                                              ; preds = %316
  store i32 2, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  br label %1547

318:                                              ; preds = %316, %315, %312
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %39, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  br label %1550

322:                                              ; preds = %306, %294, %288
  %323 = load ptr, ptr %41, align 8, !tbaa !5
  %324 = getelementptr inbounds i8, ptr %323, i64 0
  %325 = load i8, ptr %324, align 1, !tbaa !15
  %326 = sext i8 %325 to i32
  %327 = icmp eq i32 %326, 118
  br i1 %327, label %328, label %456

328:                                              ; preds = %322
  %329 = load ptr, ptr %41, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %329, i64 1
  %331 = load i8, ptr %330, align 1, !tbaa !15
  %332 = sext i8 %331 to i32
  %333 = icmp eq i32 %332, 119
  br i1 %333, label %334, label %456

334:                                              ; preds = %328
  %335 = load ptr, ptr %41, align 8, !tbaa !5
  %336 = getelementptr inbounds i8, ptr %335, i64 2
  %337 = load i8, ptr %336, align 1, !tbaa !15
  %338 = sext i8 %337 to i32
  %339 = icmp eq i32 %338, 32
  br i1 %339, label %346, label %340

340:                                              ; preds = %334
  %341 = load ptr, ptr %41, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i64 2
  %343 = load i8, ptr %342, align 1, !tbaa !15
  %344 = sext i8 %343 to i32
  %345 = icmp eq i32 %344, 9
  br i1 %345, label %346, label %456

346:                                              ; preds = %340, %334
  %347 = load ptr, ptr %41, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %347, i64 3
  store ptr %348, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  store i32 0, ptr %54, align 4, !tbaa !11
  %349 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %41)
          to label %350 unwind label %396

350:                                              ; preds = %346
  store i32 %349, ptr %54, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #10
  call void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #10
  %351 = load i32, ptr %54, align 4, !tbaa !11
  %352 = getelementptr inbounds %"struct.tinyobj::skin_weight_t", ptr %55, i32 0, i32 0
  store i32 %351, ptr %352, align 8, !tbaa !20
  br label %353

353:                                              ; preds = %439, %350
  %354 = load ptr, ptr %41, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %354, i64 0
  %356 = load i8, ptr %355, align 1, !tbaa !15
  %357 = sext i8 %356 to i32
  %358 = icmp eq i32 %357, 13
  br i1 %358, label %371, label %359

359:                                              ; preds = %353
  %360 = load ptr, ptr %41, align 8, !tbaa !5
  %361 = getelementptr inbounds i8, ptr %360, i64 0
  %362 = load i8, ptr %361, align 1, !tbaa !15
  %363 = sext i8 %362 to i32
  %364 = icmp eq i32 %363, 10
  br i1 %364, label %371, label %365

365:                                              ; preds = %359
  %366 = load ptr, ptr %41, align 8, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %366, i64 0
  %368 = load i8, ptr %367, align 1, !tbaa !15
  %369 = sext i8 %368 to i32
  %370 = icmp eq i32 %369, 0
  br label %371

371:                                              ; preds = %365, %359, %353
  %372 = phi i1 [ true, %359 ], [ true, %353 ], [ %370, %365 ]
  %373 = xor i1 %372, true
  br i1 %373, label %374, label %445

374:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef %56, ptr noundef %57, ptr noundef %41, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %375 unwind label %400

375:                                              ; preds = %374
  %376 = load float, ptr %56, align 4, !tbaa !26
  %377 = fpext float %376 to double
  %378 = fcmp olt double %377, 0.000000e+00
  br i1 %378, label %379, label %424

379:                                              ; preds = %375
  %380 = load ptr, ptr %15, align 8, !tbaa !5
  %381 = icmp ne ptr %380, null
  br i1 %381, label %382, label %423

382:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 392, ptr %58) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %58)
          to label %383 unwind label %404

383:                                              ; preds = %382
  %384 = getelementptr inbounds i8, ptr %58, i64 16
  %385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %384, ptr noundef @.str.46)
          to label %386 unwind label %408

386:                                              ; preds = %383
  %387 = load i64, ptr %37, align 8, !tbaa !13
  %388 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %385, i64 noundef %387)
          to label %389 unwind label %408

389:                                              ; preds = %386
  %390 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %388, ptr noundef @.str.47)
          to label %391 unwind label %408

391:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(128) %58)
          to label %392 unwind label %412

392:                                              ; preds = %391
  %393 = load ptr, ptr %15, align 8, !tbaa !5
  %394 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %393, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %395 unwind label %416

395:                                              ; preds = %392
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %58) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %58) #10
  br label %423

396:                                              ; preds = %346
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %39, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %40, align 4
  br label %455

400:                                              ; preds = %374
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %39, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %40, align 4
  br label %444

404:                                              ; preds = %382
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %39, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %40, align 4
  br label %422

408:                                              ; preds = %389, %386, %383
  %409 = landingpad { ptr, i32 }
          cleanup
  %410 = extractvalue { ptr, i32 } %409, 0
  store ptr %410, ptr %39, align 8
  %411 = extractvalue { ptr, i32 } %409, 1
  store i32 %411, ptr %40, align 4
  br label %421

412:                                              ; preds = %391
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %39, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %40, align 4
  br label %420

416:                                              ; preds = %392
  %417 = landingpad { ptr, i32 }
          cleanup
  %418 = extractvalue { ptr, i32 } %417, 0
  store ptr %418, ptr %39, align 8
  %419 = extractvalue { ptr, i32 } %417, 1
  store i32 %419, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  br label %420

420:                                              ; preds = %416, %412
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  br label %421

421:                                              ; preds = %420, %408
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %58) #10
  br label %422

422:                                              ; preds = %421, %404
  call void @llvm.lifetime.end.p0(i64 392, ptr %58) #10
  br label %444

423:                                              ; preds = %395, %379
  store i1 false, ptr %10, align 1
  store i32 1, ptr %42, align 4
  br label %437

424:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #10
  %425 = load float, ptr %56, align 4, !tbaa !26
  %426 = fptosi float %425 to i32
  %427 = getelementptr inbounds %"struct.tinyobj::joint_and_weight_t", ptr %60, i32 0, i32 0
  store i32 %426, ptr %427, align 4, !tbaa !28
  %428 = load float, ptr %57, align 4, !tbaa !26
  %429 = getelementptr inbounds %"struct.tinyobj::joint_and_weight_t", ptr %60, i32 0, i32 1
  store float %428, ptr %429, align 4, !tbaa !30
  %430 = getelementptr inbounds %"struct.tinyobj::skin_weight_t", ptr %55, i32 0, i32 1
  invoke void @_ZNSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %430, ptr noundef nonnull align 4 dereferenceable(8) %60)
          to label %431 unwind label %440

431:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  %432 = load ptr, ptr %41, align 8, !tbaa !5
  %433 = call i64 @strspn(ptr noundef %432, ptr noundef @.str.12) #11
  store i64 %433, ptr %61, align 8, !tbaa !13
  %434 = load i64, ptr %61, align 8, !tbaa !13
  %435 = load ptr, ptr %41, align 8, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %435, i64 %434
  store ptr %436, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  store i32 0, ptr %42, align 4
  br label %437

437:                                              ; preds = %431, %423
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  %438 = load i32, ptr %42, align 4
  switch i32 %438, label %447 [
    i32 0, label %439
  ]

439:                                              ; preds = %437
  br label %353, !llvm.loop !31

440:                                              ; preds = %424
  %441 = landingpad { ptr, i32 }
          cleanup
  %442 = extractvalue { ptr, i32 } %441, 0
  store ptr %442, ptr %39, align 8
  %443 = extractvalue { ptr, i32 } %441, 1
  store i32 %443, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #10
  br label %444

444:                                              ; preds = %440, %422, %400
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  br label %454

445:                                              ; preds = %371
  invoke void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %446 unwind label %450

446:                                              ; preds = %445
  store i32 0, ptr %42, align 4
  br label %447

447:                                              ; preds = %446, %437
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  %448 = load i32, ptr %42, align 4
  switch i32 %448, label %1547 [
    i32 0, label %449
  ]

449:                                              ; preds = %447
  br label %456

450:                                              ; preds = %445
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %39, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %40, align 4
  br label %454

454:                                              ; preds = %450, %444
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #10
  br label %455

455:                                              ; preds = %454, %396
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %1550

456:                                              ; preds = %449, %340, %328, %322
  %457 = load ptr, ptr %41, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 0
  %459 = load i8, ptr %458, align 1, !tbaa !15
  %460 = sext i8 %459 to i32
  %461 = icmp eq i32 %460, 108
  br i1 %461, label %462, label %573

462:                                              ; preds = %456
  %463 = load ptr, ptr %41, align 8, !tbaa !5
  %464 = getelementptr inbounds i8, ptr %463, i64 1
  %465 = load i8, ptr %464, align 1, !tbaa !15
  %466 = sext i8 %465 to i32
  %467 = icmp eq i32 %466, 32
  br i1 %467, label %474, label %468

468:                                              ; preds = %462
  %469 = load ptr, ptr %41, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 1
  %471 = load i8, ptr %470, align 1, !tbaa !15
  %472 = sext i8 %471 to i32
  %473 = icmp eq i32 %472, 9
  br i1 %473, label %474, label %573

474:                                              ; preds = %468, %462
  %475 = load ptr, ptr %41, align 8, !tbaa !5
  %476 = getelementptr inbounds i8, ptr %475, i64 2
  store ptr %476, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %62) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  br label %477

477:                                              ; preds = %562, %474
  %478 = load ptr, ptr %41, align 8, !tbaa !5
  %479 = getelementptr inbounds i8, ptr %478, i64 0
  %480 = load i8, ptr %479, align 1, !tbaa !15
  %481 = sext i8 %480 to i32
  %482 = icmp eq i32 %481, 13
  br i1 %482, label %495, label %483

483:                                              ; preds = %477
  %484 = load ptr, ptr %41, align 8, !tbaa !5
  %485 = getelementptr inbounds i8, ptr %484, i64 0
  %486 = load i8, ptr %485, align 1, !tbaa !15
  %487 = sext i8 %486 to i32
  %488 = icmp eq i32 %487, 10
  br i1 %488, label %495, label %489

489:                                              ; preds = %483
  %490 = load ptr, ptr %41, align 8, !tbaa !5
  %491 = getelementptr inbounds i8, ptr %490, i64 0
  %492 = load i8, ptr %491, align 1, !tbaa !15
  %493 = sext i8 %492 to i32
  %494 = icmp eq i32 %493, 0
  br label %495

495:                                              ; preds = %489, %483, %477
  %496 = phi i1 [ true, %483 ], [ true, %477 ], [ %494, %489 ]
  %497 = xor i1 %496, true
  br i1 %497, label %498, label %564

498:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 12, ptr %63) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %63)
          to label %499 unwind label %528

499:                                              ; preds = %498
  %500 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %501 = udiv i64 %500, 3
  %502 = trunc i64 %501 to i32
  %503 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %504 = udiv i64 %503, 3
  %505 = trunc i64 %504 to i32
  %506 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %507 = udiv i64 %506, 2
  %508 = trunc i64 %507 to i32
  %509 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %41, i32 noundef %502, i32 noundef %505, i32 noundef %508, ptr noundef %63)
          to label %510 unwind label %528

510:                                              ; preds = %499
  br i1 %509, label %552, label %511

511:                                              ; preds = %510
  %512 = load ptr, ptr %15, align 8, !tbaa !5
  %513 = icmp ne ptr %512, null
  br i1 %513, label %514, label %551

514:                                              ; preds = %511
  call void @llvm.lifetime.start.p0(i64 392, ptr %64) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %64)
          to label %515 unwind label %532

515:                                              ; preds = %514
  %516 = getelementptr inbounds i8, ptr %64, i64 16
  %517 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %516, ptr noundef @.str.48)
          to label %518 unwind label %536

518:                                              ; preds = %515
  %519 = load i64, ptr %37, align 8, !tbaa !13
  %520 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %517, i64 noundef %519)
          to label %521 unwind label %536

521:                                              ; preds = %518
  %522 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %520, ptr noundef @.str.47)
          to label %523 unwind label %536

523:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(128) %64)
          to label %524 unwind label %540

524:                                              ; preds = %523
  %525 = load ptr, ptr %15, align 8, !tbaa !5
  %526 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %525, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %527 unwind label %544

527:                                              ; preds = %524
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %64) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %64) #10
  br label %551

528:                                              ; preds = %552, %499, %498
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %39, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %40, align 4
  br label %563

532:                                              ; preds = %514
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %39, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %40, align 4
  br label %550

536:                                              ; preds = %521, %518, %515
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %39, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %40, align 4
  br label %549

540:                                              ; preds = %523
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %39, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %40, align 4
  br label %548

544:                                              ; preds = %524
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %39, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  br label %548

548:                                              ; preds = %544, %540
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #10
  br label %549

549:                                              ; preds = %548, %536
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %64) #10
  br label %550

550:                                              ; preds = %549, %532
  call void @llvm.lifetime.end.p0(i64 392, ptr %64) #10
  br label %563

551:                                              ; preds = %527, %511
  store i1 false, ptr %10, align 1
  store i32 1, ptr %42, align 4
  br label %560

552:                                              ; preds = %510
  %553 = getelementptr inbounds %"struct.tinyobj::__line_t", ptr %62, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %553, ptr noundef nonnull align 4 dereferenceable(12) %63)
          to label %554 unwind label %528

554:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #10
  %555 = load ptr, ptr %41, align 8, !tbaa !5
  %556 = call i64 @strspn(ptr noundef %555, ptr noundef @.str.12) #11
  store i64 %556, ptr %66, align 8, !tbaa !13
  %557 = load i64, ptr %66, align 8, !tbaa !13
  %558 = load ptr, ptr %41, align 8, !tbaa !5
  %559 = getelementptr inbounds i8, ptr %558, i64 %557
  store ptr %559, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #10
  store i32 0, ptr %42, align 4
  br label %560

560:                                              ; preds = %554, %551
  call void @llvm.lifetime.end.p0(i64 12, ptr %63) #10
  %561 = load i32, ptr %42, align 4
  switch i32 %561, label %571 [
    i32 0, label %562
  ]

562:                                              ; preds = %560
  br label %477, !llvm.loop !32

563:                                              ; preds = %550, %528
  call void @llvm.lifetime.end.p0(i64 12, ptr %63) #10
  br label %572

564:                                              ; preds = %495
  %565 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %27, i32 0, i32 1
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %565, ptr noundef nonnull align 8 dereferenceable(24) %62)
          to label %566 unwind label %567

566:                                              ; preds = %564
  store i32 2, ptr %42, align 4
  br label %571, !llvm.loop !16

567:                                              ; preds = %564
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %39, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %40, align 4
  br label %572

571:                                              ; preds = %566, %560
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %62) #10
  br label %1547

572:                                              ; preds = %567, %563
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %62) #10
  br label %1550

573:                                              ; preds = %468, %456
  %574 = load ptr, ptr %41, align 8, !tbaa !5
  %575 = getelementptr inbounds i8, ptr %574, i64 0
  %576 = load i8, ptr %575, align 1, !tbaa !15
  %577 = sext i8 %576 to i32
  %578 = icmp eq i32 %577, 112
  br i1 %578, label %579, label %690

579:                                              ; preds = %573
  %580 = load ptr, ptr %41, align 8, !tbaa !5
  %581 = getelementptr inbounds i8, ptr %580, i64 1
  %582 = load i8, ptr %581, align 1, !tbaa !15
  %583 = sext i8 %582 to i32
  %584 = icmp eq i32 %583, 32
  br i1 %584, label %591, label %585

585:                                              ; preds = %579
  %586 = load ptr, ptr %41, align 8, !tbaa !5
  %587 = getelementptr inbounds i8, ptr %586, i64 1
  %588 = load i8, ptr %587, align 1, !tbaa !15
  %589 = sext i8 %588 to i32
  %590 = icmp eq i32 %589, 9
  br i1 %590, label %591, label %690

591:                                              ; preds = %585, %579
  %592 = load ptr, ptr %41, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i64 2
  store ptr %593, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %67) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %67) #10
  br label %594

594:                                              ; preds = %679, %591
  %595 = load ptr, ptr %41, align 8, !tbaa !5
  %596 = getelementptr inbounds i8, ptr %595, i64 0
  %597 = load i8, ptr %596, align 1, !tbaa !15
  %598 = sext i8 %597 to i32
  %599 = icmp eq i32 %598, 13
  br i1 %599, label %612, label %600

600:                                              ; preds = %594
  %601 = load ptr, ptr %41, align 8, !tbaa !5
  %602 = getelementptr inbounds i8, ptr %601, i64 0
  %603 = load i8, ptr %602, align 1, !tbaa !15
  %604 = sext i8 %603 to i32
  %605 = icmp eq i32 %604, 10
  br i1 %605, label %612, label %606

606:                                              ; preds = %600
  %607 = load ptr, ptr %41, align 8, !tbaa !5
  %608 = getelementptr inbounds i8, ptr %607, i64 0
  %609 = load i8, ptr %608, align 1, !tbaa !15
  %610 = sext i8 %609 to i32
  %611 = icmp eq i32 %610, 0
  br label %612

612:                                              ; preds = %606, %600, %594
  %613 = phi i1 [ true, %600 ], [ true, %594 ], [ %611, %606 ]
  %614 = xor i1 %613, true
  br i1 %614, label %615, label %681

615:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 12, ptr %68) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %68)
          to label %616 unwind label %645

616:                                              ; preds = %615
  %617 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %618 = udiv i64 %617, 3
  %619 = trunc i64 %618 to i32
  %620 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %621 = udiv i64 %620, 3
  %622 = trunc i64 %621 to i32
  %623 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %624 = udiv i64 %623, 2
  %625 = trunc i64 %624 to i32
  %626 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %41, i32 noundef %619, i32 noundef %622, i32 noundef %625, ptr noundef %68)
          to label %627 unwind label %645

627:                                              ; preds = %616
  br i1 %626, label %669, label %628

628:                                              ; preds = %627
  %629 = load ptr, ptr %15, align 8, !tbaa !5
  %630 = icmp ne ptr %629, null
  br i1 %630, label %631, label %668

631:                                              ; preds = %628
  call void @llvm.lifetime.start.p0(i64 392, ptr %69) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69)
          to label %632 unwind label %649

632:                                              ; preds = %631
  %633 = getelementptr inbounds i8, ptr %69, i64 16
  %634 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %633, ptr noundef @.str.49)
          to label %635 unwind label %653

635:                                              ; preds = %632
  %636 = load i64, ptr %37, align 8, !tbaa !13
  %637 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %634, i64 noundef %636)
          to label %638 unwind label %653

638:                                              ; preds = %635
  %639 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %637, ptr noundef @.str.47)
          to label %640 unwind label %653

640:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(128) %69)
          to label %641 unwind label %657

641:                                              ; preds = %640
  %642 = load ptr, ptr %15, align 8, !tbaa !5
  %643 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %642, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %644 unwind label %661

644:                                              ; preds = %641
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %69) #10
  br label %668

645:                                              ; preds = %669, %616, %615
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %39, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %40, align 4
  br label %680

649:                                              ; preds = %631
  %650 = landingpad { ptr, i32 }
          cleanup
  %651 = extractvalue { ptr, i32 } %650, 0
  store ptr %651, ptr %39, align 8
  %652 = extractvalue { ptr, i32 } %650, 1
  store i32 %652, ptr %40, align 4
  br label %667

653:                                              ; preds = %638, %635, %632
  %654 = landingpad { ptr, i32 }
          cleanup
  %655 = extractvalue { ptr, i32 } %654, 0
  store ptr %655, ptr %39, align 8
  %656 = extractvalue { ptr, i32 } %654, 1
  store i32 %656, ptr %40, align 4
  br label %666

657:                                              ; preds = %640
  %658 = landingpad { ptr, i32 }
          cleanup
  %659 = extractvalue { ptr, i32 } %658, 0
  store ptr %659, ptr %39, align 8
  %660 = extractvalue { ptr, i32 } %658, 1
  store i32 %660, ptr %40, align 4
  br label %665

661:                                              ; preds = %641
  %662 = landingpad { ptr, i32 }
          cleanup
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %39, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  br label %665

665:                                              ; preds = %661, %657
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #10
  br label %666

666:                                              ; preds = %665, %653
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69) #10
  br label %667

667:                                              ; preds = %666, %649
  call void @llvm.lifetime.end.p0(i64 392, ptr %69) #10
  br label %680

668:                                              ; preds = %644, %628
  store i1 false, ptr %10, align 1
  store i32 1, ptr %42, align 4
  br label %677

669:                                              ; preds = %627
  %670 = getelementptr inbounds %"struct.tinyobj::__points_t", ptr %67, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %670, ptr noundef nonnull align 4 dereferenceable(12) %68)
          to label %671 unwind label %645

671:                                              ; preds = %669
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %672 = load ptr, ptr %41, align 8, !tbaa !5
  %673 = call i64 @strspn(ptr noundef %672, ptr noundef @.str.12) #11
  store i64 %673, ptr %71, align 8, !tbaa !13
  %674 = load i64, ptr %71, align 8, !tbaa !13
  %675 = load ptr, ptr %41, align 8, !tbaa !5
  %676 = getelementptr inbounds i8, ptr %675, i64 %674
  store ptr %676, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  store i32 0, ptr %42, align 4
  br label %677

677:                                              ; preds = %671, %668
  call void @llvm.lifetime.end.p0(i64 12, ptr %68) #10
  %678 = load i32, ptr %42, align 4
  switch i32 %678, label %688 [
    i32 0, label %679
  ]

679:                                              ; preds = %677
  br label %594, !llvm.loop !33

680:                                              ; preds = %667, %645
  call void @llvm.lifetime.end.p0(i64 12, ptr %68) #10
  br label %689

681:                                              ; preds = %612
  %682 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %27, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj10__points_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %682, ptr noundef nonnull align 8 dereferenceable(24) %67)
          to label %683 unwind label %684

683:                                              ; preds = %681
  store i32 2, ptr %42, align 4
  br label %688, !llvm.loop !16

684:                                              ; preds = %681
  %685 = landingpad { ptr, i32 }
          cleanup
  %686 = extractvalue { ptr, i32 } %685, 0
  store ptr %686, ptr %39, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %40, align 4
  br label %689

688:                                              ; preds = %683, %677
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %67) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %67) #10
  br label %1547

689:                                              ; preds = %684, %680
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %67) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %67) #10
  br label %1550

690:                                              ; preds = %585, %573
  %691 = load ptr, ptr %41, align 8, !tbaa !5
  %692 = getelementptr inbounds i8, ptr %691, i64 0
  %693 = load i8, ptr %692, align 1, !tbaa !15
  %694 = sext i8 %693 to i32
  %695 = icmp eq i32 %694, 102
  br i1 %695, label %696, label %854

696:                                              ; preds = %690
  %697 = load ptr, ptr %41, align 8, !tbaa !5
  %698 = getelementptr inbounds i8, ptr %697, i64 1
  %699 = load i8, ptr %698, align 1, !tbaa !15
  %700 = sext i8 %699 to i32
  %701 = icmp eq i32 %700, 32
  br i1 %701, label %708, label %702

702:                                              ; preds = %696
  %703 = load ptr, ptr %41, align 8, !tbaa !5
  %704 = getelementptr inbounds i8, ptr %703, i64 1
  %705 = load i8, ptr %704, align 1, !tbaa !15
  %706 = sext i8 %705 to i32
  %707 = icmp eq i32 %706, 9
  br i1 %707, label %708, label %854

708:                                              ; preds = %702, %696
  %709 = load ptr, ptr %41, align 8, !tbaa !5
  %710 = getelementptr inbounds i8, ptr %709, i64 2
  store ptr %710, ptr %41, align 8, !tbaa !5
  %711 = load ptr, ptr %41, align 8, !tbaa !5
  %712 = call i64 @strspn(ptr noundef %711, ptr noundef @.str) #11
  %713 = load ptr, ptr %41, align 8, !tbaa !5
  %714 = getelementptr inbounds i8, ptr %713, i64 %712
  store ptr %714, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #10
  invoke void @_ZN7tinyobj6face_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %715 unwind label %771

715:                                              ; preds = %708
  %716 = load i32, ptr %31, align 4, !tbaa !11
  %717 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %72, i32 0, i32 0
  store i32 %716, ptr %717, align 8, !tbaa !34
  %718 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %72, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %718, i64 noundef 3)
          to label %719 unwind label %775

719:                                              ; preds = %715
  br label %720

720:                                              ; preds = %846, %719
  %721 = load ptr, ptr %41, align 8, !tbaa !5
  %722 = getelementptr inbounds i8, ptr %721, i64 0
  %723 = load i8, ptr %722, align 1, !tbaa !15
  %724 = sext i8 %723 to i32
  %725 = icmp eq i32 %724, 13
  br i1 %725, label %738, label %726

726:                                              ; preds = %720
  %727 = load ptr, ptr %41, align 8, !tbaa !5
  %728 = getelementptr inbounds i8, ptr %727, i64 0
  %729 = load i8, ptr %728, align 1, !tbaa !15
  %730 = sext i8 %729 to i32
  %731 = icmp eq i32 %730, 10
  br i1 %731, label %738, label %732

732:                                              ; preds = %726
  %733 = load ptr, ptr %41, align 8, !tbaa !5
  %734 = getelementptr inbounds i8, ptr %733, i64 0
  %735 = load i8, ptr %734, align 1, !tbaa !15
  %736 = sext i8 %735 to i32
  %737 = icmp eq i32 %736, 0
  br label %738

738:                                              ; preds = %732, %726, %720
  %739 = phi i1 [ true, %726 ], [ true, %720 ], [ %737, %732 ]
  %740 = xor i1 %739, true
  br i1 %740, label %741, label %848

741:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 12, ptr %73) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %73)
          to label %742 unwind label %779

742:                                              ; preds = %741
  %743 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %744 = udiv i64 %743, 3
  %745 = trunc i64 %744 to i32
  %746 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %747 = udiv i64 %746, 3
  %748 = trunc i64 %747 to i32
  %749 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %750 = udiv i64 %749, 2
  %751 = trunc i64 %750 to i32
  %752 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %41, i32 noundef %745, i32 noundef %748, i32 noundef %751, ptr noundef %73)
          to label %753 unwind label %779

753:                                              ; preds = %742
  br i1 %752, label %803, label %754

754:                                              ; preds = %753
  %755 = load ptr, ptr %15, align 8, !tbaa !5
  %756 = icmp ne ptr %755, null
  br i1 %756, label %757, label %802

757:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 392, ptr %74) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %74)
          to label %758 unwind label %783

758:                                              ; preds = %757
  %759 = getelementptr inbounds i8, ptr %74, i64 16
  %760 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %759, ptr noundef @.str.50)
          to label %761 unwind label %787

761:                                              ; preds = %758
  %762 = load i64, ptr %37, align 8, !tbaa !13
  %763 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %760, i64 noundef %762)
          to label %764 unwind label %787

764:                                              ; preds = %761
  %765 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %763, ptr noundef @.str.47)
          to label %766 unwind label %787

766:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(128) %74)
          to label %767 unwind label %791

767:                                              ; preds = %766
  %768 = load ptr, ptr %15, align 8, !tbaa !5
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %768, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %770 unwind label %795

770:                                              ; preds = %767
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %74) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %74) #10
  br label %802

771:                                              ; preds = %708
  %772 = landingpad { ptr, i32 }
          cleanup
  %773 = extractvalue { ptr, i32 } %772, 0
  store ptr %773, ptr %39, align 8
  %774 = extractvalue { ptr, i32 } %772, 1
  store i32 %774, ptr %40, align 4
  br label %853

775:                                              ; preds = %848, %715
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %39, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %40, align 4
  br label %852

779:                                              ; preds = %835, %742, %741
  %780 = landingpad { ptr, i32 }
          cleanup
  %781 = extractvalue { ptr, i32 } %780, 0
  store ptr %781, ptr %39, align 8
  %782 = extractvalue { ptr, i32 } %780, 1
  store i32 %782, ptr %40, align 4
  br label %847

783:                                              ; preds = %757
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %39, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %40, align 4
  br label %801

787:                                              ; preds = %764, %761, %758
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %39, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %40, align 4
  br label %800

791:                                              ; preds = %766
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %39, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %40, align 4
  br label %799

795:                                              ; preds = %767
  %796 = landingpad { ptr, i32 }
          cleanup
  %797 = extractvalue { ptr, i32 } %796, 0
  store ptr %797, ptr %39, align 8
  %798 = extractvalue { ptr, i32 } %796, 1
  store i32 %798, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %799

799:                                              ; preds = %795, %791
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  br label %800

800:                                              ; preds = %799, %787
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %74) #10
  br label %801

801:                                              ; preds = %800, %783
  call void @llvm.lifetime.end.p0(i64 392, ptr %74) #10
  br label %847

802:                                              ; preds = %770, %754
  store i1 false, ptr %10, align 1
  store i32 1, ptr %42, align 4
  br label %844

803:                                              ; preds = %753
  %804 = load i32, ptr %32, align 4, !tbaa !11
  %805 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 0
  %806 = load i32, ptr %805, align 4, !tbaa !40
  %807 = icmp sgt i32 %804, %806
  br i1 %807, label %808, label %810

808:                                              ; preds = %803
  %809 = load i32, ptr %32, align 4, !tbaa !11
  br label %813

810:                                              ; preds = %803
  %811 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 0
  %812 = load i32, ptr %811, align 4, !tbaa !40
  br label %813

813:                                              ; preds = %810, %808
  %814 = phi i32 [ %809, %808 ], [ %812, %810 ]
  store i32 %814, ptr %32, align 4, !tbaa !11
  %815 = load i32, ptr %33, align 4, !tbaa !11
  %816 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 2
  %817 = load i32, ptr %816, align 4, !tbaa !42
  %818 = icmp sgt i32 %815, %817
  br i1 %818, label %819, label %821

819:                                              ; preds = %813
  %820 = load i32, ptr %33, align 4, !tbaa !11
  br label %824

821:                                              ; preds = %813
  %822 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 2
  %823 = load i32, ptr %822, align 4, !tbaa !42
  br label %824

824:                                              ; preds = %821, %819
  %825 = phi i32 [ %820, %819 ], [ %823, %821 ]
  store i32 %825, ptr %33, align 4, !tbaa !11
  %826 = load i32, ptr %34, align 4, !tbaa !11
  %827 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 1
  %828 = load i32, ptr %827, align 4, !tbaa !43
  %829 = icmp sgt i32 %826, %828
  br i1 %829, label %830, label %832

830:                                              ; preds = %824
  %831 = load i32, ptr %34, align 4, !tbaa !11
  br label %835

832:                                              ; preds = %824
  %833 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %73, i32 0, i32 1
  %834 = load i32, ptr %833, align 4, !tbaa !43
  br label %835

835:                                              ; preds = %832, %830
  %836 = phi i32 [ %831, %830 ], [ %834, %832 ]
  store i32 %836, ptr %34, align 4, !tbaa !11
  %837 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %72, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %837, ptr noundef nonnull align 4 dereferenceable(12) %73)
          to label %838 unwind label %779

838:                                              ; preds = %835
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #10
  %839 = load ptr, ptr %41, align 8, !tbaa !5
  %840 = call i64 @strspn(ptr noundef %839, ptr noundef @.str.12) #11
  store i64 %840, ptr %76, align 8, !tbaa !13
  %841 = load i64, ptr %76, align 8, !tbaa !13
  %842 = load ptr, ptr %41, align 8, !tbaa !5
  %843 = getelementptr inbounds i8, ptr %842, i64 %841
  store ptr %843, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #10
  store i32 0, ptr %42, align 4
  br label %844

844:                                              ; preds = %838, %802
  call void @llvm.lifetime.end.p0(i64 12, ptr %73) #10
  %845 = load i32, ptr %42, align 4
  switch i32 %845, label %851 [
    i32 0, label %846
  ]

846:                                              ; preds = %844
  br label %720, !llvm.loop !44

847:                                              ; preds = %801, %779
  call void @llvm.lifetime.end.p0(i64 12, ptr %73) #10
  br label %852

848:                                              ; preds = %738
  %849 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %27, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %849, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %850 unwind label %775

850:                                              ; preds = %848
  store i32 2, ptr %42, align 4
  br label %851, !llvm.loop !16

851:                                              ; preds = %850, %844
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  br label %1547

852:                                              ; preds = %847, %775
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  br label %853

853:                                              ; preds = %852, %771
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  br label %1550

854:                                              ; preds = %702, %690
  %855 = load ptr, ptr %41, align 8, !tbaa !5
  %856 = call i32 @strncmp(ptr noundef %855, ptr noundef @.str.51, i64 noundef 6) #11
  %857 = icmp eq i32 0, %856
  br i1 %857, label %858, label %923

858:                                              ; preds = %854
  %859 = load ptr, ptr %41, align 8, !tbaa !5
  %860 = getelementptr inbounds i8, ptr %859, i64 6
  store ptr %860, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef %41)
          to label %861 unwind label %872

861:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #10
  store i32 -1, ptr %78, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #10
  %862 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %29, ptr noundef nonnull align 8 dereferenceable(32) %77)
          to label %863 unwind label %876

863:                                              ; preds = %861
  %864 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %80, i32 0, i32 0
  store ptr %862, ptr %864, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  %865 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %29) #10
  %866 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %82, i32 0, i32 0
  store ptr %865, ptr %866, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 8 dereferenceable(8) %82) #10
  %867 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %81) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  br i1 %867, label %868, label %880

868:                                              ; preds = %863
  %869 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #10
  %870 = getelementptr inbounds %"struct.std::pair.91", ptr %869, i32 0, i32 1
  %871 = load i32, ptr %870, align 8, !tbaa !45
  store i32 %871, ptr %78, align 4, !tbaa !11
  br label %904

872:                                              ; preds = %858
  %873 = landingpad { ptr, i32 }
          cleanup
  %874 = extractvalue { ptr, i32 } %873, 0
  store ptr %874, ptr %39, align 8
  %875 = extractvalue { ptr, i32 } %873, 1
  store i32 %875, ptr %40, align 4
  br label %922

876:                                              ; preds = %861
  %877 = landingpad { ptr, i32 }
          cleanup
  %878 = extractvalue { ptr, i32 } %877, 0
  store ptr %878, ptr %39, align 8
  %879 = extractvalue { ptr, i32 } %877, 1
  store i32 %879, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  br label %921

880:                                              ; preds = %863
  %881 = load ptr, ptr %14, align 8, !tbaa !5
  %882 = icmp ne ptr %881, null
  br i1 %882, label %883, label %903

883:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #10
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %77)
          to label %884 unwind label %889

884:                                              ; preds = %883
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef @.str.53)
          to label %885 unwind label %893

885:                                              ; preds = %884
  %886 = load ptr, ptr %14, align 8, !tbaa !5
  %887 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %886, ptr noundef nonnull align 8 dereferenceable(32) %83)
          to label %888 unwind label %897

888:                                              ; preds = %885
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  br label %903

889:                                              ; preds = %883
  %890 = landingpad { ptr, i32 }
          cleanup
  %891 = extractvalue { ptr, i32 } %890, 0
  store ptr %891, ptr %39, align 8
  %892 = extractvalue { ptr, i32 } %890, 1
  store i32 %892, ptr %40, align 4
  br label %902

893:                                              ; preds = %884
  %894 = landingpad { ptr, i32 }
          cleanup
  %895 = extractvalue { ptr, i32 } %894, 0
  store ptr %895, ptr %39, align 8
  %896 = extractvalue { ptr, i32 } %894, 1
  store i32 %896, ptr %40, align 4
  br label %901

897:                                              ; preds = %885
  %898 = landingpad { ptr, i32 }
          cleanup
  %899 = extractvalue { ptr, i32 } %898, 0
  store ptr %899, ptr %39, align 8
  %900 = extractvalue { ptr, i32 } %898, 1
  store i32 %900, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  br label %901

901:                                              ; preds = %897, %893
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  br label %902

902:                                              ; preds = %901, %889
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  br label %921

903:                                              ; preds = %888, %880
  br label %904

904:                                              ; preds = %903, %868
  %905 = load i32, ptr %78, align 4, !tbaa !11
  %906 = load i32, ptr %30, align 4, !tbaa !11
  %907 = icmp ne i32 %905, %906
  br i1 %907, label %908, label %920

908:                                              ; preds = %904
  %909 = load i32, ptr %30, align 4, !tbaa !11
  %910 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %911 = trunc i8 %910 to i1
  %912 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %35, ptr noundef nonnull align 8 dereferenceable(72) %27, ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %909, ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext %911, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %913 unwind label %916

913:                                              ; preds = %908
  %914 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %27, i32 0, i32 0
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %914) #10
  %915 = load i32, ptr %78, align 4, !tbaa !11
  store i32 %915, ptr %30, align 4, !tbaa !11
  br label %920

916:                                              ; preds = %908
  %917 = landingpad { ptr, i32 }
          cleanup
  %918 = extractvalue { ptr, i32 } %917, 0
  store ptr %918, ptr %39, align 8
  %919 = extractvalue { ptr, i32 } %917, 1
  store i32 %919, ptr %40, align 4
  br label %921

920:                                              ; preds = %913, %904
  store i32 2, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  br label %1547

921:                                              ; preds = %916, %902, %876
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  br label %922

922:                                              ; preds = %921, %872
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  br label %1550

923:                                              ; preds = %854
  %924 = load ptr, ptr %41, align 8, !tbaa !5
  %925 = call i32 @strncmp(ptr noundef %924, ptr noundef @.str.54, i64 noundef 6) #11
  %926 = icmp eq i32 0, %925
  br i1 %926, label %927, label %1077

927:                                              ; preds = %923
  %928 = load ptr, ptr %41, align 8, !tbaa !5
  %929 = getelementptr inbounds i8, ptr %928, i64 6
  %930 = load i8, ptr %929, align 1, !tbaa !15
  %931 = sext i8 %930 to i32
  %932 = icmp eq i32 %931, 32
  br i1 %932, label %939, label %933

933:                                              ; preds = %927
  %934 = load ptr, ptr %41, align 8, !tbaa !5
  %935 = getelementptr inbounds i8, ptr %934, i64 6
  %936 = load i8, ptr %935, align 1, !tbaa !15
  %937 = sext i8 %936 to i32
  %938 = icmp eq i32 %937, 9
  br i1 %938, label %939, label %1077

939:                                              ; preds = %933, %927
  %940 = load ptr, ptr %17, align 8, !tbaa !5
  %941 = icmp ne ptr %940, null
  br i1 %941, label %942, label %1076

942:                                              ; preds = %939
  %943 = load ptr, ptr %41, align 8, !tbaa !5
  %944 = getelementptr inbounds i8, ptr %943, i64 7
  store ptr %944, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %85) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #10
  %945 = load ptr, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %87) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef %945, ptr noundef nonnull align 1 dereferenceable(1) %87)
          to label %946 unwind label %966

946:                                              ; preds = %942
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %86, i8 noundef signext 32, ptr noundef nonnull align 8 dereferenceable(24) %85)
          to label %947 unwind label %970

947:                                              ; preds = %946
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  %948 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #10
  br i1 %948, label %949, label %995

949:                                              ; preds = %947
  %950 = load ptr, ptr %14, align 8, !tbaa !5
  %951 = icmp ne ptr %950, null
  br i1 %951, label %952, label %994

952:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 392, ptr %88) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %88)
          to label %953 unwind label %975

953:                                              ; preds = %952
  %954 = getelementptr inbounds i8, ptr %88, i64 16
  %955 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %954, ptr noundef @.str.55)
          to label %956 unwind label %979

956:                                              ; preds = %953
  %957 = load i64, ptr %37, align 8, !tbaa !13
  %958 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %955, i64 noundef %957)
          to label %959 unwind label %979

959:                                              ; preds = %956
  %960 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %958, ptr noundef @.str.47)
          to label %961 unwind label %979

961:                                              ; preds = %959
  call void @llvm.lifetime.start.p0(i64 32, ptr %89) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %89, ptr noundef nonnull align 8 dereferenceable(128) %88)
          to label %962 unwind label %983

962:                                              ; preds = %961
  %963 = load ptr, ptr %14, align 8, !tbaa !5
  %964 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %963, ptr noundef nonnull align 8 dereferenceable(32) %89)
          to label %965 unwind label %987

965:                                              ; preds = %962
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %88) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %88) #10
  br label %994

966:                                              ; preds = %942
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %39, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %40, align 4
  br label %974

970:                                              ; preds = %946
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %39, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  br label %974

974:                                              ; preds = %970, %966
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  br label %1075

975:                                              ; preds = %952
  %976 = landingpad { ptr, i32 }
          cleanup
  %977 = extractvalue { ptr, i32 } %976, 0
  store ptr %977, ptr %39, align 8
  %978 = extractvalue { ptr, i32 } %976, 1
  store i32 %978, ptr %40, align 4
  br label %993

979:                                              ; preds = %959, %956, %953
  %980 = landingpad { ptr, i32 }
          cleanup
  %981 = extractvalue { ptr, i32 } %980, 0
  store ptr %981, ptr %39, align 8
  %982 = extractvalue { ptr, i32 } %980, 1
  store i32 %982, ptr %40, align 4
  br label %992

983:                                              ; preds = %961
  %984 = landingpad { ptr, i32 }
          cleanup
  %985 = extractvalue { ptr, i32 } %984, 0
  store ptr %985, ptr %39, align 8
  %986 = extractvalue { ptr, i32 } %984, 1
  store i32 %986, ptr %40, align 4
  br label %991

987:                                              ; preds = %962
  %988 = landingpad { ptr, i32 }
          cleanup
  %989 = extractvalue { ptr, i32 } %988, 0
  store ptr %989, ptr %39, align 8
  %990 = extractvalue { ptr, i32 } %988, 1
  store i32 %990, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  br label %991

991:                                              ; preds = %987, %983
  call void @llvm.lifetime.end.p0(i64 32, ptr %89) #10
  br label %992

992:                                              ; preds = %991, %979
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %88) #10
  br label %993

993:                                              ; preds = %992, %975
  call void @llvm.lifetime.end.p0(i64 392, ptr %88) #10
  br label %1075

994:                                              ; preds = %965, %949
  br label %1074

995:                                              ; preds = %947
  call void @llvm.lifetime.start.p0(i64 1, ptr %90) #10
  store i8 0, ptr %90, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #10
  store i64 0, ptr %91, align 8, !tbaa !13
  br label %996

996:                                              ; preds = %1052, %995
  %997 = load i64, ptr %91, align 8, !tbaa !13
  %998 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %85) #10
  %999 = icmp ult i64 %997, %998
  br i1 %999, label %1001, label %1000

1000:                                             ; preds = %996
  store i32 12, ptr %42, align 4
  br label %1056

1001:                                             ; preds = %996
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %94) #10
  %1002 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #10
  %1003 = load i64, ptr %91, align 8, !tbaa !13
  %1004 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %1003) #10
  %1005 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %1004) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef %1005, ptr noundef nonnull align 1 dereferenceable(1) %96)
          to label %1006 unwind label %1022

1006:                                             ; preds = %1001
  %1007 = load ptr, ptr %13, align 8, !tbaa !5
  %1008 = load ptr, ptr %1002, align 8, !tbaa !49
  %1009 = getelementptr inbounds ptr, ptr %1008, i64 2
  %1010 = load ptr, ptr %1009, align 8
  %1011 = invoke noundef zeroext i1 %1010(ptr noundef nonnull align 8 dereferenceable(8) %1002, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef %1007, ptr noundef %29, ptr noundef %92, ptr noundef %93)
          to label %1012 unwind label %1026

1012:                                             ; preds = %1006
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #10
  %1013 = zext i1 %1011 to i8
  store i8 %1013, ptr %94, align 1, !tbaa !9
  %1014 = load ptr, ptr %14, align 8, !tbaa !5
  %1015 = icmp ne ptr %1014, null
  br i1 %1015, label %1016, label %1035

1016:                                             ; preds = %1012
  %1017 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  br i1 %1017, label %1035, label %1018

1018:                                             ; preds = %1016
  %1019 = load ptr, ptr %14, align 8, !tbaa !5
  %1020 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1019, ptr noundef nonnull align 8 dereferenceable(32) %92)
          to label %1021 unwind label %1031

1021:                                             ; preds = %1018
  br label %1035

1022:                                             ; preds = %1001
  %1023 = landingpad { ptr, i32 }
          cleanup
  %1024 = extractvalue { ptr, i32 } %1023, 0
  store ptr %1024, ptr %39, align 8
  %1025 = extractvalue { ptr, i32 } %1023, 1
  store i32 %1025, ptr %40, align 4
  br label %1030

1026:                                             ; preds = %1006
  %1027 = landingpad { ptr, i32 }
          cleanup
  %1028 = extractvalue { ptr, i32 } %1027, 0
  store ptr %1028, ptr %39, align 8
  %1029 = extractvalue { ptr, i32 } %1027, 1
  store i32 %1029, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #10
  br label %1030

1030:                                             ; preds = %1026, %1022
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #10
  br label %1055

1031:                                             ; preds = %1040, %1018
  %1032 = landingpad { ptr, i32 }
          cleanup
  %1033 = extractvalue { ptr, i32 } %1032, 0
  store ptr %1033, ptr %39, align 8
  %1034 = extractvalue { ptr, i32 } %1032, 1
  store i32 %1034, ptr %40, align 4
  br label %1055

1035:                                             ; preds = %1021, %1016, %1012
  %1036 = load ptr, ptr %15, align 8, !tbaa !5
  %1037 = icmp ne ptr %1036, null
  br i1 %1037, label %1038, label %1044

1038:                                             ; preds = %1035
  %1039 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  br i1 %1039, label %1044, label %1040

1040:                                             ; preds = %1038
  %1041 = load ptr, ptr %15, align 8, !tbaa !5
  %1042 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1041, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %1043 unwind label %1031

1043:                                             ; preds = %1040
  br label %1044

1044:                                             ; preds = %1043, %1038, %1035
  %1045 = load i8, ptr %94, align 1, !tbaa !9, !range !18, !noundef !19
  %1046 = trunc i8 %1045 to i1
  br i1 %1046, label %1047, label %1048

1047:                                             ; preds = %1044
  store i8 1, ptr %90, align 1, !tbaa !9
  store i32 12, ptr %42, align 4
  br label %1049

1048:                                             ; preds = %1044
  store i32 0, ptr %42, align 4
  br label %1049

1049:                                             ; preds = %1048, %1047
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #10
  %1050 = load i32, ptr %42, align 4
  switch i32 %1050, label %1056 [
    i32 0, label %1051
  ]

1051:                                             ; preds = %1049
  br label %1052

1052:                                             ; preds = %1051
  %1053 = load i64, ptr %91, align 8, !tbaa !13
  %1054 = add i64 %1053, 1
  store i64 %1054, ptr %91, align 8, !tbaa !13
  br label %996, !llvm.loop !51

1055:                                             ; preds = %1031, %1030
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #10
  br label %1073

1056:                                             ; preds = %1049, %1000
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #10
  br label %1057

1057:                                             ; preds = %1056
  %1058 = load i8, ptr %90, align 1, !tbaa !9, !range !18, !noundef !19
  %1059 = trunc i8 %1058 to i1
  br i1 %1059, label %1072, label %1060

1060:                                             ; preds = %1057
  %1061 = load ptr, ptr %14, align 8, !tbaa !5
  %1062 = icmp ne ptr %1061, null
  br i1 %1062, label %1063, label %1071

1063:                                             ; preds = %1060
  %1064 = load ptr, ptr %14, align 8, !tbaa !5
  %1065 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1064, ptr noundef @.str.56)
          to label %1066 unwind label %1067

1066:                                             ; preds = %1063
  br label %1071

1067:                                             ; preds = %1063
  %1068 = landingpad { ptr, i32 }
          cleanup
  %1069 = extractvalue { ptr, i32 } %1068, 0
  store ptr %1069, ptr %39, align 8
  %1070 = extractvalue { ptr, i32 } %1068, 1
  store i32 %1070, ptr %40, align 4
  br label %1073

1071:                                             ; preds = %1066, %1060
  br label %1072

1072:                                             ; preds = %1071, %1057
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #10
  br label %1074

1073:                                             ; preds = %1067, %1055
  call void @llvm.lifetime.end.p0(i64 1, ptr %90) #10
  br label %1075

1074:                                             ; preds = %1072, %994
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #10
  br label %1076

1075:                                             ; preds = %1073, %993, %974
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %85) #10
  br label %1550

1076:                                             ; preds = %1074, %939
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

1077:                                             ; preds = %933, %923
  %1078 = load ptr, ptr %41, align 8, !tbaa !5
  %1079 = getelementptr inbounds i8, ptr %1078, i64 0
  %1080 = load i8, ptr %1079, align 1, !tbaa !15
  %1081 = sext i8 %1080 to i32
  %1082 = icmp eq i32 %1081, 103
  br i1 %1082, label %1083, label %1241

1083:                                             ; preds = %1077
  %1084 = load ptr, ptr %41, align 8, !tbaa !5
  %1085 = getelementptr inbounds i8, ptr %1084, i64 1
  %1086 = load i8, ptr %1085, align 1, !tbaa !15
  %1087 = sext i8 %1086 to i32
  %1088 = icmp eq i32 %1087, 32
  br i1 %1088, label %1095, label %1089

1089:                                             ; preds = %1083
  %1090 = load ptr, ptr %41, align 8, !tbaa !5
  %1091 = getelementptr inbounds i8, ptr %1090, i64 1
  %1092 = load i8, ptr %1091, align 1, !tbaa !15
  %1093 = sext i8 %1092 to i32
  %1094 = icmp eq i32 %1093, 9
  br i1 %1094, label %1095, label %1241

1095:                                             ; preds = %1089, %1083
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #10
  %1096 = load i32, ptr %30, align 4, !tbaa !11
  %1097 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1098 = trunc i8 %1097 to i1
  %1099 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %35, ptr noundef nonnull align 8 dereferenceable(72) %27, ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %1096, ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext %1098, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %1100 unwind label %1109

1100:                                             ; preds = %1095
  %1101 = zext i1 %1099 to i8
  store i8 %1101, ptr %97, align 1, !tbaa !9
  %1102 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %35, i32 0, i32 1
  %1103 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1102, i32 0, i32 0
  %1104 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1103) #10
  %1105 = icmp ugt i64 %1104, 0
  br i1 %1105, label %1106, label %1113

1106:                                             ; preds = %1100
  %1107 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1107, ptr noundef nonnull align 8 dereferenceable(224) %35)
          to label %1108 unwind label %1109

1108:                                             ; preds = %1106
  br label %1113

1109:                                             ; preds = %1113, %1106, %1095
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %39, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %40, align 4
  br label %1240

1113:                                             ; preds = %1108, %1100
  call void @llvm.lifetime.start.p0(i64 224, ptr %98) #10
  call void @llvm.memset.p0.i64(ptr align 8 %98, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  %1114 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %35, ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %98) #10
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %27)
          to label %1115 unwind label %1109

1115:                                             ; preds = %1113
  call void @llvm.lifetime.start.p0(i64 24, ptr %99) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #10
  br label %1116

1116:                                             ; preds = %1139, %1115
  %1117 = load ptr, ptr %41, align 8, !tbaa !5
  %1118 = getelementptr inbounds i8, ptr %1117, i64 0
  %1119 = load i8, ptr %1118, align 1, !tbaa !15
  %1120 = sext i8 %1119 to i32
  %1121 = icmp eq i32 %1120, 13
  br i1 %1121, label %1134, label %1122

1122:                                             ; preds = %1116
  %1123 = load ptr, ptr %41, align 8, !tbaa !5
  %1124 = getelementptr inbounds i8, ptr %1123, i64 0
  %1125 = load i8, ptr %1124, align 1, !tbaa !15
  %1126 = sext i8 %1125 to i32
  %1127 = icmp eq i32 %1126, 10
  br i1 %1127, label %1134, label %1128

1128:                                             ; preds = %1122
  %1129 = load ptr, ptr %41, align 8, !tbaa !5
  %1130 = getelementptr inbounds i8, ptr %1129, i64 0
  %1131 = load i8, ptr %1130, align 1, !tbaa !15
  %1132 = sext i8 %1131 to i32
  %1133 = icmp eq i32 %1132, 0
  br label %1134

1134:                                             ; preds = %1128, %1122, %1116
  %1135 = phi i1 [ true, %1122 ], [ true, %1116 ], [ %1133, %1128 ]
  %1136 = xor i1 %1135, true
  br i1 %1136, label %1137, label %1153

1137:                                             ; preds = %1134
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef %41)
          to label %1138 unwind label %1144

1138:                                             ; preds = %1137
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %99, ptr noundef nonnull align 8 dereferenceable(32) %100)
          to label %1139 unwind label %1148

1139:                                             ; preds = %1138
  %1140 = load ptr, ptr %41, align 8, !tbaa !5
  %1141 = call i64 @strspn(ptr noundef %1140, ptr noundef @.str.12) #11
  %1142 = load ptr, ptr %41, align 8, !tbaa !5
  %1143 = getelementptr inbounds i8, ptr %1142, i64 %1141
  store ptr %1143, ptr %41, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #10
  br label %1116, !llvm.loop !52

1144:                                             ; preds = %1137
  %1145 = landingpad { ptr, i32 }
          cleanup
  %1146 = extractvalue { ptr, i32 } %1145, 0
  store ptr %1146, ptr %39, align 8
  %1147 = extractvalue { ptr, i32 } %1145, 1
  store i32 %1147, ptr %40, align 4
  br label %1152

1148:                                             ; preds = %1138
  %1149 = landingpad { ptr, i32 }
          cleanup
  %1150 = extractvalue { ptr, i32 } %1149, 0
  store ptr %1150, ptr %39, align 8
  %1151 = extractvalue { ptr, i32 } %1149, 1
  store i32 %1151, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #10
  br label %1152

1152:                                             ; preds = %1148, %1144
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #10
  br label %1239

1153:                                             ; preds = %1134
  %1154 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %99) #10
  %1155 = icmp ult i64 %1154, 2
  br i1 %1155, label %1156, label %1195

1156:                                             ; preds = %1153
  %1157 = load ptr, ptr %14, align 8, !tbaa !5
  %1158 = icmp ne ptr %1157, null
  br i1 %1158, label %1159, label %1194

1159:                                             ; preds = %1156
  call void @llvm.lifetime.start.p0(i64 392, ptr %101) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %101)
          to label %1160 unwind label %1175

1160:                                             ; preds = %1159
  %1161 = getelementptr inbounds i8, ptr %101, i64 16
  %1162 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1161, ptr noundef @.str.57)
          to label %1163 unwind label %1179

1163:                                             ; preds = %1160
  %1164 = load i64, ptr %37, align 8, !tbaa !13
  %1165 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1162, i64 noundef %1164)
          to label %1166 unwind label %1179

1166:                                             ; preds = %1163
  %1167 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1165, ptr noundef @.str.58)
          to label %1168 unwind label %1179

1168:                                             ; preds = %1166
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(128) %101)
          to label %1169 unwind label %1183

1169:                                             ; preds = %1168
  %1170 = load ptr, ptr %14, align 8, !tbaa !5
  %1171 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1170, ptr noundef nonnull align 8 dereferenceable(32) %102)
          to label %1172 unwind label %1187

1172:                                             ; preds = %1169
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #10
  %1173 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.45)
          to label %1174 unwind label %1179

1174:                                             ; preds = %1172
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %101) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %101) #10
  br label %1194

1175:                                             ; preds = %1159
  %1176 = landingpad { ptr, i32 }
          cleanup
  %1177 = extractvalue { ptr, i32 } %1176, 0
  store ptr %1177, ptr %39, align 8
  %1178 = extractvalue { ptr, i32 } %1176, 1
  store i32 %1178, ptr %40, align 4
  br label %1193

1179:                                             ; preds = %1172, %1166, %1163, %1160
  %1180 = landingpad { ptr, i32 }
          cleanup
  %1181 = extractvalue { ptr, i32 } %1180, 0
  store ptr %1181, ptr %39, align 8
  %1182 = extractvalue { ptr, i32 } %1180, 1
  store i32 %1182, ptr %40, align 4
  br label %1192

1183:                                             ; preds = %1168
  %1184 = landingpad { ptr, i32 }
          cleanup
  %1185 = extractvalue { ptr, i32 } %1184, 0
  store ptr %1185, ptr %39, align 8
  %1186 = extractvalue { ptr, i32 } %1184, 1
  store i32 %1186, ptr %40, align 4
  br label %1191

1187:                                             ; preds = %1169
  %1188 = landingpad { ptr, i32 }
          cleanup
  %1189 = extractvalue { ptr, i32 } %1188, 0
  store ptr %1189, ptr %39, align 8
  %1190 = extractvalue { ptr, i32 } %1188, 1
  store i32 %1190, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #10
  br label %1191

1191:                                             ; preds = %1187, %1183
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #10
  br label %1192

1192:                                             ; preds = %1191, %1179
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %101) #10
  br label %1193

1193:                                             ; preds = %1192, %1175
  call void @llvm.lifetime.end.p0(i64 392, ptr %101) #10
  br label %1239

1194:                                             ; preds = %1174, %1156
  br label %1238

1195:                                             ; preds = %1153
  call void @llvm.lifetime.start.p0(i64 392, ptr %103) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %103)
          to label %1196 unwind label %1206

1196:                                             ; preds = %1195
  %1197 = getelementptr inbounds i8, ptr %103, i64 16
  %1198 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef 1) #10
  %1199 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %1197, ptr noundef nonnull align 8 dereferenceable(32) %1198)
          to label %1200 unwind label %1210

1200:                                             ; preds = %1196
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #10
  store i64 2, ptr %104, align 8, !tbaa !13
  br label %1201

1201:                                             ; preds = %1222, %1200
  %1202 = load i64, ptr %104, align 8, !tbaa !13
  %1203 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %99) #10
  %1204 = icmp ult i64 %1202, %1203
  br i1 %1204, label %1214, label %1205

1205:                                             ; preds = %1201
  store i32 17, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #10
  br label %1229

1206:                                             ; preds = %1195
  %1207 = landingpad { ptr, i32 }
          cleanup
  %1208 = extractvalue { ptr, i32 } %1207, 0
  store ptr %1208, ptr %39, align 8
  %1209 = extractvalue { ptr, i32 } %1207, 1
  store i32 %1209, ptr %40, align 4
  br label %1237

1210:                                             ; preds = %1196
  %1211 = landingpad { ptr, i32 }
          cleanup
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %39, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %40, align 4
  br label %1236

1214:                                             ; preds = %1201
  %1215 = getelementptr inbounds i8, ptr %103, i64 16
  %1216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1215, ptr noundef @.str.59)
          to label %1217 unwind label %1225

1217:                                             ; preds = %1214
  %1218 = load i64, ptr %104, align 8, !tbaa !13
  %1219 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %1218) #10
  %1220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %1216, ptr noundef nonnull align 8 dereferenceable(32) %1219)
          to label %1221 unwind label %1225

1221:                                             ; preds = %1217
  br label %1222

1222:                                             ; preds = %1221
  %1223 = load i64, ptr %104, align 8, !tbaa !13
  %1224 = add i64 %1223, 1
  store i64 %1224, ptr %104, align 8, !tbaa !13
  br label %1201, !llvm.loop !53

1225:                                             ; preds = %1217, %1214
  %1226 = landingpad { ptr, i32 }
          cleanup
  %1227 = extractvalue { ptr, i32 } %1226, 0
  store ptr %1227, ptr %39, align 8
  %1228 = extractvalue { ptr, i32 } %1226, 1
  store i32 %1228, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #10
  br label %1236

1229:                                             ; preds = %1205
  call void @llvm.lifetime.start.p0(i64 32, ptr %105) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(128) %103)
          to label %1230 unwind label %1232

1230:                                             ; preds = %1229
  %1231 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %105) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %103) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %103) #10
  br label %1238

1232:                                             ; preds = %1229
  %1233 = landingpad { ptr, i32 }
          cleanup
  %1234 = extractvalue { ptr, i32 } %1233, 0
  store ptr %1234, ptr %39, align 8
  %1235 = extractvalue { ptr, i32 } %1233, 1
  store i32 %1235, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #10
  br label %1236

1236:                                             ; preds = %1232, %1225, %1210
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %103) #10
  br label %1237

1237:                                             ; preds = %1236, %1206
  call void @llvm.lifetime.end.p0(i64 392, ptr %103) #10
  br label %1239

1238:                                             ; preds = %1230, %1194
  store i32 2, ptr %42, align 4
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1547

1239:                                             ; preds = %1237, %1193, %1152
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %99) #10
  br label %1240

1240:                                             ; preds = %1239, %1109
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1550

1241:                                             ; preds = %1089, %1077
  %1242 = load ptr, ptr %41, align 8, !tbaa !5
  %1243 = getelementptr inbounds i8, ptr %1242, i64 0
  %1244 = load i8, ptr %1243, align 1, !tbaa !15
  %1245 = sext i8 %1244 to i32
  %1246 = icmp eq i32 %1245, 111
  br i1 %1246, label %1247, label %1314

1247:                                             ; preds = %1241
  %1248 = load ptr, ptr %41, align 8, !tbaa !5
  %1249 = getelementptr inbounds i8, ptr %1248, i64 1
  %1250 = load i8, ptr %1249, align 1, !tbaa !15
  %1251 = sext i8 %1250 to i32
  %1252 = icmp eq i32 %1251, 32
  br i1 %1252, label %1259, label %1253

1253:                                             ; preds = %1247
  %1254 = load ptr, ptr %41, align 8, !tbaa !5
  %1255 = getelementptr inbounds i8, ptr %1254, i64 1
  %1256 = load i8, ptr %1255, align 1, !tbaa !15
  %1257 = sext i8 %1256 to i32
  %1258 = icmp eq i32 %1257, 9
  br i1 %1258, label %1259, label %1314

1259:                                             ; preds = %1253, %1247
  call void @llvm.lifetime.start.p0(i64 1, ptr %106) #10
  %1260 = load i32, ptr %30, align 4, !tbaa !11
  %1261 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1262 = trunc i8 %1261 to i1
  %1263 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %35, ptr noundef nonnull align 8 dereferenceable(72) %27, ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %1260, ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext %1262, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %1264 unwind label %1283

1264:                                             ; preds = %1259
  %1265 = zext i1 %1263 to i8
  store i8 %1265, ptr %106, align 1, !tbaa !9
  %1266 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %35, i32 0, i32 1
  %1267 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1266, i32 0, i32 0
  %1268 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1267) #10
  %1269 = icmp ugt i64 %1268, 0
  br i1 %1269, label %1280, label %1270

1270:                                             ; preds = %1264
  %1271 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %35, i32 0, i32 2
  %1272 = getelementptr inbounds %"struct.tinyobj::lines_t", ptr %1271, i32 0, i32 0
  %1273 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1272) #10
  %1274 = icmp ugt i64 %1273, 0
  br i1 %1274, label %1280, label %1275

1275:                                             ; preds = %1270
  %1276 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %35, i32 0, i32 3
  %1277 = getelementptr inbounds %"struct.tinyobj::points_t", ptr %1276, i32 0, i32 0
  %1278 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1277) #10
  %1279 = icmp ugt i64 %1278, 0
  br i1 %1279, label %1280, label %1287

1280:                                             ; preds = %1275, %1270, %1264
  %1281 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1281, ptr noundef nonnull align 8 dereferenceable(224) %35)
          to label %1282 unwind label %1283

1282:                                             ; preds = %1280
  br label %1287

1283:                                             ; preds = %1287, %1280, %1259
  %1284 = landingpad { ptr, i32 }
          cleanup
  %1285 = extractvalue { ptr, i32 } %1284, 0
  store ptr %1285, ptr %39, align 8
  %1286 = extractvalue { ptr, i32 } %1284, 1
  store i32 %1286, ptr %40, align 4
  br label %1313

1287:                                             ; preds = %1282, %1275
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %27)
          to label %1288 unwind label %1283

1288:                                             ; preds = %1287
  call void @llvm.lifetime.start.p0(i64 224, ptr %107) #10
  call void @llvm.memset.p0.i64(ptr align 8 %107, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %107) #10
  %1289 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %35, ptr noundef nonnull align 8 dereferenceable(224) %107) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %107) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %107) #10
  %1290 = load ptr, ptr %41, align 8, !tbaa !5
  %1291 = getelementptr inbounds i8, ptr %1290, i64 2
  store ptr %1291, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 392, ptr %108) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %108)
          to label %1292 unwind label %1299

1292:                                             ; preds = %1288
  %1293 = getelementptr inbounds i8, ptr %108, i64 16
  %1294 = load ptr, ptr %41, align 8, !tbaa !5
  %1295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1293, ptr noundef %1294)
          to label %1296 unwind label %1303

1296:                                             ; preds = %1292
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(128) %108)
          to label %1297 unwind label %1307

1297:                                             ; preds = %1296
  %1298 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(32) %109) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #10
  store i32 2, ptr %42, align 4
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %108) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %108) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #10
  br label %1547

1299:                                             ; preds = %1288
  %1300 = landingpad { ptr, i32 }
          cleanup
  %1301 = extractvalue { ptr, i32 } %1300, 0
  store ptr %1301, ptr %39, align 8
  %1302 = extractvalue { ptr, i32 } %1300, 1
  store i32 %1302, ptr %40, align 4
  br label %1312

1303:                                             ; preds = %1292
  %1304 = landingpad { ptr, i32 }
          cleanup
  %1305 = extractvalue { ptr, i32 } %1304, 0
  store ptr %1305, ptr %39, align 8
  %1306 = extractvalue { ptr, i32 } %1304, 1
  store i32 %1306, ptr %40, align 4
  br label %1311

1307:                                             ; preds = %1296
  %1308 = landingpad { ptr, i32 }
          cleanup
  %1309 = extractvalue { ptr, i32 } %1308, 0
  store ptr %1309, ptr %39, align 8
  %1310 = extractvalue { ptr, i32 } %1308, 1
  store i32 %1310, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #10
  br label %1311

1311:                                             ; preds = %1307, %1303
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %108) #10
  br label %1312

1312:                                             ; preds = %1311, %1299
  call void @llvm.lifetime.end.p0(i64 392, ptr %108) #10
  br label %1313

1313:                                             ; preds = %1312, %1283
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #10
  br label %1550

1314:                                             ; preds = %1253, %1241
  %1315 = load ptr, ptr %41, align 8, !tbaa !5
  %1316 = getelementptr inbounds i8, ptr %1315, i64 0
  %1317 = load i8, ptr %1316, align 1, !tbaa !15
  %1318 = sext i8 %1317 to i32
  %1319 = icmp eq i32 %1318, 116
  br i1 %1319, label %1320, label %1465

1320:                                             ; preds = %1314
  %1321 = load ptr, ptr %41, align 8, !tbaa !5
  %1322 = getelementptr inbounds i8, ptr %1321, i64 1
  %1323 = load i8, ptr %1322, align 1, !tbaa !15
  %1324 = sext i8 %1323 to i32
  %1325 = icmp eq i32 %1324, 32
  br i1 %1325, label %1332, label %1326

1326:                                             ; preds = %1320
  %1327 = load ptr, ptr %41, align 8, !tbaa !5
  %1328 = getelementptr inbounds i8, ptr %1327, i64 1
  %1329 = load i8, ptr %1328, align 1, !tbaa !15
  %1330 = sext i8 %1329 to i32
  %1331 = icmp eq i32 %1330, 9
  br i1 %1331, label %1332, label %1465

1332:                                             ; preds = %1326, %1320
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #10
  store i32 8192, ptr %110, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 104, ptr %111) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %111) #10
  %1333 = load ptr, ptr %41, align 8, !tbaa !5
  %1334 = getelementptr inbounds i8, ptr %1333, i64 2
  store ptr %1334, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef %41)
          to label %1335 unwind label %1345

1335:                                             ; preds = %1332
  %1336 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 0
  %1337 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1336, ptr noundef nonnull align 8 dereferenceable(32) %112) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %113) #10
  %1338 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef %41)
          to label %1339 unwind label %1349

1339:                                             ; preds = %1335
  store { i64, i32 } %1338, ptr %114, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %113, ptr align 8 %114, i64 12, i1 false)
  %1340 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  %1341 = load i32, ptr %1340, align 4, !tbaa !54
  %1342 = icmp slt i32 %1341, 0
  br i1 %1342, label %1343, label %1353

1343:                                             ; preds = %1339
  %1344 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  store i32 0, ptr %1344, align 4, !tbaa !54
  br label %1353

1345:                                             ; preds = %1332
  %1346 = landingpad { ptr, i32 }
          cleanup
  %1347 = extractvalue { ptr, i32 } %1346, 0
  store ptr %1347, ptr %39, align 8
  %1348 = extractvalue { ptr, i32 } %1346, 1
  store i32 %1348, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #10
  br label %1464

1349:                                             ; preds = %1461, %1435, %1409, %1383, %1335
  %1350 = landingpad { ptr, i32 }
          cleanup
  %1351 = extractvalue { ptr, i32 } %1350, 0
  store ptr %1351, ptr %39, align 8
  %1352 = extractvalue { ptr, i32 } %1350, 1
  store i32 %1352, ptr %40, align 4
  br label %1463

1353:                                             ; preds = %1343, %1339
  %1354 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  %1355 = load i32, ptr %1354, align 4, !tbaa !54
  %1356 = icmp sgt i32 %1355, 8192
  br i1 %1356, label %1357, label %1359

1357:                                             ; preds = %1353
  %1358 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  store i32 8192, ptr %1358, align 4, !tbaa !54
  br label %1359

1359:                                             ; preds = %1357, %1353
  %1360 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  %1361 = load i32, ptr %1360, align 4, !tbaa !56
  %1362 = icmp slt i32 %1361, 0
  br i1 %1362, label %1363, label %1365

1363:                                             ; preds = %1359
  %1364 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  store i32 0, ptr %1364, align 4, !tbaa !56
  br label %1365

1365:                                             ; preds = %1363, %1359
  %1366 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  %1367 = load i32, ptr %1366, align 4, !tbaa !56
  %1368 = icmp sgt i32 %1367, 8192
  br i1 %1368, label %1369, label %1371

1369:                                             ; preds = %1365
  %1370 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  store i32 8192, ptr %1370, align 4, !tbaa !56
  br label %1371

1371:                                             ; preds = %1369, %1365
  %1372 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  %1373 = load i32, ptr %1372, align 4, !tbaa !57
  %1374 = icmp slt i32 %1373, 0
  br i1 %1374, label %1375, label %1377

1375:                                             ; preds = %1371
  %1376 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  store i32 0, ptr %1376, align 4, !tbaa !57
  br label %1377

1377:                                             ; preds = %1375, %1371
  %1378 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  %1379 = load i32, ptr %1378, align 4, !tbaa !57
  %1380 = icmp sgt i32 %1379, 8192
  br i1 %1380, label %1381, label %1383

1381:                                             ; preds = %1377
  %1382 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  store i32 8192, ptr %1382, align 4, !tbaa !57
  br label %1383

1383:                                             ; preds = %1381, %1377
  %1384 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 1
  %1385 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  %1386 = load i32, ptr %1385, align 4, !tbaa !54
  %1387 = sext i32 %1386 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1384, i64 noundef %1387)
          to label %1388 unwind label %1349

1388:                                             ; preds = %1383
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #10
  store i64 0, ptr %115, align 8, !tbaa !13
  br label %1389

1389:                                             ; preds = %1402, %1388
  %1390 = load i64, ptr %115, align 8, !tbaa !13
  %1391 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 0
  %1392 = load i32, ptr %1391, align 4, !tbaa !54
  %1393 = sext i32 %1392 to i64
  %1394 = icmp ult i64 %1390, %1393
  br i1 %1394, label %1396, label %1395

1395:                                             ; preds = %1389
  store i32 20, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #10
  br label %1409

1396:                                             ; preds = %1389
  %1397 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %41)
          to label %1398 unwind label %1405

1398:                                             ; preds = %1396
  %1399 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 1
  %1400 = load i64, ptr %115, align 8, !tbaa !13
  %1401 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1399, i64 noundef %1400) #10
  store i32 %1397, ptr %1401, align 4, !tbaa !11
  br label %1402

1402:                                             ; preds = %1398
  %1403 = load i64, ptr %115, align 8, !tbaa !13
  %1404 = add i64 %1403, 1
  store i64 %1404, ptr %115, align 8, !tbaa !13
  br label %1389, !llvm.loop !58

1405:                                             ; preds = %1396
  %1406 = landingpad { ptr, i32 }
          cleanup
  %1407 = extractvalue { ptr, i32 } %1406, 0
  store ptr %1407, ptr %39, align 8
  %1408 = extractvalue { ptr, i32 } %1406, 1
  store i32 %1408, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #10
  br label %1463

1409:                                             ; preds = %1395
  %1410 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 2
  %1411 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  %1412 = load i32, ptr %1411, align 4, !tbaa !56
  %1413 = sext i32 %1412 to i64
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1410, i64 noundef %1413)
          to label %1414 unwind label %1349

1414:                                             ; preds = %1409
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #10
  store i64 0, ptr %116, align 8, !tbaa !13
  br label %1415

1415:                                             ; preds = %1428, %1414
  %1416 = load i64, ptr %116, align 8, !tbaa !13
  %1417 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 1
  %1418 = load i32, ptr %1417, align 4, !tbaa !56
  %1419 = sext i32 %1418 to i64
  %1420 = icmp ult i64 %1416, %1419
  br i1 %1420, label %1422, label %1421

1421:                                             ; preds = %1415
  store i32 23, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #10
  br label %1435

1422:                                             ; preds = %1415
  %1423 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %41, double noundef 0.000000e+00)
          to label %1424 unwind label %1431

1424:                                             ; preds = %1422
  %1425 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 2
  %1426 = load i64, ptr %116, align 8, !tbaa !13
  %1427 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1425, i64 noundef %1426) #10
  store float %1423, ptr %1427, align 4, !tbaa !26
  br label %1428

1428:                                             ; preds = %1424
  %1429 = load i64, ptr %116, align 8, !tbaa !13
  %1430 = add i64 %1429, 1
  store i64 %1430, ptr %116, align 8, !tbaa !13
  br label %1415, !llvm.loop !59

1431:                                             ; preds = %1422
  %1432 = landingpad { ptr, i32 }
          cleanup
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %39, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #10
  br label %1463

1435:                                             ; preds = %1421
  %1436 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 3
  %1437 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  %1438 = load i32, ptr %1437, align 4, !tbaa !57
  %1439 = sext i32 %1438 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1436, i64 noundef %1439)
          to label %1440 unwind label %1349

1440:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #10
  store i64 0, ptr %117, align 8, !tbaa !13
  br label %1441

1441:                                             ; preds = %1454, %1440
  %1442 = load i64, ptr %117, align 8, !tbaa !13
  %1443 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %113, i32 0, i32 2
  %1444 = load i32, ptr %1443, align 4, !tbaa !57
  %1445 = sext i32 %1444 to i64
  %1446 = icmp ult i64 %1442, %1445
  br i1 %1446, label %1448, label %1447

1447:                                             ; preds = %1441
  store i32 26, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #10
  br label %1461

1448:                                             ; preds = %1441
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef %41)
          to label %1449 unwind label %1457

1449:                                             ; preds = %1448
  %1450 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %111, i32 0, i32 3
  %1451 = load i64, ptr %117, align 8, !tbaa !13
  %1452 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1450, i64 noundef %1451) #10
  %1453 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1452, ptr noundef nonnull align 8 dereferenceable(32) %118) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #10
  br label %1454

1454:                                             ; preds = %1449
  %1455 = load i64, ptr %117, align 8, !tbaa !13
  %1456 = add i64 %1455, 1
  store i64 %1456, ptr %117, align 8, !tbaa !13
  br label %1441, !llvm.loop !60

1457:                                             ; preds = %1448
  %1458 = landingpad { ptr, i32 }
          cleanup
  %1459 = extractvalue { ptr, i32 } %1458, 0
  store ptr %1459, ptr %39, align 8
  %1460 = extractvalue { ptr, i32 } %1458, 1
  store i32 %1460, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #10
  br label %1463

1461:                                             ; preds = %1447
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(104) %111)
          to label %1462 unwind label %1349

1462:                                             ; preds = %1461
  store i32 2, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %113) #10
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %111) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %111) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #10
  br label %1547

1463:                                             ; preds = %1457, %1431, %1405, %1349
  call void @llvm.lifetime.end.p0(i64 12, ptr %113) #10
  br label %1464

1464:                                             ; preds = %1463, %1345
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %111) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %111) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #10
  br label %1550

1465:                                             ; preds = %1326, %1314
  %1466 = load ptr, ptr %41, align 8, !tbaa !5
  %1467 = getelementptr inbounds i8, ptr %1466, i64 0
  %1468 = load i8, ptr %1467, align 1, !tbaa !15
  %1469 = sext i8 %1468 to i32
  %1470 = icmp eq i32 %1469, 115
  br i1 %1470, label %1471, label %1546

1471:                                             ; preds = %1465
  %1472 = load ptr, ptr %41, align 8, !tbaa !5
  %1473 = getelementptr inbounds i8, ptr %1472, i64 1
  %1474 = load i8, ptr %1473, align 1, !tbaa !15
  %1475 = sext i8 %1474 to i32
  %1476 = icmp eq i32 %1475, 32
  br i1 %1476, label %1483, label %1477

1477:                                             ; preds = %1471
  %1478 = load ptr, ptr %41, align 8, !tbaa !5
  %1479 = getelementptr inbounds i8, ptr %1478, i64 1
  %1480 = load i8, ptr %1479, align 1, !tbaa !15
  %1481 = sext i8 %1480 to i32
  %1482 = icmp eq i32 %1481, 9
  br i1 %1482, label %1483, label %1546

1483:                                             ; preds = %1477, %1471
  %1484 = load ptr, ptr %41, align 8, !tbaa !5
  %1485 = getelementptr inbounds i8, ptr %1484, i64 2
  store ptr %1485, ptr %41, align 8, !tbaa !5
  %1486 = load ptr, ptr %41, align 8, !tbaa !5
  %1487 = call i64 @strspn(ptr noundef %1486, ptr noundef @.str) #11
  %1488 = load ptr, ptr %41, align 8, !tbaa !5
  %1489 = getelementptr inbounds i8, ptr %1488, i64 %1487
  store ptr %1489, ptr %41, align 8, !tbaa !5
  %1490 = load ptr, ptr %41, align 8, !tbaa !5
  %1491 = getelementptr inbounds i8, ptr %1490, i64 0
  %1492 = load i8, ptr %1491, align 1, !tbaa !15
  %1493 = sext i8 %1492 to i32
  %1494 = icmp eq i32 %1493, 0
  br i1 %1494, label %1495, label %1496

1495:                                             ; preds = %1483
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

1496:                                             ; preds = %1483
  %1497 = load ptr, ptr %41, align 8, !tbaa !5
  %1498 = getelementptr inbounds i8, ptr %1497, i64 0
  %1499 = load i8, ptr %1498, align 1, !tbaa !15
  %1500 = sext i8 %1499 to i32
  %1501 = icmp eq i32 %1500, 13
  br i1 %1501, label %1508, label %1502

1502:                                             ; preds = %1496
  %1503 = load ptr, ptr %41, align 8, !tbaa !5
  %1504 = getelementptr inbounds i8, ptr %1503, i64 1
  %1505 = load i8, ptr %1504, align 1, !tbaa !15
  %1506 = sext i8 %1505 to i32
  %1507 = icmp eq i32 %1506, 10
  br i1 %1507, label %1508, label %1509

1508:                                             ; preds = %1502, %1496
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

1509:                                             ; preds = %1502
  %1510 = load ptr, ptr %41, align 8, !tbaa !5
  %1511 = call i64 @strlen(ptr noundef %1510) #11
  %1512 = icmp uge i64 %1511, 3
  br i1 %1512, label %1513, label %1532

1513:                                             ; preds = %1509
  %1514 = load ptr, ptr %41, align 8, !tbaa !5
  %1515 = getelementptr inbounds i8, ptr %1514, i64 0
  %1516 = load i8, ptr %1515, align 1, !tbaa !15
  %1517 = sext i8 %1516 to i32
  %1518 = icmp eq i32 %1517, 111
  br i1 %1518, label %1519, label %1532

1519:                                             ; preds = %1513
  %1520 = load ptr, ptr %41, align 8, !tbaa !5
  %1521 = getelementptr inbounds i8, ptr %1520, i64 1
  %1522 = load i8, ptr %1521, align 1, !tbaa !15
  %1523 = sext i8 %1522 to i32
  %1524 = icmp eq i32 %1523, 102
  br i1 %1524, label %1525, label %1532

1525:                                             ; preds = %1519
  %1526 = load ptr, ptr %41, align 8, !tbaa !5
  %1527 = getelementptr inbounds i8, ptr %1526, i64 2
  %1528 = load i8, ptr %1527, align 1, !tbaa !15
  %1529 = sext i8 %1528 to i32
  %1530 = icmp eq i32 %1529, 102
  br i1 %1530, label %1531, label %1532

1531:                                             ; preds = %1525
  store i32 0, ptr %31, align 4, !tbaa !11
  br label %1545

1532:                                             ; preds = %1525, %1519, %1513, %1509
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #10
  %1533 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %41)
          to label %1534 unwind label %1538

1534:                                             ; preds = %1532
  store i32 %1533, ptr %119, align 4, !tbaa !11
  %1535 = load i32, ptr %119, align 4, !tbaa !11
  %1536 = icmp slt i32 %1535, 0
  br i1 %1536, label %1537, label %1542

1537:                                             ; preds = %1534
  store i32 0, ptr %31, align 4, !tbaa !11
  br label %1544

1538:                                             ; preds = %1532
  %1539 = landingpad { ptr, i32 }
          cleanup
  %1540 = extractvalue { ptr, i32 } %1539, 0
  store ptr %1540, ptr %39, align 8
  %1541 = extractvalue { ptr, i32 } %1539, 1
  store i32 %1541, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #10
  br label %1550

1542:                                             ; preds = %1534
  %1543 = load i32, ptr %119, align 4, !tbaa !11
  store i32 %1543, ptr %31, align 4, !tbaa !11
  br label %1544

1544:                                             ; preds = %1542, %1537
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #10
  br label %1545

1545:                                             ; preds = %1544, %1531
  store i32 2, ptr %42, align 4
  br label %1547, !llvm.loop !16

1546:                                             ; preds = %1477, %1465
  store i32 0, ptr %42, align 4
  br label %1547

1547:                                             ; preds = %1546, %1545, %1508, %1495, %1462, %1297, %1238, %1076, %920, %851, %688, %571, %447, %317, %283, %252, %205, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  %1548 = load i32, ptr %42, align 4
  switch i32 %1548, label %1748 [
    i32 0, label %1549
    i32 2, label %130
  ]

1549:                                             ; preds = %1547
  br label %130, !llvm.loop !16

1550:                                             ; preds = %1538, %1464, %1313, %1240, %1075, %922, %853, %689, %572, %455, %318, %284, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %1750

1551:                                             ; preds = %133
  %1552 = load i8, ptr %36, align 1, !tbaa !9, !range !18, !noundef !19
  %1553 = trunc i8 %1552 to i1
  br i1 %1553, label %1558, label %1554

1554:                                             ; preds = %1551
  %1555 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %1556 = trunc i8 %1555 to i1
  br i1 %1556, label %1558, label %1557

1557:                                             ; preds = %1554
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  br label %1558

1558:                                             ; preds = %1557, %1554, %1551
  %1559 = load i32, ptr %32, align 4, !tbaa !11
  %1560 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1561 = udiv i64 %1560, 3
  %1562 = trunc i64 %1561 to i32
  %1563 = icmp sge i32 %1559, %1562
  br i1 %1563, label %1564, label %1603

1564:                                             ; preds = %1558
  %1565 = load ptr, ptr %14, align 8, !tbaa !5
  %1566 = icmp ne ptr %1565, null
  br i1 %1566, label %1567, label %1602

1567:                                             ; preds = %1564
  call void @llvm.lifetime.start.p0(i64 392, ptr %120) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %120)
          to label %1568 unwind label %1583

1568:                                             ; preds = %1567
  %1569 = getelementptr inbounds i8, ptr %120, i64 16
  %1570 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1569, ptr noundef @.str.60)
          to label %1571 unwind label %1587

1571:                                             ; preds = %1568
  %1572 = load i64, ptr %37, align 8, !tbaa !13
  %1573 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1570, i64 noundef %1572)
          to label %1574 unwind label %1587

1574:                                             ; preds = %1571
  %1575 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1573, ptr noundef @.str.47)
          to label %1576 unwind label %1587

1576:                                             ; preds = %1574
  %1577 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1575, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1578 unwind label %1587

1578:                                             ; preds = %1576
  call void @llvm.lifetime.start.p0(i64 32, ptr %121) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef nonnull align 8 dereferenceable(128) %120)
          to label %1579 unwind label %1591

1579:                                             ; preds = %1578
  %1580 = load ptr, ptr %14, align 8, !tbaa !5
  %1581 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1580, ptr noundef nonnull align 8 dereferenceable(32) %121)
          to label %1582 unwind label %1595

1582:                                             ; preds = %1579
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %120) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %120) #10
  br label %1602

1583:                                             ; preds = %1567
  %1584 = landingpad { ptr, i32 }
          cleanup
  %1585 = extractvalue { ptr, i32 } %1584, 0
  store ptr %1585, ptr %39, align 8
  %1586 = extractvalue { ptr, i32 } %1584, 1
  store i32 %1586, ptr %40, align 4
  br label %1601

1587:                                             ; preds = %1576, %1574, %1571, %1568
  %1588 = landingpad { ptr, i32 }
          cleanup
  %1589 = extractvalue { ptr, i32 } %1588, 0
  store ptr %1589, ptr %39, align 8
  %1590 = extractvalue { ptr, i32 } %1588, 1
  store i32 %1590, ptr %40, align 4
  br label %1600

1591:                                             ; preds = %1578
  %1592 = landingpad { ptr, i32 }
          cleanup
  %1593 = extractvalue { ptr, i32 } %1592, 0
  store ptr %1593, ptr %39, align 8
  %1594 = extractvalue { ptr, i32 } %1592, 1
  store i32 %1594, ptr %40, align 4
  br label %1599

1595:                                             ; preds = %1579
  %1596 = landingpad { ptr, i32 }
          cleanup
  %1597 = extractvalue { ptr, i32 } %1596, 0
  store ptr %1597, ptr %39, align 8
  %1598 = extractvalue { ptr, i32 } %1596, 1
  store i32 %1598, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #10
  br label %1599

1599:                                             ; preds = %1595, %1591
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #10
  br label %1600

1600:                                             ; preds = %1599, %1587
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %120) #10
  br label %1601

1601:                                             ; preds = %1600, %1583
  call void @llvm.lifetime.end.p0(i64 392, ptr %120) #10
  br label %1750

1602:                                             ; preds = %1582, %1564
  br label %1603

1603:                                             ; preds = %1602, %1558
  %1604 = load i32, ptr %33, align 4, !tbaa !11
  %1605 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %1606 = udiv i64 %1605, 3
  %1607 = trunc i64 %1606 to i32
  %1608 = icmp sge i32 %1604, %1607
  br i1 %1608, label %1609, label %1648

1609:                                             ; preds = %1603
  %1610 = load ptr, ptr %14, align 8, !tbaa !5
  %1611 = icmp ne ptr %1610, null
  br i1 %1611, label %1612, label %1647

1612:                                             ; preds = %1609
  call void @llvm.lifetime.start.p0(i64 392, ptr %122) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %122)
          to label %1613 unwind label %1628

1613:                                             ; preds = %1612
  %1614 = getelementptr inbounds i8, ptr %122, i64 16
  %1615 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1614, ptr noundef @.str.61)
          to label %1616 unwind label %1632

1616:                                             ; preds = %1613
  %1617 = load i64, ptr %37, align 8, !tbaa !13
  %1618 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1615, i64 noundef %1617)
          to label %1619 unwind label %1632

1619:                                             ; preds = %1616
  %1620 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1618, ptr noundef @.str.47)
          to label %1621 unwind label %1632

1621:                                             ; preds = %1619
  %1622 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1620, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1623 unwind label %1632

1623:                                             ; preds = %1621
  call void @llvm.lifetime.start.p0(i64 32, ptr %123) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %123, ptr noundef nonnull align 8 dereferenceable(128) %122)
          to label %1624 unwind label %1636

1624:                                             ; preds = %1623
  %1625 = load ptr, ptr %14, align 8, !tbaa !5
  %1626 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1625, ptr noundef nonnull align 8 dereferenceable(32) %123)
          to label %1627 unwind label %1640

1627:                                             ; preds = %1624
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %123) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %122) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %122) #10
  br label %1647

1628:                                             ; preds = %1612
  %1629 = landingpad { ptr, i32 }
          cleanup
  %1630 = extractvalue { ptr, i32 } %1629, 0
  store ptr %1630, ptr %39, align 8
  %1631 = extractvalue { ptr, i32 } %1629, 1
  store i32 %1631, ptr %40, align 4
  br label %1646

1632:                                             ; preds = %1621, %1619, %1616, %1613
  %1633 = landingpad { ptr, i32 }
          cleanup
  %1634 = extractvalue { ptr, i32 } %1633, 0
  store ptr %1634, ptr %39, align 8
  %1635 = extractvalue { ptr, i32 } %1633, 1
  store i32 %1635, ptr %40, align 4
  br label %1645

1636:                                             ; preds = %1623
  %1637 = landingpad { ptr, i32 }
          cleanup
  %1638 = extractvalue { ptr, i32 } %1637, 0
  store ptr %1638, ptr %39, align 8
  %1639 = extractvalue { ptr, i32 } %1637, 1
  store i32 %1639, ptr %40, align 4
  br label %1644

1640:                                             ; preds = %1624
  %1641 = landingpad { ptr, i32 }
          cleanup
  %1642 = extractvalue { ptr, i32 } %1641, 0
  store ptr %1642, ptr %39, align 8
  %1643 = extractvalue { ptr, i32 } %1641, 1
  store i32 %1643, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #10
  br label %1644

1644:                                             ; preds = %1640, %1636
  call void @llvm.lifetime.end.p0(i64 32, ptr %123) #10
  br label %1645

1645:                                             ; preds = %1644, %1632
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %122) #10
  br label %1646

1646:                                             ; preds = %1645, %1628
  call void @llvm.lifetime.end.p0(i64 392, ptr %122) #10
  br label %1750

1647:                                             ; preds = %1627, %1609
  br label %1648

1648:                                             ; preds = %1647, %1603
  %1649 = load i32, ptr %34, align 4, !tbaa !11
  %1650 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1651 = udiv i64 %1650, 2
  %1652 = trunc i64 %1651 to i32
  %1653 = icmp sge i32 %1649, %1652
  br i1 %1653, label %1654, label %1693

1654:                                             ; preds = %1648
  %1655 = load ptr, ptr %14, align 8, !tbaa !5
  %1656 = icmp ne ptr %1655, null
  br i1 %1656, label %1657, label %1692

1657:                                             ; preds = %1654
  call void @llvm.lifetime.start.p0(i64 392, ptr %124) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %124)
          to label %1658 unwind label %1673

1658:                                             ; preds = %1657
  %1659 = getelementptr inbounds i8, ptr %124, i64 16
  %1660 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1659, ptr noundef @.str.62)
          to label %1661 unwind label %1677

1661:                                             ; preds = %1658
  %1662 = load i64, ptr %37, align 8, !tbaa !13
  %1663 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1660, i64 noundef %1662)
          to label %1664 unwind label %1677

1664:                                             ; preds = %1661
  %1665 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1663, ptr noundef @.str.47)
          to label %1666 unwind label %1677

1666:                                             ; preds = %1664
  %1667 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1665, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1668 unwind label %1677

1668:                                             ; preds = %1666
  call void @llvm.lifetime.start.p0(i64 32, ptr %125) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %125, ptr noundef nonnull align 8 dereferenceable(128) %124)
          to label %1669 unwind label %1681

1669:                                             ; preds = %1668
  %1670 = load ptr, ptr %14, align 8, !tbaa !5
  %1671 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1670, ptr noundef nonnull align 8 dereferenceable(32) %125)
          to label %1672 unwind label %1685

1672:                                             ; preds = %1669
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %124) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %124) #10
  br label %1692

1673:                                             ; preds = %1657
  %1674 = landingpad { ptr, i32 }
          cleanup
  %1675 = extractvalue { ptr, i32 } %1674, 0
  store ptr %1675, ptr %39, align 8
  %1676 = extractvalue { ptr, i32 } %1674, 1
  store i32 %1676, ptr %40, align 4
  br label %1691

1677:                                             ; preds = %1666, %1664, %1661, %1658
  %1678 = landingpad { ptr, i32 }
          cleanup
  %1679 = extractvalue { ptr, i32 } %1678, 0
  store ptr %1679, ptr %39, align 8
  %1680 = extractvalue { ptr, i32 } %1678, 1
  store i32 %1680, ptr %40, align 4
  br label %1690

1681:                                             ; preds = %1668
  %1682 = landingpad { ptr, i32 }
          cleanup
  %1683 = extractvalue { ptr, i32 } %1682, 0
  store ptr %1683, ptr %39, align 8
  %1684 = extractvalue { ptr, i32 } %1682, 1
  store i32 %1684, ptr %40, align 4
  br label %1689

1685:                                             ; preds = %1669
  %1686 = landingpad { ptr, i32 }
          cleanup
  %1687 = extractvalue { ptr, i32 } %1686, 0
  store ptr %1687, ptr %39, align 8
  %1688 = extractvalue { ptr, i32 } %1686, 1
  store i32 %1688, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #10
  br label %1689

1689:                                             ; preds = %1685, %1681
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #10
  br label %1690

1690:                                             ; preds = %1689, %1677
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %124) #10
  br label %1691

1691:                                             ; preds = %1690, %1673
  call void @llvm.lifetime.end.p0(i64 392, ptr %124) #10
  br label %1750

1692:                                             ; preds = %1672, %1654
  br label %1693

1693:                                             ; preds = %1692, %1648
  call void @llvm.lifetime.start.p0(i64 1, ptr %126) #10
  %1694 = load i32, ptr %30, align 4, !tbaa !11
  %1695 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1696 = trunc i8 %1695 to i1
  %1697 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %35, ptr noundef nonnull align 8 dereferenceable(72) %27, ptr noundef nonnull align 8 dereferenceable(24) %26, i32 noundef %1694, ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext %1696, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %1698 unwind label %1710

1698:                                             ; preds = %1693
  %1699 = zext i1 %1697 to i8
  store i8 %1699, ptr %126, align 1, !tbaa !9
  %1700 = load i8, ptr %126, align 1, !tbaa !9, !range !18, !noundef !19
  %1701 = trunc i8 %1700 to i1
  br i1 %1701, label %1707, label %1702

1702:                                             ; preds = %1698
  %1703 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %35, i32 0, i32 1
  %1704 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1703, i32 0, i32 0
  %1705 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1704) #10
  %1706 = icmp ne i64 %1705, 0
  br i1 %1706, label %1707, label %1714

1707:                                             ; preds = %1702, %1698
  %1708 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1708, ptr noundef nonnull align 8 dereferenceable(224) %35)
          to label %1709 unwind label %1710

1709:                                             ; preds = %1707
  br label %1714

1710:                                             ; preds = %1714, %1707, %1693
  %1711 = landingpad { ptr, i32 }
          cleanup
  %1712 = extractvalue { ptr, i32 } %1711, 0
  store ptr %1712, ptr %39, align 8
  %1713 = extractvalue { ptr, i32 } %1711, 1
  store i32 %1713, ptr %40, align 4
  br label %1747

1714:                                             ; preds = %1709, %1702
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %27)
          to label %1715 unwind label %1710

1715:                                             ; preds = %1714
  %1716 = load ptr, ptr %15, align 8, !tbaa !5
  %1717 = icmp ne ptr %1716, null
  br i1 %1717, label %1718, label %1732

1718:                                             ; preds = %1715
  call void @llvm.lifetime.start.p0(i64 32, ptr %127) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 8 dereferenceable(128) %20)
          to label %1719 unwind label %1723

1719:                                             ; preds = %1718
  %1720 = load ptr, ptr %15, align 8, !tbaa !5
  %1721 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1720, ptr noundef nonnull align 8 dereferenceable(32) %127)
          to label %1722 unwind label %1727

1722:                                             ; preds = %1719
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #10
  br label %1732

1723:                                             ; preds = %1718
  %1724 = landingpad { ptr, i32 }
          cleanup
  %1725 = extractvalue { ptr, i32 } %1724, 0
  store ptr %1725, ptr %39, align 8
  %1726 = extractvalue { ptr, i32 } %1724, 1
  store i32 %1726, ptr %40, align 4
  br label %1731

1727:                                             ; preds = %1719
  %1728 = landingpad { ptr, i32 }
          cleanup
  %1729 = extractvalue { ptr, i32 } %1728, 0
  store ptr %1729, ptr %39, align 8
  %1730 = extractvalue { ptr, i32 } %1728, 1
  store i32 %1730, ptr %40, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #10
  br label %1731

1731:                                             ; preds = %1727, %1723
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #10
  br label %1747

1732:                                             ; preds = %1722, %1715
  %1733 = load ptr, ptr %11, align 8, !tbaa !5
  %1734 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1733, i32 0, i32 0
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1734, ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1735 = load ptr, ptr %11, align 8, !tbaa !5
  %1736 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1735, i32 0, i32 1
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1736, ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1737 = load ptr, ptr %11, align 8, !tbaa !5
  %1738 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1737, i32 0, i32 2
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1738, ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %1739 = load ptr, ptr %11, align 8, !tbaa !5
  %1740 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1739, i32 0, i32 3
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1740, ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1741 = load ptr, ptr %11, align 8, !tbaa !5
  %1742 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1741, i32 0, i32 4
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1742, ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1743 = load ptr, ptr %11, align 8, !tbaa !5
  %1744 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1743, i32 0, i32 5
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1744, ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %1745 = load ptr, ptr %11, align 8, !tbaa !5
  %1746 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1745, i32 0, i32 6
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE4swapERS3_(ptr noundef nonnull align 8 dereferenceable(24) %1746, ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  store i1 true, ptr %10, align 1
  store i32 1, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #10
  br label %1748

1747:                                             ; preds = %1731, %1710
  call void @llvm.lifetime.end.p0(i64 1, ptr %126) #10
  br label %1750

1748:                                             ; preds = %1732, %1547
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %35) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %29) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %29) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %27) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %27) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %20) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %20) #10
  %1749 = load i1, ptr %10, align 1
  ret i1 %1749

1750:                                             ; preds = %1747, %1691, %1646, %1601, %1550, %156
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %35) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %29) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %29) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %27) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %27) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %20) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %20) #10
  br label %1751

1751:                                             ; preds = %1750
  %1752 = load ptr, ptr %39, align 8
  %1753 = load i32, ptr %40, align 4
  %1754 = insertvalue { ptr, i32 } poison, ptr %1752, 0
  %1755 = insertvalue { ptr, i32 } %1754, i32 %1753, 1
  resume { ptr, i32 } %1755
}

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef) #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #5

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef, ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24)) #5

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, ptr noundef nonnull align 8 dereferenceable(24)) #5

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef) #5

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4 align 2

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #4 align 2

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind willreturn memory(read) "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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { "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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { noreturn 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = !{!21, !12, i64 0}
!21 = !{!"_ZTSN7tinyobj13skin_weight_tE", !12, i64 0, !22, i64 8}
!22 = !{!"_ZTSSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!27, !27, i64 0}
!27 = !{!"float", !7, i64 0}
!28 = !{!29, !12, i64 0}
!29 = !{!"_ZTSN7tinyobj18joint_and_weight_tE", !12, i64 0, !27, i64 4}
!30 = !{!29, !27, i64 4}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = !{!35, !12, i64 0}
!35 = !{!"_ZTSN7tinyobj6face_tE", !12, i64 0, !12, i64 4, !36, i64 8}
!36 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!41, !12, i64 0}
!41 = !{!"_ZTSN7tinyobj14vertex_index_tE", !12, i64 0, !12, i64 4, !12, i64 8}
!42 = !{!41, !12, i64 8}
!43 = !{!41, !12, i64 4}
!44 = distinct !{!44, !17}
!45 = !{!46, !12, i64 32}
!46 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !47, i64 0, !12, i64 32}
!47 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !48, i64 0, !14, i64 8, !7, i64 16}
!48 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!49 = !{!50, !50, i64 0}
!50 = !{!"vtable pointer", !8, i64 0}
!51 = distinct !{!51, !17}
!52 = distinct !{!52, !17}
!53 = distinct !{!53, !17}
!54 = !{!55, !12, i64 0}
!55 = !{!"_ZTSN7tinyobj9tag_sizesE", !12, i64 0, !12, i64 4, !12, i64 8}
!56 = !{!55, !12, i64 4}
!57 = !{!55, !12, i64 8}
!58 = distinct !{!58, !17}
!59 = distinct !{!59, !17}
!60 = distinct !{!60, !17}


; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_stringstream" = type { %"class.std::basic_iostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_iostream.base" = type { %"class.std::basic_istream.base", %"class.std::basic_ostream.base" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::skin_weight_t, std::allocator<tinyobj::skin_weight_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.41" = type { %"struct.std::_Vector_base.42" }
%"struct.std::_Vector_base.42" = type { %"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::tag_t, std::allocator<tinyobj::tag_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::PrimGroup" = type { %"class.std::vector.46", %"class.std::vector.51", %"class.std::vector.56" }
%"class.std::vector.46" = type { %"struct.std::_Vector_base.47" }
%"struct.std::_Vector_base.47" = type { %"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::face_t, std::allocator<tinyobj::face_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.51" = type { %"struct.std::_Vector_base.52" }
%"struct.std::_Vector_base.52" = type { %"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::__line_t, std::allocator<tinyobj::__line_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.3" = type { %"class.std::_Rb_tree.4" }
%"class.std::_Rb_tree.4" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, 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>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, 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 }
%"struct.tinyobj::shape_t" = type { %"class.std::__cxx11::basic_string", %"struct.tinyobj::mesh_t", %"struct.tinyobj::lines_t", %"struct.tinyobj::points_t" }
%"struct.tinyobj::mesh_t" = type { %"class.std::vector.61", %"class.std::vector.66", %"class.std::vector.71", %"class.std::vector.76", %"class.std::vector.41" }
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::index_t, std::allocator<tinyobj::index_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.71" = type { %"struct.std::_Vector_base.72" }
%"struct.std::_Vector_base.72" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.76" = type { %"struct.std::_Vector_base.77" }
%"struct.std::_Vector_base.77" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::lines_t" = type { %"class.std::vector.61", %"class.std::vector.71" }
%"struct.tinyobj::points_t" = type { %"class.std::vector.61" }
%"struct.tinyobj::skin_weight_t" = type { i32, %"class.std::vector.81" }
%"class.std::vector.81" = type { %"struct.std::_Vector_base.82" }
%"struct.std::_Vector_base.82" = type { %"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::joint_and_weight_t, std::allocator<tinyobj::joint_and_weight_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::joint_and_weight_t" = type { i32, float }
%"struct.tinyobj::__line_t" = type { %"class.std::vector.86" }
%"class.std::vector.86" = type { %"struct.std::_Vector_base.87" }
%"struct.std::_Vector_base.87" = type { %"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::vertex_index_t, std::allocator<tinyobj::vertex_index_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.tinyobj::vertex_index_t" = type { i32, i32, i32 }
%"struct.tinyobj::__points_t" = type { %"class.std::vector.86" }
%"struct.tinyobj::face_t" = type { i32, i32, %"class.std::vector.86" }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = 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::allocator" = type { i8 }
%"struct.tinyobj::tag_t" = type { %"class.std::__cxx11::basic_string", %"class.std::vector.71", %"class.std::vector.26", %"class.std::vector.20" }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [1 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb = external hidden unnamed_addr constant [161 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strspn(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strncmp(ptr nocapture noundef, ptr nocapture noundef, i64 noundef) local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef, double noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #5 align 2

declare noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, i64 noundef) local_unnamed_addr #5 align 2

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i1 noundef zeroext %7, i1 noundef zeroext %8) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %10 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %11 = alloca %"class.std::vector.26", align 8
  %12 = alloca %"class.std::vector.26", align 8
  %13 = alloca %"class.std::vector.26", align 8
  %14 = alloca %"class.std::vector.26", align 8
  %15 = alloca %"class.std::vector.31", align 8
  %16 = alloca %"class.std::vector.41", align 8
  %17 = alloca %"struct.tinyobj::PrimGroup", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::map.3", align 8
  %20 = alloca %"struct.tinyobj::shape_t", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca ptr, align 8
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca %"struct.tinyobj::skin_weight_t", align 8
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"struct.tinyobj::joint_and_weight_t", align 4
  %40 = alloca %"struct.tinyobj::__line_t", align 8
  %41 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %42 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"struct.tinyobj::__points_t", align 8
  %45 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %46 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"struct.tinyobj::face_t", align 8
  %49 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %50 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %54 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %55 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %56 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::vector.20", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::allocator", align 1
  %62 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::allocator", align 1
  %68 = alloca %"struct.tinyobj::shape_t", align 8
  %69 = alloca %"class.std::vector.20", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"struct.tinyobj::shape_t", align 8
  %76 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"struct.tinyobj::tag_t", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %10) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %10)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #10
  call void @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %17) #10
  call void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %17) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %19) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %20) #10
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %20) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %88 = getelementptr inbounds i8, ptr %39, i64 4
  %89 = getelementptr inbounds i8, ptr %34, i64 8
  %90 = getelementptr inbounds i8, ptr %48, i64 8
  %91 = getelementptr inbounds i8, ptr %49, i64 8
  %92 = getelementptr inbounds i8, ptr %49, i64 4
  %.not383 = icmp eq ptr %4, null
  %93 = getelementptr inbounds i8, ptr %50, i64 16
  %94 = getelementptr inbounds i8, ptr %17, i64 48
  %95 = getelementptr inbounds i8, ptr %46, i64 16
  %96 = getelementptr inbounds i8, ptr %17, i64 24
  %97 = getelementptr inbounds i8, ptr %42, i64 16
  %.not358 = icmp eq ptr %6, null
  %.not363 = icmp eq ptr %3, null
  %98 = getelementptr inbounds i8, ptr %62, i64 16
  %99 = getelementptr inbounds i8, ptr %78, i64 32
  %100 = getelementptr inbounds i8, ptr %78, i64 56
  %101 = getelementptr inbounds i8, ptr %78, i64 80
  %102 = getelementptr inbounds i8, ptr %20, i64 32
  %103 = getelementptr inbounds i8, ptr %20, i64 152
  %104 = getelementptr inbounds i8, ptr %20, i64 200
  %105 = getelementptr inbounds i8, ptr %76, i64 16
  %106 = getelementptr inbounds i8, ptr %73, i64 16
  %107 = getelementptr inbounds i8, ptr %71, i64 16
  br label %.outer.outer

.outer.outer:                                     ; preds = %.thread443.thread, %9
  %.0178.ph.ph = phi i64 [ %114, %.thread443.thread ], [ 0, %9 ]
  %.0176.ph.ph = phi i8 [ %.1177.ph, %.thread443.thread ], [ 1, %9 ]
  %.0170.ph.ph = phi i32 [ %.0170.ph, %.thread443.thread ], [ -1, %9 ]
  %.0165.ph.ph = phi i32 [ %.0165.ph, %.thread443.thread ], [ -1, %9 ]
  %.0160.ph.ph = phi i32 [ %.0160.ph, %.thread443.thread ], [ -1, %9 ]
  %.0156.ph.ph = phi i32 [ %.3159.ph, %.thread443.thread ], [ 0, %9 ]
  %.0150.ph.ph = phi i32 [ %.2152.ph, %.thread443.thread ], [ -1, %9 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %.thread443
  %.0178.ph = phi i64 [ %114, %.thread443 ], [ %.0178.ph.ph, %.outer.outer ]
  %.0170.ph = phi i32 [ %.4174, %.thread443 ], [ %.0170.ph.ph, %.outer.outer ]
  %.0165.ph = phi i32 [ %.4169, %.thread443 ], [ %.0165.ph.ph, %.outer.outer ]
  %.0160.ph = phi i32 [ %.4164, %.thread443 ], [ %.0160.ph.ph, %.outer.outer ]
  br label %108

108:                                              ; preds = %.outer, %140
  %.0178 = phi i64 [ %114, %140 ], [ %.0178.ph, %.outer ]
  %109 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %110 unwind label %126

110:                                              ; preds = %108
  %.not305 = icmp eq i32 %109, -1
  br i1 %.not305, label %711, label %111

111:                                              ; preds = %110
  %112 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %113 unwind label %126

113:                                              ; preds = %111
  %114 = add i64 %.0178, 1
  %115 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %.not322 = icmp eq i64 %115, 0
  br i1 %.not322, label %128, label %116

116:                                              ; preds = %113
  %117 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %118 = add i64 %117, -1
  %119 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %21, i64 noundef %118)
  %120 = load i8, ptr %119, align 1, !tbaa !5
  %121 = icmp eq i8 %120, 10
  br i1 %121, label %122, label %128

122:                                              ; preds = %116
  %123 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %124 = add i64 %123, -1
  %125 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %21, i64 noundef %124, i64 noundef -1)
          to label %128 unwind label %126

126:                                              ; preds = %136, %122, %111, %108
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %830

128:                                              ; preds = %116, %122, %113
  %129 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %.not323 = icmp eq i64 %129, 0
  br i1 %.not323, label %140, label %130

130:                                              ; preds = %128
  %131 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %132 = add i64 %131, -1
  %133 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %21, i64 noundef %132)
  %134 = load i8, ptr %133, align 1, !tbaa !5
  %135 = icmp eq i8 %134, 13
  br i1 %135, label %136, label %140

136:                                              ; preds = %130
  %137 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  %138 = add i64 %137, -1
  %139 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %21, i64 noundef %138, i64 noundef -1)
          to label %140 unwind label %126

140:                                              ; preds = %130, %136, %128
  %141 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  br i1 %141, label %108, label %142, !llvm.loop !8

142:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #10
  %143 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  store ptr %143, ptr %22, align 8, !tbaa !10
  %144 = call i64 @strspn(ptr noundef %143, ptr noundef nonnull @.str) #11
  %145 = getelementptr inbounds i8, ptr %143, i64 %144
  store ptr %145, ptr %22, align 8, !tbaa !10
  %.not324 = icmp eq ptr %143, null
  br i1 %.not324, label %146, label %147

146:                                              ; preds = %142
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.16, i32 noundef 2571, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb) #12
  unreachable

147:                                              ; preds = %142
  %148 = load i8, ptr %145, align 1, !tbaa !5
  switch i8 %148, label %.thread422 [
    i8 0, label %.thread443.thread
    i8 35, label %.thread443.thread
    i8 118, label %149
  ]

149:                                              ; preds = %147
  %150 = getelementptr inbounds i8, ptr %145, i64 1
  %151 = load i8, ptr %150, align 1, !tbaa !5
  switch i8 %151, label %.thread433 [
    i8 32, label %152
    i8 9, label %152
    i8 110, label %169
    i8 116, label %180
    i8 119, label %190
  ]

152:                                              ; preds = %149, %149
  %153 = getelementptr inbounds i8, ptr %145, i64 2
  store ptr %153, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #10
  %154 = invoke noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %22, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %155 unwind label %166

155:                                              ; preds = %152
  %156 = and i8 %.0176.ph.ph, 1
  %157 = icmp ne i8 %156, 0
  %158 = select i1 %154, i1 %157, i1 false
  %159 = zext i1 %158 to i8
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %160 unwind label %166

160:                                              ; preds = %155
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %161 unwind label %166

161:                                              ; preds = %160
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %162 unwind label %166

162:                                              ; preds = %161
  %brmerge = or i1 %158, %8
  br i1 %brmerge, label %163, label %168

163:                                              ; preds = %162
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %164 unwind label %166

164:                                              ; preds = %163
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %165 unwind label %166

165:                                              ; preds = %164
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %168 unwind label %166

166:                                              ; preds = %165, %164, %163, %161, %160, %155, %152
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #10
  br label %710

168:                                              ; preds = %162, %165
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #10
  br label %.thread443.thread

169:                                              ; preds = %149
  %170 = getelementptr inbounds i8, ptr %145, i64 2
  %171 = load i8, ptr %170, align 1, !tbaa !5
  switch i8 %171, label %.thread433 [
    i8 32, label %172
    i8 9, label %172
  ]

172:                                              ; preds = %169, %169
  %173 = getelementptr inbounds i8, ptr %145, i64 3
  store ptr %173, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #10
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %29, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef nonnull %22, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %174 unwind label %178

174:                                              ; preds = %172
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %175 unwind label %178

175:                                              ; preds = %174
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %176 unwind label %178

176:                                              ; preds = %175
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %177 unwind label %178

177:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #10
  br label %.thread443.thread

178:                                              ; preds = %176, %175, %174, %172
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #10
  br label %710

180:                                              ; preds = %149
  %181 = getelementptr inbounds i8, ptr %145, i64 2
  %182 = load i8, ptr %181, align 1, !tbaa !5
  switch i8 %182, label %.thread433 [
    i8 32, label %183
    i8 9, label %183
  ]

183:                                              ; preds = %180, %180
  %184 = getelementptr inbounds i8, ptr %145, i64 3
  store ptr %184, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef nonnull %22, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %185 unwind label %188

185:                                              ; preds = %183
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %186 unwind label %188

186:                                              ; preds = %185
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %33)
          to label %187 unwind label %188

187:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #10
  br label %.thread443.thread

188:                                              ; preds = %186, %185, %183
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #10
  br label %710

190:                                              ; preds = %149
  %191 = getelementptr inbounds i8, ptr %145, i64 2
  %192 = load i8, ptr %191, align 1, !tbaa !5
  switch i8 %192, label %.thread433 [
    i8 32, label %193
    i8 9, label %193
  ]

193:                                              ; preds = %190, %190
  %194 = getelementptr inbounds i8, ptr %145, i64 3
  store ptr %194, ptr %22, align 8, !tbaa !10
  %195 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %22)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #10
  call void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #10
  store i32 %195, ptr %34, align 8, !tbaa !12
  %.pre = load ptr, ptr %22, align 8, !tbaa !10
  br label %196

196:                                              ; preds = %231, %193
  %197 = phi ptr [ %234, %231 ], [ %.pre, %193 ]
  %198 = load i8, ptr %197, align 1, !tbaa !5
  switch i8 %198, label %switch.edge [
    i8 13, label %238
    i8 10, label %238
    i8 0, label %238
  ]

switch.edge:                                      ; preds = %196
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef nonnull %35, ptr noundef nonnull %36, ptr noundef nonnull %22, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %199 unwind label %215

199:                                              ; preds = %switch.edge
  %200 = load float, ptr %35, align 4, !tbaa !19
  %201 = fcmp uge float %200, 0.000000e+00
  br i1 %201, label %228, label %202

202:                                              ; preds = %199
  br i1 %.not383, label %.thread444, label %203

203:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %37) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %37)
          to label %204 unwind label %217

204:                                              ; preds = %203
  %205 = getelementptr inbounds i8, ptr %37, i64 16
  %206 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %205, ptr noundef nonnull @.str.46)
          to label %207 unwind label %219

207:                                              ; preds = %204
  %208 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %206, i64 noundef %114)
          to label %209 unwind label %219

209:                                              ; preds = %207
  %210 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull @.str.47)
          to label %211 unwind label %219

211:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(128) %37)
          to label %212 unwind label %221

212:                                              ; preds = %211
  %213 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %214 unwind label %223

214:                                              ; preds = %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %37) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %37) #10
  br label %.thread444

215:                                              ; preds = %switch.edge
  %216 = landingpad { ptr, i32 }
          cleanup
  br label %237

217:                                              ; preds = %203
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %227

219:                                              ; preds = %209, %207, %204
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %226

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

223:                                              ; preds = %212
  %224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  br label %225

225:                                              ; preds = %223, %221
  %.pn326 = phi { ptr, i32 } [ %224, %223 ], [ %222, %221 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  br label %226

226:                                              ; preds = %225, %219
  %.pn326.pn = phi { ptr, i32 } [ %.pn326, %225 ], [ %220, %219 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %37) #10
  br label %227

227:                                              ; preds = %226, %217
  %.pn326.pn.pn = phi { ptr, i32 } [ %.pn326.pn, %226 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %37) #10
  br label %237

228:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #10
  %229 = fptosi float %200 to i32
  store i32 %229, ptr %39, align 4, !tbaa !21
  %230 = load float, ptr %36, align 4, !tbaa !19
  store float %230, ptr %88, align 4, !tbaa !23
  invoke void @_ZNSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %89, ptr noundef nonnull align 4 dereferenceable(8) %39)
          to label %231 unwind label %235

231:                                              ; preds = %228
  %232 = load ptr, ptr %22, align 8, !tbaa !10
  %233 = call i64 @strspn(ptr noundef %232, ptr noundef nonnull @.str.12) #11
  %234 = getelementptr inbounds i8, ptr %232, i64 %233
  store ptr %234, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #10
  br label %196

235:                                              ; preds = %228
  %236 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  br label %237

237:                                              ; preds = %235, %227, %215
  %.pn326.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn, %227 ], [ %236, %235 ], [ %216, %215 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #10
  br label %241

238:                                              ; preds = %196, %196, %196
  invoke void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %.thread426 unwind label %239

.thread426:                                       ; preds = %238
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #10
  %.pre1382 = load ptr, ptr %22, align 8, !tbaa !10
  %.pre1383 = load i8, ptr %.pre1382, align 1, !tbaa !5
  br label %.thread422

.thread444:                                       ; preds = %214, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #10
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %.loopexit

239:                                              ; preds = %238
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %241

241:                                              ; preds = %239, %237
  %.pn326.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn.pn, %237 ], [ %240, %239 ]
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #10
  br label %710

.thread422:                                       ; preds = %147, %.thread426
  %242 = phi i8 [ %148, %147 ], [ %.pre1383, %.thread426 ]
  %243 = phi ptr [ %145, %147 ], [ %.pre1382, %.thread426 ]
  switch i8 %242, label %.thread433 [
    i8 108, label %244
    i8 112, label %299
    i8 102, label %354
  ]

244:                                              ; preds = %.thread422
  %245 = getelementptr inbounds i8, ptr %243, i64 1
  %246 = load i8, ptr %245, align 1, !tbaa !5
  switch i8 %246, label %.thread433 [
    i8 32, label %247
    i8 9, label %247
  ]

247:                                              ; preds = %244, %244
  %248 = getelementptr inbounds i8, ptr %243, i64 2
  store ptr %248, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %40) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  %.pre1386 = load ptr, ptr %22, align 8, !tbaa !10
  br label %249

249:                                              ; preds = %290, %247
  %250 = phi ptr [ %293, %290 ], [ %.pre1386, %247 ]
  %251 = load i8, ptr %250, align 1, !tbaa !5
  switch i8 %251, label %252 [
    i8 13, label %.critedge
    i8 10, label %.critedge
    i8 0, label %.critedge
  ]

252:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %41) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %41)
  %253 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %254 = udiv i64 %253, 3
  %255 = trunc i64 %254 to i32
  %256 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %257 = udiv i64 %256, 3
  %258 = trunc i64 %257 to i32
  %259 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %260 = lshr i64 %259, 1
  %261 = trunc i64 %260 to i32
  %262 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %22, i32 noundef %255, i32 noundef %258, i32 noundef %261, ptr noundef nonnull %41)
          to label %263 unwind label %276

263:                                              ; preds = %252
  br i1 %262, label %289, label %264

264:                                              ; preds = %263
  br i1 %.not383, label %.thread428, label %265

265:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %42) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %42)
          to label %266 unwind label %278

266:                                              ; preds = %265
  %267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @.str.48)
          to label %268 unwind label %280

268:                                              ; preds = %266
  %269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %267, i64 noundef %114)
          to label %270 unwind label %280

270:                                              ; preds = %268
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %269, ptr noundef nonnull @.str.47)
          to label %272 unwind label %280

272:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(128) %42)
          to label %273 unwind label %282

273:                                              ; preds = %272
  %274 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %275 unwind label %284

275:                                              ; preds = %273
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %42) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %42) #10
  br label %.thread428

276:                                              ; preds = %289, %252
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %294

278:                                              ; preds = %265
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %288

280:                                              ; preds = %270, %268, %266
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %287

282:                                              ; preds = %272
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %286

284:                                              ; preds = %273
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #10
  br label %286

286:                                              ; preds = %284, %282
  %.pn400 = phi { ptr, i32 } [ %285, %284 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #10
  br label %287

287:                                              ; preds = %286, %280
  %.pn400.pn = phi { ptr, i32 } [ %.pn400, %286 ], [ %281, %280 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %42) #10
  br label %288

288:                                              ; preds = %287, %278
  %.pn400.pn.pn = phi { ptr, i32 } [ %.pn400.pn, %287 ], [ %279, %278 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %42) #10
  br label %294

289:                                              ; preds = %263
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 4 dereferenceable(12) %41)
          to label %290 unwind label %276

.thread428:                                       ; preds = %264, %275
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %41) #10
  br label %297

290:                                              ; preds = %289
  %291 = load ptr, ptr %22, align 8, !tbaa !10
  %292 = call i64 @strspn(ptr noundef %291, ptr noundef nonnull @.str.12) #11
  %293 = getelementptr inbounds i8, ptr %291, i64 %292
  store ptr %293, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %41) #10
  br label %249

294:                                              ; preds = %288, %276
  %.pn404 = phi { ptr, i32 } [ %277, %276 ], [ %.pn400.pn.pn, %288 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %41) #10
  br label %298

.critedge:                                        ; preds = %249, %249, %249
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %297 unwind label %295, !llvm.loop !8

295:                                              ; preds = %.critedge
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %298

297:                                              ; preds = %.thread428, %.critedge
  %.3261 = phi i32 [ 2, %.critedge ], [ 1, %.thread428 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %40) #10
  br label %.thread443

298:                                              ; preds = %295, %294
  %.pn404.pn = phi { ptr, i32 } [ %.pn404, %294 ], [ %296, %295 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %40) #10
  br label %710

299:                                              ; preds = %.thread422
  %300 = getelementptr inbounds i8, ptr %243, i64 1
  %301 = load i8, ptr %300, align 1, !tbaa !5
  switch i8 %301, label %.thread433 [
    i8 32, label %302
    i8 9, label %302
  ]

302:                                              ; preds = %299, %299
  %303 = getelementptr inbounds i8, ptr %243, i64 2
  store ptr %303, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %44) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  %.pre1385 = load ptr, ptr %22, align 8, !tbaa !10
  br label %304

304:                                              ; preds = %345, %302
  %305 = phi ptr [ %348, %345 ], [ %.pre1385, %302 ]
  %306 = load i8, ptr %305, align 1, !tbaa !5
  switch i8 %306, label %307 [
    i8 13, label %.critedge413
    i8 10, label %.critedge413
    i8 0, label %.critedge413
  ]

307:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %45) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %45)
  %308 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %309 = udiv i64 %308, 3
  %310 = trunc i64 %309 to i32
  %311 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %312 = udiv i64 %311, 3
  %313 = trunc i64 %312 to i32
  %314 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %315 = lshr i64 %314, 1
  %316 = trunc i64 %315 to i32
  %317 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %22, i32 noundef %310, i32 noundef %313, i32 noundef %316, ptr noundef nonnull %45)
          to label %318 unwind label %331

318:                                              ; preds = %307
  br i1 %317, label %344, label %319

319:                                              ; preds = %318
  br i1 %.not383, label %.thread431, label %320

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %46) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %46)
          to label %321 unwind label %333

321:                                              ; preds = %320
  %322 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull @.str.49)
          to label %323 unwind label %335

323:                                              ; preds = %321
  %324 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %322, i64 noundef %114)
          to label %325 unwind label %335

325:                                              ; preds = %323
  %326 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %324, ptr noundef nonnull @.str.47)
          to label %327 unwind label %335

327:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(128) %46)
          to label %328 unwind label %337

328:                                              ; preds = %327
  %329 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %330 unwind label %339

330:                                              ; preds = %328
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %46) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %46) #10
  br label %.thread431

331:                                              ; preds = %344, %307
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %349

333:                                              ; preds = %320
  %334 = landingpad { ptr, i32 }
          cleanup
  br label %343

335:                                              ; preds = %325, %323, %321
  %336 = landingpad { ptr, i32 }
          cleanup
  br label %342

337:                                              ; preds = %327
  %338 = landingpad { ptr, i32 }
          cleanup
  br label %341

339:                                              ; preds = %328
  %340 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  br label %341

341:                                              ; preds = %339, %337
  %.pn392 = phi { ptr, i32 } [ %340, %339 ], [ %338, %337 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #10
  br label %342

342:                                              ; preds = %341, %335
  %.pn392.pn = phi { ptr, i32 } [ %.pn392, %341 ], [ %336, %335 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %46) #10
  br label %343

343:                                              ; preds = %342, %333
  %.pn392.pn.pn = phi { ptr, i32 } [ %.pn392.pn, %342 ], [ %334, %333 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %46) #10
  br label %349

344:                                              ; preds = %318
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 4 dereferenceable(12) %45)
          to label %345 unwind label %331

.thread431:                                       ; preds = %319, %330
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %352

345:                                              ; preds = %344
  %346 = load ptr, ptr %22, align 8, !tbaa !10
  %347 = call i64 @strspn(ptr noundef %346, ptr noundef nonnull @.str.12) #11
  %348 = getelementptr inbounds i8, ptr %346, i64 %347
  store ptr %348, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %304

349:                                              ; preds = %343, %331
  %.pn396 = phi { ptr, i32 } [ %332, %331 ], [ %.pn392.pn.pn, %343 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %353

.critedge413:                                     ; preds = %304, %304, %304
  invoke void @_ZNSt6vectorIN7tinyobj10__points_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %94, ptr noundef nonnull align 8 dereferenceable(24) %44)
          to label %352 unwind label %350, !llvm.loop !8

350:                                              ; preds = %.critedge413
  %351 = landingpad { ptr, i32 }
          cleanup
  br label %353

352:                                              ; preds = %.thread431, %.critedge413
  %.5263 = phi i32 [ 2, %.critedge413 ], [ 1, %.thread431 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %44) #10
  br label %.thread443

353:                                              ; preds = %350, %349
  %.pn396.pn = phi { ptr, i32 } [ %.pn396, %349 ], [ %351, %350 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %44) #10
  br label %710

354:                                              ; preds = %.thread422
  %355 = getelementptr inbounds i8, ptr %243, i64 1
  %356 = load i8, ptr %355, align 1, !tbaa !5
  switch i8 %356, label %.thread433 [
    i8 32, label %357
    i8 9, label %357
  ]

357:                                              ; preds = %354, %354
  %358 = getelementptr inbounds i8, ptr %243, i64 2
  store ptr %358, ptr %22, align 8, !tbaa !10
  %359 = call i64 @strspn(ptr noundef nonnull %358, ptr noundef nonnull @.str) #11
  %360 = getelementptr inbounds i8, ptr %358, i64 %359
  store ptr %360, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #10
  call void @_ZN7tinyobj6face_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48)
  store i32 %.0156.ph.ph, ptr %48, align 8, !tbaa !24
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef 3)
          to label %.preheader456.preheader unwind label %387

.preheader456.preheader:                          ; preds = %357
  %.pre1384 = load ptr, ptr %22, align 8, !tbaa !10
  br label %.preheader456

.preheader456:                                    ; preds = %.preheader456.preheader, %406
  %361 = phi ptr [ %412, %406 ], [ %.pre1384, %.preheader456.preheader ]
  %.1171 = phi i32 [ %407, %406 ], [ %.0170.ph, %.preheader456.preheader ]
  %.1166 = phi i32 [ %408, %406 ], [ %.0165.ph, %.preheader456.preheader ]
  %.1161 = phi i32 [ %409, %406 ], [ %.0160.ph, %.preheader456.preheader ]
  %362 = load i8, ptr %361, align 1, !tbaa !5
  switch i8 %362, label %363 [
    i8 13, label %.critedge416
    i8 10, label %.critedge416
    i8 0, label %.critedge416
  ]

363:                                              ; preds = %.preheader456
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %49) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %49)
  %364 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %365 = udiv i64 %364, 3
  %366 = trunc i64 %365 to i32
  %367 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %368 = udiv i64 %367, 3
  %369 = trunc i64 %368 to i32
  %370 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %371 = lshr i64 %370, 1
  %372 = trunc i64 %371 to i32
  %373 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %22, i32 noundef %366, i32 noundef %369, i32 noundef %372, ptr noundef nonnull %49)
          to label %374 unwind label %389

374:                                              ; preds = %363
  br i1 %373, label %402, label %375

375:                                              ; preds = %374
  br i1 %.not383, label %.thread435, label %376

376:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %50) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %50)
          to label %377 unwind label %391

377:                                              ; preds = %376
  %378 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull @.str.50)
          to label %379 unwind label %393

379:                                              ; preds = %377
  %380 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %378, i64 noundef %114)
          to label %381 unwind label %393

381:                                              ; preds = %379
  %382 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %380, ptr noundef nonnull @.str.47)
          to label %383 unwind label %393

383:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(128) %50)
          to label %384 unwind label %395

384:                                              ; preds = %383
  %385 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %386 unwind label %397

386:                                              ; preds = %384
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %50) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %50) #10
  br label %.thread435

387:                                              ; preds = %.critedge416, %357
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %415

389:                                              ; preds = %402, %363
  %390 = landingpad { ptr, i32 }
          cleanup
  br label %413

391:                                              ; preds = %376
  %392 = landingpad { ptr, i32 }
          cleanup
  br label %401

393:                                              ; preds = %381, %379, %377
  %394 = landingpad { ptr, i32 }
          cleanup
  br label %400

395:                                              ; preds = %383
  %396 = landingpad { ptr, i32 }
          cleanup
  br label %399

397:                                              ; preds = %384
  %398 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  br label %399

399:                                              ; preds = %397, %395
  %.pn384 = phi { ptr, i32 } [ %398, %397 ], [ %396, %395 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #10
  br label %400

400:                                              ; preds = %399, %393
  %.pn384.pn = phi { ptr, i32 } [ %.pn384, %399 ], [ %394, %393 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %50) #10
  br label %401

401:                                              ; preds = %400, %391
  %.pn384.pn.pn = phi { ptr, i32 } [ %.pn384.pn, %400 ], [ %392, %391 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %50) #10
  br label %413

402:                                              ; preds = %374
  %403 = load i32, ptr %49, align 4
  %404 = load i32, ptr %91, align 4
  %405 = load i32, ptr %92, align 4
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %90, ptr noundef nonnull align 4 dereferenceable(12) %49)
          to label %406 unwind label %389

.thread435:                                       ; preds = %375, %386
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %49) #10
  br label %414

406:                                              ; preds = %402
  %407 = call i32 @llvm.smax.i32(i32 %.1171, i32 %405)
  %408 = call i32 @llvm.smax.i32(i32 %.1166, i32 %404)
  %409 = call i32 @llvm.smax.i32(i32 %.1161, i32 %403)
  %410 = load ptr, ptr %22, align 8, !tbaa !10
  %411 = call i64 @strspn(ptr noundef %410, ptr noundef nonnull @.str.12) #11
  %412 = getelementptr inbounds i8, ptr %410, i64 %411
  store ptr %412, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %49) #10
  br label %.preheader456

413:                                              ; preds = %401, %389
  %.pn388 = phi { ptr, i32 } [ %390, %389 ], [ %.pn384.pn.pn, %401 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %49) #10
  br label %415

.critedge416:                                     ; preds = %.preheader456, %.preheader456, %.preheader456
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %414 unwind label %387, !llvm.loop !8

414:                                              ; preds = %.thread435, %.critedge416
  %.7265 = phi i32 [ 2, %.critedge416 ], [ 1, %.thread435 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #10
  br label %.thread443

415:                                              ; preds = %413, %387
  %.pn388.pn = phi { ptr, i32 } [ %.pn388, %413 ], [ %388, %387 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #10
  br label %710

.thread433:                                       ; preds = %149, %190, %.thread422, %244, %299, %354, %169, %180
  %416 = phi ptr [ %145, %180 ], [ %145, %169 ], [ %145, %149 ], [ %145, %190 ], [ %243, %354 ], [ %243, %299 ], [ %243, %244 ], [ %243, %.thread422 ]
  %417 = phi i8 [ 118, %180 ], [ 118, %169 ], [ 118, %149 ], [ 118, %190 ], [ 102, %354 ], [ 112, %299 ], [ 108, %244 ], [ %242, %.thread422 ]
  %418 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %416, ptr noundef nonnull dereferenceable(1) @.str.51, i64 noundef 6) #11
  %419 = icmp eq i32 %418, 0
  br i1 %419, label %420, label %458

420:                                              ; preds = %.thread433
  %421 = getelementptr inbounds i8, ptr %416, i64 6
  store ptr %421, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull %22)
          to label %422 unwind label %431

422:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #10
  %423 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %19, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %424 unwind label %433

424:                                              ; preds = %422
  store ptr %423, ptr %54, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #10
  %425 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  store ptr %425, ptr %56, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #10
  %426 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #10
  br i1 %426, label %427, label %435

427:                                              ; preds = %424
  %428 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  %429 = getelementptr inbounds i8, ptr %428, i64 32
  %430 = load i32, ptr %429, align 8, !tbaa !30
  br label %449

431:                                              ; preds = %420
  %432 = landingpad { ptr, i32 }
          cleanup
  br label %457

433:                                              ; preds = %422
  %434 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #10
  br label %456

435:                                              ; preds = %424
  br i1 %.not363, label %449, label %436

436:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #10
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %437 unwind label %441

437:                                              ; preds = %436
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull @.str.53)
          to label %438 unwind label %443

438:                                              ; preds = %437
  %439 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %440 unwind label %445

440:                                              ; preds = %438
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #10
  br label %449

441:                                              ; preds = %436
  %442 = landingpad { ptr, i32 }
          cleanup
  br label %448

443:                                              ; preds = %437
  %444 = landingpad { ptr, i32 }
          cleanup
  br label %447

445:                                              ; preds = %438
  %446 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br label %447

447:                                              ; preds = %445, %443
  %.pn376 = phi { ptr, i32 } [ %446, %445 ], [ %444, %443 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  br label %448

448:                                              ; preds = %447, %441
  %.pn376.pn = phi { ptr, i32 } [ %.pn376, %447 ], [ %442, %441 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #10
  br label %456

449:                                              ; preds = %435, %440, %427
  %.0183 = phi i32 [ %430, %427 ], [ -1, %440 ], [ -1, %435 ]
  %.not379 = icmp eq i32 %.0183, %.0150.ph.ph
  br i1 %.not379, label %455, label %450

450:                                              ; preds = %449
  %451 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %20, ptr noundef nonnull align 8 dereferenceable(72) %17, ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef %.0150.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %452 unwind label %453

452:                                              ; preds = %450
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  br label %455

453:                                              ; preds = %450
  %454 = landingpad { ptr, i32 }
          cleanup
  br label %456

455:                                              ; preds = %452, %449
  %.1151 = phi i32 [ %.0183, %452 ], [ %.0150.ph.ph, %449 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #10
  br label %.thread443.thread

456:                                              ; preds = %453, %448, %433
  %.pn380 = phi { ptr, i32 } [ %454, %453 ], [ %.pn376.pn, %448 ], [ %434, %433 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  br label %457

457:                                              ; preds = %456, %431
  %.pn380.pn = phi { ptr, i32 } [ %.pn380, %456 ], [ %432, %431 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #10
  br label %710

458:                                              ; preds = %.thread433
  %459 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %416, ptr noundef nonnull dereferenceable(1) @.str.54, i64 noundef 6) #11
  %460 = icmp eq i32 %459, 0
  br i1 %460, label %461, label %535

461:                                              ; preds = %458
  %462 = getelementptr inbounds i8, ptr %416, i64 6
  %463 = load i8, ptr %462, align 1, !tbaa !5
  switch i8 %463, label %535 [
    i8 32, label %464
    i8 9, label %464
  ]

464:                                              ; preds = %461, %461
  br i1 %.not358, label %.thread443.thread, label %465, !llvm.loop !8

465:                                              ; preds = %464
  %466 = getelementptr inbounds i8, ptr %416, i64 7
  store ptr %466, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %59) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #10
  %467 = load ptr, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %61) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef %467, ptr noundef nonnull align 1 dereferenceable(1) %61)
          to label %468 unwind label %484

468:                                              ; preds = %465
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %60, i8 noundef signext 32, ptr noundef nonnull align 8 dereferenceable(24) %59)
          to label %469 unwind label %486

469:                                              ; preds = %468
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %61) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #10
  %470 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  br i1 %470, label %472, label %.preheader455

.preheader455:                                    ; preds = %469
  %471 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  %.not = icmp eq i64 %471, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

472:                                              ; preds = %469
  br i1 %.not363, label %._crit_edge.thread, label %473

473:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %62) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %62)
          to label %474 unwind label %489

474:                                              ; preds = %473
  %475 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %98, ptr noundef nonnull @.str.55)
          to label %476 unwind label %491

476:                                              ; preds = %474
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %475, i64 noundef %114)
          to label %478 unwind label %491

478:                                              ; preds = %476
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %477, ptr noundef nonnull @.str.47)
          to label %480 unwind label %491

480:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(128) %62)
          to label %481 unwind label %493

481:                                              ; preds = %480
  %482 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %483 unwind label %495

483:                                              ; preds = %481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %62) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %62) #10
  br label %._crit_edge.thread

484:                                              ; preds = %465
  %485 = landingpad { ptr, i32 }
          cleanup
  br label %488

486:                                              ; preds = %468
  %487 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #10
  br label %488

488:                                              ; preds = %486, %484
  %.pn359 = phi { ptr, i32 } [ %487, %486 ], [ %485, %484 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %61) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %61) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #10
  br label %534

489:                                              ; preds = %473
  %490 = landingpad { ptr, i32 }
          cleanup
  br label %499

491:                                              ; preds = %478, %476, %474
  %492 = landingpad { ptr, i32 }
          cleanup
  br label %498

493:                                              ; preds = %480
  %494 = landingpad { ptr, i32 }
          cleanup
  br label %497

495:                                              ; preds = %481
  %496 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  br label %497

497:                                              ; preds = %495, %493
  %.pn370 = phi { ptr, i32 } [ %496, %495 ], [ %494, %493 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #10
  br label %498

498:                                              ; preds = %497, %491
  %.pn370.pn = phi { ptr, i32 } [ %.pn370, %497 ], [ %492, %491 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %62) #10
  br label %499

499:                                              ; preds = %498, %489
  %.pn370.pn.pn = phi { ptr, i32 } [ %.pn370.pn, %498 ], [ %490, %489 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %62) #10
  br label %534

500:                                              ; preds = %528
  %501 = add nuw i64 %.0179911, 1
  %502 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  %503 = icmp ult i64 %501, %502
  br i1 %503, label %.lr.ph, label %._crit_edge, !llvm.loop !35

.lr.ph:                                           ; preds = %.preheader455, %500
  %.0179911 = phi i64 [ %501, %500 ], [ 0, %.preheader455 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #10
  %504 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %59, i64 noundef %.0179911) #10
  %505 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %504) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %67) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef %505, ptr noundef nonnull align 1 dereferenceable(1) %67)
          to label %506 unwind label %516

506:                                              ; preds = %.lr.ph
  %507 = load ptr, ptr %6, align 8, !tbaa !36
  %508 = getelementptr inbounds i8, ptr %507, i64 16
  %509 = load ptr, ptr %508, align 8
  %510 = invoke noundef zeroext i1 %509(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef %2, ptr noundef nonnull %19, ptr noundef nonnull %64, ptr noundef nonnull %65)
          to label %511 unwind label %518

511:                                              ; preds = %506
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #10
  br i1 %.not363, label %523, label %512

512:                                              ; preds = %511
  %513 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  br i1 %513, label %523, label %514

514:                                              ; preds = %512
  %515 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %523 unwind label %521

516:                                              ; preds = %.lr.ph
  %517 = landingpad { ptr, i32 }
          cleanup
  br label %520

518:                                              ; preds = %506
  %519 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  br label %520

520:                                              ; preds = %518, %516
  %.pn361 = phi { ptr, i32 } [ %519, %518 ], [ %517, %516 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #10
  br label %529

521:                                              ; preds = %526, %514
  %522 = landingpad { ptr, i32 }
          cleanup
  br label %529

523:                                              ; preds = %514, %512, %511
  br i1 %.not383, label %528, label %524

524:                                              ; preds = %523
  %525 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  br i1 %525, label %528, label %526

526:                                              ; preds = %524
  %527 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %528 unwind label %521

528:                                              ; preds = %526, %524, %523
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #10
  br i1 %510, label %._crit_edge.thread, label %500

529:                                              ; preds = %521, %520
  %.pn365 = phi { ptr, i32 } [ %522, %521 ], [ %.pn361, %520 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #10
  br label %534

._crit_edge:                                      ; preds = %500, %.preheader455
  br i1 %.not363, label %._crit_edge.thread, label %530

530:                                              ; preds = %._crit_edge
  %531 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.56)
          to label %._crit_edge.thread unwind label %532

532:                                              ; preds = %530
  %533 = landingpad { ptr, i32 }
          cleanup
  br label %534

._crit_edge.thread:                               ; preds = %528, %._crit_edge, %530, %472, %483
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %59) #10
  br label %.thread443.thread, !llvm.loop !8

534:                                              ; preds = %529, %532, %499, %488
  %.pn370.pn.pn.pn = phi { ptr, i32 } [ %.pn370.pn.pn, %499 ], [ %.pn359, %488 ], [ %533, %532 ], [ %.pn365, %529 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %59) #10
  br label %710

535:                                              ; preds = %461, %458
  switch i8 %417, label %.thread443.thread [
    i8 103, label %536
    i8 111, label %617
    i8 116, label %649
    i8 115, label %687
  ]

536:                                              ; preds = %535
  %537 = getelementptr inbounds i8, ptr %416, i64 1
  %538 = load i8, ptr %537, align 1, !tbaa !5
  switch i8 %538, label %.thread443.thread [
    i8 32, label %539
    i8 9, label %539
  ]

539:                                              ; preds = %536, %536
  %540 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %20, ptr noundef nonnull align 8 dereferenceable(72) %17, ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef %.0150.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %541 unwind label %544

541:                                              ; preds = %539
  %542 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %102) #10
  %.not344 = icmp eq i64 %542, 0
  br i1 %.not344, label %546, label %543

543:                                              ; preds = %541
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %20)
          to label %546 unwind label %544

544:                                              ; preds = %543, %539
  %545 = landingpad { ptr, i32 }
          cleanup
  br label %710

546:                                              ; preds = %543, %541
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %68) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(224) %68, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  %547 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %20, ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %68) #10
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %17)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %69) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  br label %548

548:                                              ; preds = %553, %546
  %549 = load ptr, ptr %22, align 8, !tbaa !10
  %550 = load i8, ptr %549, align 1, !tbaa !5
  switch i8 %550, label %551 [
    i8 13, label %.critedge419
    i8 10, label %.critedge419
    i8 0, label %.critedge419
  ]

551:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull %22)
          to label %552 unwind label %557

552:                                              ; preds = %551
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %69, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %553 unwind label %559

553:                                              ; preds = %552
  %554 = load ptr, ptr %22, align 8, !tbaa !10
  %555 = call i64 @strspn(ptr noundef %554, ptr noundef nonnull @.str.12) #11
  %556 = getelementptr inbounds i8, ptr %554, i64 %555
  store ptr %556, ptr %22, align 8, !tbaa !10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #10
  br label %548, !llvm.loop !38

557:                                              ; preds = %551
  %558 = landingpad { ptr, i32 }
          cleanup
  br label %561

559:                                              ; preds = %552
  %560 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  br label %561

561:                                              ; preds = %559, %557
  %.pn354 = phi { ptr, i32 } [ %560, %559 ], [ %558, %557 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #10
  br label %616

.critedge419:                                     ; preds = %548, %548, %548
  %562 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  %563 = icmp ult i64 %562, 2
  br i1 %563, label %564, label %589

564:                                              ; preds = %.critedge419
  br i1 %.not363, label %615, label %565

565:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %71) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %71)
          to label %566 unwind label %578

566:                                              ; preds = %565
  %567 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull @.str.57)
          to label %568 unwind label %580

568:                                              ; preds = %566
  %569 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %567, i64 noundef %114)
          to label %570 unwind label %580

570:                                              ; preds = %568
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %569, ptr noundef nonnull @.str.58)
          to label %572 unwind label %580

572:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(128) %71)
          to label %573 unwind label %582

573:                                              ; preds = %572
  %574 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %72)
          to label %575 unwind label %584

575:                                              ; preds = %573
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #10
  %576 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.45)
          to label %577 unwind label %580

577:                                              ; preds = %575
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %71) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %71) #10
  br label %615

578:                                              ; preds = %565
  %579 = landingpad { ptr, i32 }
          cleanup
  br label %588

580:                                              ; preds = %575, %570, %568, %566
  %581 = landingpad { ptr, i32 }
          cleanup
  br label %587

582:                                              ; preds = %572
  %583 = landingpad { ptr, i32 }
          cleanup
  br label %586

584:                                              ; preds = %573
  %585 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  br label %586

586:                                              ; preds = %584, %582
  %.pn349 = phi { ptr, i32 } [ %585, %584 ], [ %583, %582 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #10
  br label %587

587:                                              ; preds = %586, %580
  %.pn351 = phi { ptr, i32 } [ %581, %580 ], [ %.pn349, %586 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %71) #10
  br label %588

588:                                              ; preds = %587, %578
  %.pn351.pn = phi { ptr, i32 } [ %.pn351, %587 ], [ %579, %578 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %71) #10
  br label %616

589:                                              ; preds = %.critedge419
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %73) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %73)
          to label %590 unwind label %595

590:                                              ; preds = %589
  %591 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %69, i64 noundef 1) #10
  %592 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull align 8 dereferenceable(32) %591)
          to label %.preheader unwind label %597

.preheader:                                       ; preds = %590
  %593 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  %594 = icmp ugt i64 %593, 2
  br i1 %594, label %.lr.ph924, label %._crit_edge925

._crit_edge925:                                   ; preds = %603, %.preheader
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %74) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(128) %73)
          to label %609 unwind label %611

595:                                              ; preds = %589
  %596 = landingpad { ptr, i32 }
          cleanup
  br label %614

597:                                              ; preds = %590
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %613

.lr.ph924:                                        ; preds = %.preheader, %603
  %.0175923 = phi i64 [ %604, %603 ], [ 2, %.preheader ]
  %599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull @.str.59)
          to label %600 unwind label %607

600:                                              ; preds = %.lr.ph924
  %601 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %69, i64 noundef %.0175923) #10
  %602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %599, ptr noundef nonnull align 8 dereferenceable(32) %601)
          to label %603 unwind label %607

603:                                              ; preds = %600
  %604 = add nuw i64 %.0175923, 1
  %605 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  %606 = icmp ult i64 %604, %605
  br i1 %606, label %.lr.ph924, label %._crit_edge925, !llvm.loop !39

607:                                              ; preds = %600, %.lr.ph924
  %608 = landingpad { ptr, i32 }
          cleanup
  br label %613

609:                                              ; preds = %._crit_edge925
  %610 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %73) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %73) #10
  br label %615

611:                                              ; preds = %._crit_edge925
  %612 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %74) #10
  br label %613

613:                                              ; preds = %611, %607, %597
  %.pn345 = phi { ptr, i32 } [ %608, %607 ], [ %612, %611 ], [ %598, %597 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %73) #10
  br label %614

614:                                              ; preds = %613, %595
  %.pn345.pn = phi { ptr, i32 } [ %.pn345, %613 ], [ %596, %595 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %73) #10
  br label %616

615:                                              ; preds = %564, %577, %609
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %69) #10
  br label %.thread443.thread

616:                                              ; preds = %614, %588, %561
  %.pn354.pn = phi { ptr, i32 } [ %.pn354, %561 ], [ %.pn351.pn, %588 ], [ %.pn345.pn, %614 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %69) #10
  br label %710

617:                                              ; preds = %535
  %618 = getelementptr inbounds i8, ptr %416, i64 1
  %619 = load i8, ptr %618, align 1, !tbaa !5
  switch i8 %619, label %.thread443.thread [
    i8 32, label %620
    i8 9, label %620
  ]

620:                                              ; preds = %617, %617
  %621 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %20, ptr noundef nonnull align 8 dereferenceable(72) %17, ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef %.0150.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %622 unwind label %629

622:                                              ; preds = %620
  %623 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %102) #10
  %.not337 = icmp eq i64 %623, 0
  br i1 %.not337, label %624, label %628

624:                                              ; preds = %622
  %625 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %103) #10
  %.not338 = icmp eq i64 %625, 0
  br i1 %.not338, label %626, label %628

626:                                              ; preds = %624
  %627 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %104) #10
  %.not339 = icmp eq i64 %627, 0
  br i1 %.not339, label %631, label %628

628:                                              ; preds = %626, %624, %622
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %20)
          to label %631 unwind label %629

629:                                              ; preds = %628, %620
  %630 = landingpad { ptr, i32 }
          cleanup
  br label %710

631:                                              ; preds = %628, %626
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %17)
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %75) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(224) %75, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %75) #10
  %632 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %20, ptr noundef nonnull align 8 dereferenceable(224) %75) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %75) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %75) #10
  %633 = load ptr, ptr %22, align 8, !tbaa !10
  %634 = getelementptr inbounds i8, ptr %633, i64 2
  store ptr %634, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %76) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76)
          to label %635 unwind label %641

635:                                              ; preds = %631
  %636 = load ptr, ptr %22, align 8, !tbaa !10
  %637 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef %636)
          to label %638 unwind label %643

638:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(128) %76)
          to label %639 unwind label %645

639:                                              ; preds = %638
  %640 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %76) #10
  br label %.thread443.thread

641:                                              ; preds = %631
  %642 = landingpad { ptr, i32 }
          cleanup
  br label %648

643:                                              ; preds = %635
  %644 = landingpad { ptr, i32 }
          cleanup
  br label %647

645:                                              ; preds = %638
  %646 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #10
  br label %647

647:                                              ; preds = %645, %643
  %.pn340 = phi { ptr, i32 } [ %646, %645 ], [ %644, %643 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76) #10
  br label %648

648:                                              ; preds = %647, %641
  %.pn340.pn = phi { ptr, i32 } [ %.pn340, %647 ], [ %642, %641 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %76) #10
  br label %710

649:                                              ; preds = %535
  %650 = getelementptr inbounds i8, ptr %416, i64 1
  %651 = load i8, ptr %650, align 1, !tbaa !5
  switch i8 %651, label %.thread443.thread [
    i8 32, label %652
    i8 9, label %652
  ]

652:                                              ; preds = %649, %649
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %78) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %78) #10
  %653 = load ptr, ptr %22, align 8, !tbaa !10
  %654 = getelementptr inbounds i8, ptr %653, i64 2
  store ptr %654, ptr %22, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull %22)
          to label %655 unwind label %664

655:                                              ; preds = %652
  %656 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #10
  %657 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef nonnull %22)
          to label %658 unwind label %666

658:                                              ; preds = %655
  %.fca.0.extract = extractvalue { i64, i32 } %657, 0
  %.fca.1.extract = extractvalue { i64, i32 } %657, 1
  %659 = and i64 %.fca.0.extract, 2147483648
  %.not332 = icmp eq i64 %659, 0
  %.sroa.024.0.insert.mask = and i64 %.fca.0.extract, -4294967296
  %spec.select = select i1 %.not332, i64 %.fca.0.extract, i64 %.sroa.024.0.insert.mask
  %.sroa.024.0.extract.trunc26 = trunc i64 %spec.select to i32
  %660 = icmp sgt i32 %.sroa.024.0.extract.trunc26, 8192
  %.sroa.024.0.insert.insert29 = or disjoint i64 %.sroa.024.0.insert.mask, 8192
  %.sroa.024.1 = select i1 %660, i64 %.sroa.024.0.insert.insert29, i64 %spec.select
  %661 = icmp slt i64 %.sroa.024.1, 0
  %.sroa.024.4.insert.mask = and i64 %.sroa.024.1, 4294967295
  %.sroa.024.2 = select i1 %661, i64 %.sroa.024.4.insert.mask, i64 %.sroa.024.1
  %662 = icmp ugt i64 %.sroa.024.2, 35188667056127
  %.sroa.024.4.insert.insert39 = or disjoint i64 %.sroa.024.4.insert.mask, 35184372088832
  %.sroa.024.3 = select i1 %662, i64 %.sroa.024.4.insert.insert39, i64 %.sroa.024.2
  %.sroa.16.0 = call i32 @llvm.smax.i32(i32 %.fca.1.extract, i32 0)
  %.sroa.16.1 = call i32 @llvm.umin.i32(i32 %.sroa.16.0, i32 8192)
  %sext = shl i64 %.sroa.024.3, 32
  %663 = ashr exact i64 %sext, 32
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %663)
          to label %.preheader454 unwind label %666

.preheader454:                                    ; preds = %658
  %.not926 = icmp eq i64 %sext, 0
  br i1 %.not926, label %._crit_edge916, label %.lr.ph915.preheader

.lr.ph915.preheader:                              ; preds = %.preheader454
  %umax = call i64 @llvm.umax.i64(i64 %663, i64 1)
  br label %.lr.ph915

664:                                              ; preds = %652
  %665 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #10
  br label %686

666:                                              ; preds = %._crit_edge922, %._crit_edge919, %._crit_edge916, %658, %655
  %667 = landingpad { ptr, i32 }
          cleanup
  br label %686

._crit_edge916:                                   ; preds = %.lr.ph915, %.preheader454
  %668 = ashr i64 %.sroa.024.3, 32
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef %668)
          to label %.preheader453 unwind label %666

.preheader453:                                    ; preds = %._crit_edge916
  %.not927 = icmp ult i64 %.sroa.024.3, 4294967296
  br i1 %.not927, label %._crit_edge919, label %.lr.ph918.preheader

.lr.ph918.preheader:                              ; preds = %.preheader453
  %umax1379 = call i64 @llvm.umax.i64(i64 %668, i64 1)
  br label %.lr.ph918

.lr.ph915:                                        ; preds = %.lr.ph915.preheader, %.lr.ph915
  %.0155914 = phi i64 [ %671, %.lr.ph915 ], [ 0, %.lr.ph915.preheader ]
  %669 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %22)
  %670 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %.0155914) #10
  store i32 %669, ptr %670, align 4, !tbaa !40
  %671 = add nuw i64 %.0155914, 1
  %exitcond.not = icmp eq i64 %671, %umax
  br i1 %exitcond.not, label %._crit_edge916, label %.lr.ph915, !llvm.loop !41

._crit_edge919:                                   ; preds = %674, %.preheader453
  %672 = zext nneg i32 %.sroa.16.1 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %672)
          to label %.preheader452 unwind label %666

.preheader452:                                    ; preds = %._crit_edge919
  %.not928 = icmp slt i32 %.fca.1.extract, 1
  br i1 %.not928, label %._crit_edge922, label %.lr.ph921

.lr.ph918:                                        ; preds = %.lr.ph918.preheader, %674
  %.0154917 = phi i64 [ %676, %674 ], [ 0, %.lr.ph918.preheader ]
  %673 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %22, double noundef 0.000000e+00)
          to label %674 unwind label %677

674:                                              ; preds = %.lr.ph918
  %675 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef %.0154917) #10
  store float %673, ptr %675, align 4, !tbaa !19
  %676 = add nuw i64 %.0154917, 1
  %exitcond1380.not = icmp eq i64 %676, %umax1379
  br i1 %exitcond1380.not, label %._crit_edge919, label %.lr.ph918, !llvm.loop !42

677:                                              ; preds = %.lr.ph918
  %678 = landingpad { ptr, i32 }
          cleanup
  br label %686

._crit_edge922:                                   ; preds = %679, %.preheader452
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(104) %78)
          to label %685 unwind label %666

.lr.ph921:                                        ; preds = %.preheader452, %679
  %.0153920 = phi i64 [ %682, %679 ], [ 0, %.preheader452 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %80) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull %22)
          to label %679 unwind label %683

679:                                              ; preds = %.lr.ph921
  %680 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %.0153920) #10
  %681 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %680, ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #10
  %682 = add nuw nsw i64 %.0153920, 1
  %exitcond1381.not = icmp eq i64 %682, %672
  br i1 %exitcond1381.not, label %._crit_edge922, label %.lr.ph921, !llvm.loop !43

683:                                              ; preds = %.lr.ph921
  %684 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #10
  br label %686

685:                                              ; preds = %._crit_edge922
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %78) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %78) #10
  br label %.thread443.thread

686:                                              ; preds = %666, %677, %683, %664
  %.pn334.pn = phi { ptr, i32 } [ %665, %664 ], [ %678, %677 ], [ %684, %683 ], [ %667, %666 ]
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %78) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %78) #10
  br label %710

687:                                              ; preds = %535
  %688 = getelementptr inbounds i8, ptr %416, i64 1
  %689 = load i8, ptr %688, align 1, !tbaa !5
  switch i8 %689, label %.thread443.thread [
    i8 32, label %690
    i8 9, label %690
  ]

690:                                              ; preds = %687, %687
  %691 = getelementptr inbounds i8, ptr %416, i64 2
  store ptr %691, ptr %22, align 8, !tbaa !10
  %692 = call i64 @strspn(ptr noundef nonnull %691, ptr noundef nonnull @.str) #11
  %693 = getelementptr inbounds i8, ptr %691, i64 %692
  store ptr %693, ptr %22, align 8, !tbaa !10
  %694 = load i8, ptr %693, align 1, !tbaa !5
  switch i8 %694, label %695 [
    i8 0, label %.thread443.thread
    i8 13, label %.thread443.thread
  ], !llvm.loop !8

695:                                              ; preds = %690
  %696 = getelementptr inbounds i8, ptr %693, i64 1
  %697 = load i8, ptr %696, align 1, !tbaa !5
  %698 = icmp eq i8 %697, 10
  br i1 %698, label %.thread443.thread, label %699, !llvm.loop !8

699:                                              ; preds = %695
  %700 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %693) #11
  %701 = icmp ugt i64 %700, 2
  %702 = icmp eq i8 %694, 111
  %or.cond = and i1 %702, %701
  %703 = icmp eq i8 %697, 102
  %or.cond420 = and i1 %703, %or.cond
  br i1 %or.cond420, label %704, label %708

704:                                              ; preds = %699
  %705 = getelementptr inbounds i8, ptr %693, i64 2
  %706 = load i8, ptr %705, align 1, !tbaa !5
  %707 = icmp eq i8 %706, 102
  br i1 %707, label %.thread443.thread, label %708, !llvm.loop !8

708:                                              ; preds = %704, %699
  %709 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %22)
  %. = call i32 @llvm.smax.i32(i32 %709, i32 0)
  br label %.thread443.thread, !llvm.loop !8

.thread443.thread:                                ; preds = %147, %147, %168, %177, %187, %455, %615, %639, %685, %._crit_edge.thread, %464, %690, %690, %695, %704, %708, %687, %649, %617, %536, %535
  %.1177.ph = phi i8 [ %.0176.ph.ph, %535 ], [ %.0176.ph.ph, %536 ], [ %.0176.ph.ph, %617 ], [ %.0176.ph.ph, %649 ], [ %.0176.ph.ph, %687 ], [ %.0176.ph.ph, %708 ], [ %.0176.ph.ph, %704 ], [ %.0176.ph.ph, %695 ], [ %.0176.ph.ph, %690 ], [ %.0176.ph.ph, %690 ], [ %.0176.ph.ph, %464 ], [ %.0176.ph.ph, %._crit_edge.thread ], [ %.0176.ph.ph, %685 ], [ %.0176.ph.ph, %639 ], [ %.0176.ph.ph, %615 ], [ %.0176.ph.ph, %455 ], [ %.0176.ph.ph, %187 ], [ %.0176.ph.ph, %177 ], [ %159, %168 ], [ %.0176.ph.ph, %147 ], [ %.0176.ph.ph, %147 ]
  %.3159.ph = phi i32 [ %.0156.ph.ph, %535 ], [ %.0156.ph.ph, %536 ], [ %.0156.ph.ph, %617 ], [ %.0156.ph.ph, %649 ], [ %.0156.ph.ph, %687 ], [ %., %708 ], [ 0, %704 ], [ %.0156.ph.ph, %695 ], [ %.0156.ph.ph, %690 ], [ %.0156.ph.ph, %690 ], [ %.0156.ph.ph, %464 ], [ %.0156.ph.ph, %._crit_edge.thread ], [ %.0156.ph.ph, %685 ], [ %.0156.ph.ph, %639 ], [ %.0156.ph.ph, %615 ], [ %.0156.ph.ph, %455 ], [ %.0156.ph.ph, %187 ], [ %.0156.ph.ph, %177 ], [ %.0156.ph.ph, %168 ], [ %.0156.ph.ph, %147 ], [ %.0156.ph.ph, %147 ]
  %.2152.ph = phi i32 [ %.0150.ph.ph, %535 ], [ %.0150.ph.ph, %536 ], [ %.0150.ph.ph, %617 ], [ %.0150.ph.ph, %649 ], [ %.0150.ph.ph, %687 ], [ %.0150.ph.ph, %708 ], [ %.0150.ph.ph, %704 ], [ %.0150.ph.ph, %695 ], [ %.0150.ph.ph, %690 ], [ %.0150.ph.ph, %690 ], [ %.0150.ph.ph, %464 ], [ %.0150.ph.ph, %._crit_edge.thread ], [ %.0150.ph.ph, %685 ], [ %.0150.ph.ph, %639 ], [ %.0150.ph.ph, %615 ], [ %.1151, %455 ], [ %.0150.ph.ph, %187 ], [ %.0150.ph.ph, %177 ], [ %.0150.ph.ph, %168 ], [ %.0150.ph.ph, %147 ], [ %.0150.ph.ph, %147 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %.outer.outer, !llvm.loop !8

.thread443:                                       ; preds = %414, %352, %297
  %.9267 = phi i32 [ %.3261, %297 ], [ %.5263, %352 ], [ %.7265, %414 ]
  %.4174 = phi i32 [ %.0170.ph, %297 ], [ %.0170.ph, %352 ], [ %.1171, %414 ]
  %.4169 = phi i32 [ %.0165.ph, %297 ], [ %.0165.ph, %352 ], [ %.1166, %414 ]
  %.4164 = phi i32 [ %.0160.ph, %297 ], [ %.0160.ph, %352 ], [ %.1161, %414 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  %cond = icmp eq i32 %.9267, 2
  br i1 %cond, label %.outer, label %.loopexit, !llvm.loop !8

710:                                              ; preds = %629, %648, %544, %616, %686, %534, %457, %415, %353, %298, %241, %188, %178, %166
  %.pn407 = phi { ptr, i32 } [ %167, %166 ], [ %179, %178 ], [ %189, %188 ], [ %.pn404.pn, %298 ], [ %.pn396.pn, %353 ], [ %.pn388.pn, %415 ], [ %.pn380.pn, %457 ], [ %.pn370.pn.pn.pn, %534 ], [ %.pn334.pn, %686 ], [ %.pn326.pn.pn.pn.pn, %241 ], [ %.pn354.pn, %616 ], [ %545, %544 ], [ %.pn340.pn, %648 ], [ %630, %629 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %830

711:                                              ; preds = %110
  %712 = trunc nuw i8 %.0176.ph.ph to i1
  %brmerge421 = or i1 %712, %8
  br i1 %brmerge421, label %714, label %713

713:                                              ; preds = %711
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  br label %714

714:                                              ; preds = %711, %713
  %715 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %716 = udiv i64 %715, 3
  %717 = trunc i64 %716 to i32
  %718 = icmp sge i32 %.0160.ph, %717
  %719 = icmp ne ptr %3, null
  %or.cond8 = and i1 %719, %718
  br i1 %or.cond8, label %720, label %745

720:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %81) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %81)
          to label %721 unwind label %734

721:                                              ; preds = %720
  %722 = getelementptr inbounds i8, ptr %81, i64 16
  %723 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %722, ptr noundef nonnull @.str.60)
          to label %724 unwind label %736

724:                                              ; preds = %721
  %725 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %723, i64 noundef %.0178)
          to label %726 unwind label %736

726:                                              ; preds = %724
  %727 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %725, ptr noundef nonnull @.str.47)
          to label %728 unwind label %736

728:                                              ; preds = %726
  %729 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %727, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %730 unwind label %736

730:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %82) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(128) %81)
          to label %731 unwind label %738

731:                                              ; preds = %730
  %732 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %733 unwind label %740

733:                                              ; preds = %731
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %81) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %81) #10
  br label %745

734:                                              ; preds = %720
  %735 = landingpad { ptr, i32 }
          cleanup
  br label %744

736:                                              ; preds = %728, %726, %724, %721
  %737 = landingpad { ptr, i32 }
          cleanup
  br label %743

738:                                              ; preds = %730
  %739 = landingpad { ptr, i32 }
          cleanup
  br label %742

740:                                              ; preds = %731
  %741 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  br label %742

742:                                              ; preds = %740, %738
  %.pn = phi { ptr, i32 } [ %741, %740 ], [ %739, %738 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %82) #10
  br label %743

743:                                              ; preds = %742, %736
  %.pn.pn = phi { ptr, i32 } [ %.pn, %742 ], [ %737, %736 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %81) #10
  br label %744

744:                                              ; preds = %743, %734
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %743 ], [ %735, %734 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %81) #10
  br label %830

745:                                              ; preds = %733, %714
  %746 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %747 = udiv i64 %746, 3
  %748 = trunc i64 %747 to i32
  %749 = icmp sge i32 %.0165.ph, %748
  %or.cond10 = and i1 %719, %749
  br i1 %or.cond10, label %750, label %775

750:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %83) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %83)
          to label %751 unwind label %764

751:                                              ; preds = %750
  %752 = getelementptr inbounds i8, ptr %83, i64 16
  %753 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %752, ptr noundef nonnull @.str.61)
          to label %754 unwind label %766

754:                                              ; preds = %751
  %755 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %753, i64 noundef %.0178)
          to label %756 unwind label %766

756:                                              ; preds = %754
  %757 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %755, ptr noundef nonnull @.str.47)
          to label %758 unwind label %766

758:                                              ; preds = %756
  %759 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %757, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %760 unwind label %766

760:                                              ; preds = %758
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %84) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(128) %83)
          to label %761 unwind label %768

761:                                              ; preds = %760
  %762 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %763 unwind label %770

763:                                              ; preds = %761
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %83) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %83) #10
  br label %775

764:                                              ; preds = %750
  %765 = landingpad { ptr, i32 }
          cleanup
  br label %774

766:                                              ; preds = %758, %756, %754, %751
  %767 = landingpad { ptr, i32 }
          cleanup
  br label %773

768:                                              ; preds = %760
  %769 = landingpad { ptr, i32 }
          cleanup
  br label %772

770:                                              ; preds = %761
  %771 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  br label %772

772:                                              ; preds = %770, %768
  %.pn309 = phi { ptr, i32 } [ %771, %770 ], [ %769, %768 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #10
  br label %773

773:                                              ; preds = %772, %766
  %.pn309.pn = phi { ptr, i32 } [ %.pn309, %772 ], [ %767, %766 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %83) #10
  br label %774

774:                                              ; preds = %773, %764
  %.pn309.pn.pn = phi { ptr, i32 } [ %.pn309.pn, %773 ], [ %765, %764 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %83) #10
  br label %830

775:                                              ; preds = %763, %745
  %776 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %777 = lshr i64 %776, 1
  %778 = trunc i64 %777 to i32
  %779 = icmp sge i32 %.0170.ph, %778
  %or.cond12 = and i1 %719, %779
  br i1 %or.cond12, label %780, label %805

780:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %85) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %85)
          to label %781 unwind label %794

781:                                              ; preds = %780
  %782 = getelementptr inbounds i8, ptr %85, i64 16
  %783 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %782, ptr noundef nonnull @.str.62)
          to label %784 unwind label %796

784:                                              ; preds = %781
  %785 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %783, i64 noundef %.0178)
          to label %786 unwind label %796

786:                                              ; preds = %784
  %787 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %785, ptr noundef nonnull @.str.47)
          to label %788 unwind label %796

788:                                              ; preds = %786
  %789 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %787, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %790 unwind label %796

790:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull align 8 dereferenceable(128) %85)
          to label %791 unwind label %798

791:                                              ; preds = %790
  %792 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %86)
          to label %793 unwind label %800

793:                                              ; preds = %791
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %85) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %85) #10
  br label %805

794:                                              ; preds = %780
  %795 = landingpad { ptr, i32 }
          cleanup
  br label %804

796:                                              ; preds = %788, %786, %784, %781
  %797 = landingpad { ptr, i32 }
          cleanup
  br label %803

798:                                              ; preds = %790
  %799 = landingpad { ptr, i32 }
          cleanup
  br label %802

800:                                              ; preds = %791
  %801 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  br label %802

802:                                              ; preds = %800, %798
  %.pn313 = phi { ptr, i32 } [ %801, %800 ], [ %799, %798 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #10
  br label %803

803:                                              ; preds = %802, %796
  %.pn313.pn = phi { ptr, i32 } [ %.pn313, %802 ], [ %797, %796 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %85) #10
  br label %804

804:                                              ; preds = %803, %794
  %.pn313.pn.pn = phi { ptr, i32 } [ %.pn313.pn, %803 ], [ %795, %794 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %85) #10
  br label %830

805:                                              ; preds = %793, %775
  %806 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %20, ptr noundef nonnull align 8 dereferenceable(72) %17, ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef %.0150.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %807 unwind label %811

807:                                              ; preds = %805
  br i1 %806, label %810, label %808

808:                                              ; preds = %807
  %809 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %102) #10
  %.not317 = icmp eq i64 %809, 0
  br i1 %.not317, label %813, label %810

810:                                              ; preds = %808, %807
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %20)
          to label %813 unwind label %811

811:                                              ; preds = %810, %805
  %812 = landingpad { ptr, i32 }
          cleanup
  br label %830

813:                                              ; preds = %810, %808
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %17)
  br i1 %.not383, label %823, label %814

814:                                              ; preds = %813
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull align 8 dereferenceable(128) %10)
          to label %815 unwind label %818

815:                                              ; preds = %814
  %816 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 8 dereferenceable(32) %87)
          to label %817 unwind label %820

817:                                              ; preds = %815
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #10
  br label %823

818:                                              ; preds = %814
  %819 = landingpad { ptr, i32 }
          cleanup
  br label %822

820:                                              ; preds = %815
  %821 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #10
  br label %822

822:                                              ; preds = %820, %818
  %.pn319 = phi { ptr, i32 } [ %821, %820 ], [ %819, %818 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #10
  br label %830

823:                                              ; preds = %817, %813
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %824 = getelementptr inbounds i8, ptr %0, i64 24
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %824, ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %825 = getelementptr inbounds i8, ptr %0, i64 48
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %825, ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %826 = getelementptr inbounds i8, ptr %0, i64 72
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %826, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %827 = getelementptr inbounds i8, ptr %0, i64 96
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %827, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %828 = getelementptr inbounds i8, ptr %0, i64 120
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %828, ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %829 = getelementptr inbounds i8, ptr %0, i64 144
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE4swapERS3_(ptr noundef nonnull align 8 dereferenceable(24) %829, ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  br label %.loopexit

.loopexit:                                        ; preds = %.thread443, %.thread444, %823
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %20) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %20) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %17) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %10) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %10) #10
  ret i1 %.not305

830:                                              ; preds = %811, %822, %804, %774, %744, %710, %126
  %.pn407.pn = phi { ptr, i32 } [ %.pn407, %710 ], [ %127, %126 ], [ %.pn313.pn.pn, %804 ], [ %.pn309.pn.pn, %774 ], [ %.pn.pn.pn, %744 ], [ %.pn319, %822 ], [ %812, %811 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %20) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %20) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %17) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %10) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %10) #10
  resume { ptr, i32 } %.pn407.pn
}

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef, ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #4 align 2

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #9

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { "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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { noreturn 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !11, i64 0}
!11 = !{!"any pointer", !6, i64 0}
!12 = !{!13, !14, i64 0}
!13 = !{!"_ZTSN7tinyobj13skin_weight_tE", !14, i64 0, !15, i64 8}
!14 = !{!"int", !6, i64 0}
!15 = !{!"_ZTSSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !6, i64 0}
!21 = !{!22, !14, i64 0}
!22 = !{!"_ZTSN7tinyobj18joint_and_weight_tE", !14, i64 0, !20, i64 4}
!23 = !{!22, !20, i64 4}
!24 = !{!25, !14, i64 0}
!25 = !{!"_ZTSN7tinyobj6face_tE", !14, i64 0, !14, i64 4, !26, i64 8}
!26 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!30 = !{!31, !14, i64 32}
!31 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !32, i64 0, !14, i64 32}
!32 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !33, i64 0, !34, i64 8, !6, i64 16}
!33 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!34 = !{!"long", !6, i64 0}
!35 = distinct !{!35, !9}
!36 = !{!37, !37, i64 0}
!37 = !{!"vtable pointer", !7, i64 0}
!38 = distinct !{!38, !9}
!39 = distinct !{!39, !9}
!40 = !{!14, !14, i64 0}
!41 = distinct !{!41, !9}
!42 = distinct !{!42, !9}
!43 = distinct !{!43, !9}


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