; LLVM IR from bohanwang/libpgo :: third-party/tiny_obj_loader (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::set" = type { %"class.std::_Rb_tree.61" }
%"class.std::_Rb_tree.61" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::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.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.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.70", %"class.std::vector.41" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = 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.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = 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.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = 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.65", %"class.std::vector.75" }
%"struct.tinyobj::points_t" = type { %"class.std::vector.65" }
%"struct.tinyobj::skin_weight_t" = type { i32, %"class.std::vector.80" }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = 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::warning_context" = type { ptr, i64 }
%"struct.tinyobj::__line_t" = type { %"class.std::vector.85" }
%"class.std::vector.85" = type { %"struct.std::_Vector_base.86" }
%"struct.std::_Vector_base.86" = 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.85" }
%"struct.tinyobj::face_t" = type { i32, i32, %"class.std::vector.85" }
%"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.std::pair.93" = type <{ %"struct.std::_Rb_tree_const_iterator.95", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator.95" = type { ptr }
%"struct.tinyobj::tag_t" = type { %"class.std::__cxx11::basic_string", %"class.std::vector.75", %"class.std::vector.26", %"class.std::vector.20" }
%"struct.tinyobj::tag_sizes" = type { i32, i32, i32 }
%"struct.std::pair.90" = 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 [96 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.49 = 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.50 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.67 = 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: 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: 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: 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(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5 align 2

; 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: 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.26", align 8
  %26 = alloca %"class.std::vector.31", align 8
  %27 = alloca %"class.std::vector.41", align 8
  %28 = alloca %"struct.tinyobj::PrimGroup", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::set", align 8
  %31 = alloca %"class.std::map.3", align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca %"struct.tinyobj::shape_t", align 8
  %38 = alloca i8, align 1
  %39 = alloca i64, align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i32, 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 i32, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca i32, align 4
  %58 = alloca %"struct.tinyobj::skin_weight_t", align 8
  %59 = alloca float, align 4
  %60 = alloca float, align 4
  %61 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"struct.tinyobj::joint_and_weight_t", align 4
  %64 = alloca i64, align 8
  %65 = alloca %"struct.tinyobj::warning_context", align 8
  %66 = alloca %"struct.tinyobj::__line_t", align 8
  %67 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca i64, align 8
  %72 = alloca %"struct.tinyobj::__points_t", align 8
  %73 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca i64, align 8
  %78 = alloca %"struct.tinyobj::face_t", align 8
  %79 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca i64, align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca i32, align 4
  %86 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %87 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %88 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %89 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %90 = alloca %"class.std::__cxx11::basic_string", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca %"class.std::vector.20", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::allocator", align 1
  %95 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %96 = alloca %"class.std::__cxx11::basic_string", align 8
  %97 = alloca i8, align 1
  %98 = alloca i64, align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca i8, align 1
  %102 = alloca %"class.std::__cxx11::basic_string", align 8
  %103 = alloca %"class.std::allocator", align 1
  %104 = alloca %"struct.std::pair.93", align 8
  %105 = alloca i8, align 1
  %106 = alloca %"struct.tinyobj::shape_t", align 8
  %107 = alloca %"class.std::vector.20", align 8
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %112 = alloca i64, align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca i8, align 1
  %115 = alloca %"struct.tinyobj::shape_t", align 8
  %116 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca i32, align 4
  %119 = alloca %"struct.tinyobj::tag_t", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"struct.tinyobj::tag_sizes", align 4
  %122 = alloca { i64, i32 }, align 8
  %123 = alloca i64, align 8
  %124 = alloca i64, align 8
  %125 = alloca i64, align 8
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca i32, align 4
  %128 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %129 = alloca %"class.std::__cxx11::basic_string", align 8
  %130 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %131 = alloca %"class.std::__cxx11::basic_string", align 8
  %132 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %133 = alloca %"class.std::__cxx11::basic_string", align 8
  %134 = alloca i8, align 1
  %135 = 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
  %136 = zext i1 %7 to i8
  store i8 %136, ptr %18, align 1, !tbaa !9
  %137 = zext i1 %8 to i8
  store i8 %137, 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 @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  call void @llvm.lifetime.start.p0(i64 72, ptr %28) #10
  call void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %28) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %30) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %30) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %31) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %31) #10
  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 0, 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 4, ptr %35) #10
  store i32 -1, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  store i32 -1, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 224, ptr %37) #10
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %37) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #10
  store i8 1, ptr %38, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  store i64 0, ptr %39, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  br label %138

138:                                              ; preds = %1566, %1564, %188, %9
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %139)
          to label %141 unwind label %164

141:                                              ; preds = %138
  %142 = icmp ne i32 %140, -1
  br i1 %142, label %143, label %1569

143:                                              ; preds = %141
  %144 = load ptr, ptr %16, align 8, !tbaa !5
  %145 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %144, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %146 unwind label %164

146:                                              ; preds = %143
  %147 = load i64, ptr %39, align 8, !tbaa !13
  %148 = add i64 %147, 1
  store i64 %148, ptr %39, align 8, !tbaa !13
  %149 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %150 = icmp ugt i64 %149, 0
  br i1 %150, label %151, label %169

151:                                              ; preds = %146
  %152 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %153 = sub i64 %152, 1
  %154 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %40, i64 noundef %153)
          to label %155 unwind label %164

155:                                              ; preds = %151
  %156 = load i8, ptr %154, align 1, !tbaa !15
  %157 = sext i8 %156 to i32
  %158 = icmp eq i32 %157, 10
  br i1 %158, label %159, label %168

159:                                              ; preds = %155
  %160 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %161 = sub i64 %160, 1
  %162 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %40, i64 noundef %161, i64 noundef -1)
          to label %163 unwind label %164

163:                                              ; preds = %159
  br label %168

164:                                              ; preds = %180, %172, %159, %151, %143, %138
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %41, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %42, align 4
  br label %1763

168:                                              ; preds = %163, %155
  br label %169

169:                                              ; preds = %168, %146
  %170 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %171 = icmp ugt i64 %170, 0
  br i1 %171, label %172, label %186

172:                                              ; preds = %169
  %173 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %174 = sub i64 %173, 1
  %175 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %40, i64 noundef %174)
          to label %176 unwind label %164

176:                                              ; preds = %172
  %177 = load i8, ptr %175, align 1, !tbaa !15
  %178 = sext i8 %177 to i32
  %179 = icmp eq i32 %178, 13
  br i1 %179, label %180, label %185

180:                                              ; preds = %176
  %181 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  %182 = sub i64 %181, 1
  %183 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %40, i64 noundef %182, i64 noundef -1)
          to label %184 unwind label %164

184:                                              ; preds = %180
  br label %185

185:                                              ; preds = %184, %176
  br label %186

186:                                              ; preds = %185, %169
  %187 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  br i1 %187, label %188, label %189

188:                                              ; preds = %186
  br label %138, !llvm.loop !16

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  %190 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  store ptr %190, ptr %43, align 8, !tbaa !5
  %191 = load ptr, ptr %43, align 8, !tbaa !5
  %192 = call i64 @strspn(ptr noundef %191, ptr noundef @.str) #11
  %193 = load ptr, ptr %43, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i64 %192
  store ptr %194, ptr %43, align 8, !tbaa !5
  %195 = load ptr, ptr %43, align 8, !tbaa !5
  %196 = icmp ne ptr %195, null
  br i1 %196, label %197, label %198

197:                                              ; preds = %189
  br label %200

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

199:                                              ; No predecessors!
  br label %200

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

206:                                              ; preds = %200
  store i32 2, ptr %44, align 4
  br label %1564, !llvm.loop !16

207:                                              ; preds = %200
  %208 = load ptr, ptr %43, align 8, !tbaa !5
  %209 = getelementptr inbounds i8, ptr %208, i64 0
  %210 = load i8, ptr %209, align 1, !tbaa !15
  %211 = sext i8 %210 to i32
  %212 = icmp eq i32 %211, 35
  br i1 %212, label %213, label %214

213:                                              ; preds = %207
  store i32 2, ptr %44, align 4
  br label %1564, !llvm.loop !16

214:                                              ; preds = %207
  %215 = load ptr, ptr %43, align 8, !tbaa !5
  %216 = getelementptr inbounds i8, ptr %215, i64 0
  %217 = load i8, ptr %216, align 1, !tbaa !15
  %218 = sext i8 %217 to i32
  %219 = icmp eq i32 %218, 118
  br i1 %219, label %220, label %264

220:                                              ; preds = %214
  %221 = load ptr, ptr %43, align 8, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %221, i64 1
  %223 = load i8, ptr %222, align 1, !tbaa !15
  %224 = sext i8 %223 to i32
  %225 = icmp eq i32 %224, 32
  br i1 %225, label %232, label %226

226:                                              ; preds = %220
  %227 = load ptr, ptr %43, align 8, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %227, i64 1
  %229 = load i8, ptr %228, align 1, !tbaa !15
  %230 = sext i8 %229 to i32
  %231 = icmp eq i32 %230, 9
  br i1 %231, label %232, label %264

232:                                              ; preds = %226, %220
  %233 = load ptr, ptr %43, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %233, i64 2
  store ptr %234, ptr %43, align 8, !tbaa !5
  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
  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
  %235 = invoke noundef i32 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef %45, ptr noundef %46, ptr noundef %47, ptr noundef %48, ptr noundef %49, ptr noundef %50, ptr noundef %43, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %236 unwind label %259

236:                                              ; preds = %232
  store i32 %235, ptr %51, align 4, !tbaa !11
  %237 = load i32, ptr %51, align 4, !tbaa !11
  %238 = icmp eq i32 %237, 6
  %239 = zext i1 %238 to i32
  %240 = load i8, ptr %38, align 1, !tbaa !9, !range !18, !noundef !19
  %241 = trunc i8 %240 to i1
  %242 = zext i1 %241 to i32
  %243 = and i32 %242, %239
  %244 = icmp ne i32 %243, 0
  %245 = zext i1 %244 to i8
  store i8 %245, ptr %38, align 1, !tbaa !9
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %246 unwind label %259

246:                                              ; preds = %236
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %247 unwind label %259

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

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

249:                                              ; preds = %248
  %250 = load i32, ptr %51, align 4, !tbaa !11
  %251 = icmp eq i32 %250, 6
  br i1 %251, label %255, label %252

252:                                              ; preds = %249
  %253 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %254 = trunc i8 %253 to i1
  br i1 %254, label %255, label %263

255:                                              ; preds = %252, %249
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %256 unwind label %259

256:                                              ; preds = %255
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %257 unwind label %259

257:                                              ; preds = %256
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %258 unwind label %259

258:                                              ; preds = %257
  br label %263

259:                                              ; preds = %257, %256, %255, %248, %247, %246, %236, %232
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %41, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, 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
  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
  br label %1568

263:                                              ; preds = %258, %252
  store i32 2, ptr %44, 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
  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
  br label %1564

264:                                              ; preds = %226, %214
  %265 = load ptr, ptr %43, align 8, !tbaa !5
  %266 = getelementptr inbounds i8, ptr %265, i64 0
  %267 = load i8, ptr %266, align 1, !tbaa !15
  %268 = sext i8 %267 to i32
  %269 = icmp eq i32 %268, 118
  br i1 %269, label %270, label %299

270:                                              ; preds = %264
  %271 = load ptr, ptr %43, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 1
  %273 = load i8, ptr %272, align 1, !tbaa !15
  %274 = sext i8 %273 to i32
  %275 = icmp eq i32 %274, 110
  br i1 %275, label %276, label %299

276:                                              ; preds = %270
  %277 = load ptr, ptr %43, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i64 2
  %279 = load i8, ptr %278, align 1, !tbaa !15
  %280 = sext i8 %279 to i32
  %281 = icmp eq i32 %280, 32
  br i1 %281, label %288, label %282

282:                                              ; preds = %276
  %283 = load ptr, ptr %43, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i64 2
  %285 = load i8, ptr %284, align 1, !tbaa !15
  %286 = sext i8 %285 to i32
  %287 = icmp eq i32 %286, 9
  br i1 %287, label %288, label %299

288:                                              ; preds = %282, %276
  %289 = load ptr, ptr %43, align 8, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %289, i64 3
  store ptr %290, ptr %43, 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
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %52, ptr noundef %53, ptr noundef %54, ptr noundef %43, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %291 unwind label %295

291:                                              ; preds = %288
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %292 unwind label %295

292:                                              ; preds = %291
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %53)
          to label %293 unwind label %295

293:                                              ; preds = %292
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %294 unwind label %295

294:                                              ; preds = %293
  store i32 2, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  br label %1564

295:                                              ; preds = %293, %292, %291, %288
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %41, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  br label %1568

299:                                              ; preds = %282, %270, %264
  %300 = load ptr, ptr %43, align 8, !tbaa !5
  %301 = getelementptr inbounds i8, ptr %300, i64 0
  %302 = load i8, ptr %301, align 1, !tbaa !15
  %303 = sext i8 %302 to i32
  %304 = icmp eq i32 %303, 118
  br i1 %304, label %305, label %333

305:                                              ; preds = %299
  %306 = load ptr, ptr %43, align 8, !tbaa !5
  %307 = getelementptr inbounds i8, ptr %306, i64 1
  %308 = load i8, ptr %307, align 1, !tbaa !15
  %309 = sext i8 %308 to i32
  %310 = icmp eq i32 %309, 116
  br i1 %310, label %311, label %333

311:                                              ; preds = %305
  %312 = load ptr, ptr %43, align 8, !tbaa !5
  %313 = getelementptr inbounds i8, ptr %312, i64 2
  %314 = load i8, ptr %313, align 1, !tbaa !15
  %315 = sext i8 %314 to i32
  %316 = icmp eq i32 %315, 32
  br i1 %316, label %323, label %317

317:                                              ; preds = %311
  %318 = load ptr, ptr %43, align 8, !tbaa !5
  %319 = getelementptr inbounds i8, ptr %318, i64 2
  %320 = load i8, ptr %319, align 1, !tbaa !15
  %321 = sext i8 %320 to i32
  %322 = icmp eq i32 %321, 9
  br i1 %322, label %323, label %333

323:                                              ; preds = %317, %311
  %324 = load ptr, ptr %43, align 8, !tbaa !5
  %325 = getelementptr inbounds i8, ptr %324, i64 3
  store ptr %325, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef %55, ptr noundef %56, ptr noundef %43, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %326 unwind label %329

326:                                              ; preds = %323
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %55)
          to label %327 unwind label %329

327:                                              ; preds = %326
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %56)
          to label %328 unwind label %329

328:                                              ; preds = %327
  store i32 2, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  br label %1564

329:                                              ; preds = %327, %326, %323
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %41, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  br label %1568

333:                                              ; preds = %317, %305, %299
  %334 = load ptr, ptr %43, align 8, !tbaa !5
  %335 = getelementptr inbounds i8, ptr %334, i64 0
  %336 = load i8, ptr %335, align 1, !tbaa !15
  %337 = sext i8 %336 to i32
  %338 = icmp eq i32 %337, 118
  br i1 %338, label %339, label %466

339:                                              ; preds = %333
  %340 = load ptr, ptr %43, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %340, i64 1
  %342 = load i8, ptr %341, align 1, !tbaa !15
  %343 = sext i8 %342 to i32
  %344 = icmp eq i32 %343, 119
  br i1 %344, label %345, label %466

345:                                              ; preds = %339
  %346 = load ptr, ptr %43, align 8, !tbaa !5
  %347 = getelementptr inbounds i8, ptr %346, i64 2
  %348 = load i8, ptr %347, align 1, !tbaa !15
  %349 = sext i8 %348 to i32
  %350 = icmp eq i32 %349, 32
  br i1 %350, label %357, label %351

351:                                              ; preds = %345
  %352 = load ptr, ptr %43, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i64 2
  %354 = load i8, ptr %353, align 1, !tbaa !15
  %355 = sext i8 %354 to i32
  %356 = icmp eq i32 %355, 9
  br i1 %356, label %357, label %466

357:                                              ; preds = %351, %345
  %358 = load ptr, ptr %43, align 8, !tbaa !5
  %359 = getelementptr inbounds i8, ptr %358, i64 3
  store ptr %359, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  store i32 0, ptr %57, align 4, !tbaa !11
  %360 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %43)
          to label %361 unwind label %406

361:                                              ; preds = %357
  store i32 %360, ptr %57, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #10
  call void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  %362 = load i32, ptr %57, align 4, !tbaa !11
  %363 = getelementptr inbounds %"struct.tinyobj::skin_weight_t", ptr %58, i32 0, i32 0
  store i32 %362, ptr %363, align 8, !tbaa !20
  br label %364

364:                                              ; preds = %449, %361
  %365 = load ptr, ptr %43, align 8, !tbaa !5
  %366 = getelementptr inbounds i8, ptr %365, i64 0
  %367 = load i8, ptr %366, align 1, !tbaa !15
  %368 = sext i8 %367 to i32
  %369 = icmp eq i32 %368, 13
  br i1 %369, label %382, label %370

370:                                              ; preds = %364
  %371 = load ptr, ptr %43, align 8, !tbaa !5
  %372 = getelementptr inbounds i8, ptr %371, i64 0
  %373 = load i8, ptr %372, align 1, !tbaa !15
  %374 = sext i8 %373 to i32
  %375 = icmp eq i32 %374, 10
  br i1 %375, label %382, label %376

376:                                              ; preds = %370
  %377 = load ptr, ptr %43, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 0
  %379 = load i8, ptr %378, align 1, !tbaa !15
  %380 = sext i8 %379 to i32
  %381 = icmp eq i32 %380, 0
  br label %382

382:                                              ; preds = %376, %370, %364
  %383 = phi i1 [ true, %370 ], [ true, %364 ], [ %381, %376 ]
  %384 = xor i1 %383, true
  br i1 %384, label %385, label %455

385:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef %59, ptr noundef %60, ptr noundef %43, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %386 unwind label %410

386:                                              ; preds = %385
  %387 = load float, ptr %59, align 4, !tbaa !26
  %388 = fcmp olt float %387, 0.000000e+00
  br i1 %388, label %389, label %434

389:                                              ; preds = %386
  %390 = load ptr, ptr %15, align 8, !tbaa !5
  %391 = icmp ne ptr %390, null
  br i1 %391, label %392, label %433

392:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 392, ptr %61) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %61)
          to label %393 unwind label %414

393:                                              ; preds = %392
  %394 = getelementptr inbounds i8, ptr %61, i64 16
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %394, ptr noundef @.str.50)
          to label %396 unwind label %418

396:                                              ; preds = %393
  %397 = load i64, ptr %39, align 8, !tbaa !13
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %395, i64 noundef %397)
          to label %399 unwind label %418

399:                                              ; preds = %396
  %400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %398, ptr noundef @.str.51)
          to label %401 unwind label %418

401:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(128) %61)
          to label %402 unwind label %422

402:                                              ; preds = %401
  %403 = load ptr, ptr %15, align 8, !tbaa !5
  %404 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %403, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %405 unwind label %426

405:                                              ; preds = %402
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %61) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %61) #10
  br label %433

406:                                              ; preds = %357
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %41, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %42, align 4
  br label %465

410:                                              ; preds = %385
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %41, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %42, align 4
  br label %454

414:                                              ; preds = %392
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %41, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %42, align 4
  br label %432

418:                                              ; preds = %399, %396, %393
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %41, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %42, align 4
  br label %431

422:                                              ; preds = %401
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %41, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %42, align 4
  br label %430

426:                                              ; preds = %402
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %41, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  br label %430

430:                                              ; preds = %426, %422
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #10
  br label %431

431:                                              ; preds = %430, %418
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %61) #10
  br label %432

432:                                              ; preds = %431, %414
  call void @llvm.lifetime.end.p0(i64 392, ptr %61) #10
  br label %454

433:                                              ; preds = %405, %389
  store i1 false, ptr %10, align 1
  store i32 1, ptr %44, align 4
  br label %447

434:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #10
  %435 = load float, ptr %59, align 4, !tbaa !26
  %436 = fptosi float %435 to i32
  %437 = getelementptr inbounds %"struct.tinyobj::joint_and_weight_t", ptr %63, i32 0, i32 0
  store i32 %436, ptr %437, align 4, !tbaa !28
  %438 = load float, ptr %60, align 4, !tbaa !26
  %439 = getelementptr inbounds %"struct.tinyobj::joint_and_weight_t", ptr %63, i32 0, i32 1
  store float %438, ptr %439, align 4, !tbaa !30
  %440 = getelementptr inbounds %"struct.tinyobj::skin_weight_t", ptr %58, i32 0, i32 1
  invoke void @_ZNSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %440, ptr noundef nonnull align 4 dereferenceable(8) %63)
          to label %441 unwind label %450

441:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #10
  %442 = load ptr, ptr %43, align 8, !tbaa !5
  %443 = call i64 @strspn(ptr noundef %442, ptr noundef @.str.12) #11
  store i64 %443, ptr %64, align 8, !tbaa !13
  %444 = load i64, ptr %64, align 8, !tbaa !13
  %445 = load ptr, ptr %43, align 8, !tbaa !5
  %446 = getelementptr inbounds i8, ptr %445, i64 %444
  store ptr %446, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #10
  store i32 0, ptr %44, align 4
  br label %447

447:                                              ; preds = %441, %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  %448 = load i32, ptr %44, align 4
  switch i32 %448, label %457 [
    i32 0, label %449
  ]

449:                                              ; preds = %447
  br label %364, !llvm.loop !31

450:                                              ; preds = %434
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %41, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #10
  br label %454

454:                                              ; preds = %450, %432, %410
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  br label %464

455:                                              ; preds = %382
  invoke void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %456 unwind label %460

456:                                              ; preds = %455
  store i32 0, ptr %44, align 4
  br label %457

457:                                              ; preds = %456, %447
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  %458 = load i32, ptr %44, align 4
  switch i32 %458, label %1564 [
    i32 0, label %459
  ]

459:                                              ; preds = %457
  br label %466

460:                                              ; preds = %455
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %41, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %42, align 4
  br label %464

464:                                              ; preds = %460, %454
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #10
  br label %465

465:                                              ; preds = %464, %406
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  br label %1568

466:                                              ; preds = %459, %351, %339, %333
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #10
  %467 = load ptr, ptr %14, align 8, !tbaa !5
  %468 = getelementptr inbounds %"struct.tinyobj::warning_context", ptr %65, i32 0, i32 0
  store ptr %467, ptr %468, align 8, !tbaa !32
  %469 = load i64, ptr %39, align 8, !tbaa !13
  %470 = getelementptr inbounds %"struct.tinyobj::warning_context", ptr %65, i32 0, i32 1
  store i64 %469, ptr %470, align 8, !tbaa !34
  %471 = load ptr, ptr %43, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %471, i64 0
  %473 = load i8, ptr %472, align 1, !tbaa !15
  %474 = sext i8 %473 to i32
  %475 = icmp eq i32 %474, 108
  br i1 %475, label %476, label %580

476:                                              ; preds = %466
  %477 = load ptr, ptr %43, align 8, !tbaa !5
  %478 = getelementptr inbounds i8, ptr %477, i64 1
  %479 = load i8, ptr %478, align 1, !tbaa !15
  %480 = sext i8 %479 to i32
  %481 = icmp eq i32 %480, 32
  br i1 %481, label %488, label %482

482:                                              ; preds = %476
  %483 = load ptr, ptr %43, align 8, !tbaa !5
  %484 = getelementptr inbounds i8, ptr %483, i64 1
  %485 = load i8, ptr %484, align 1, !tbaa !15
  %486 = sext i8 %485 to i32
  %487 = icmp eq i32 %486, 9
  br i1 %487, label %488, label %580

488:                                              ; preds = %482, %476
  %489 = load ptr, ptr %43, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 2
  store ptr %490, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %66) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  br label %491

491:                                              ; preds = %569, %488
  %492 = load ptr, ptr %43, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 0
  %494 = load i8, ptr %493, align 1, !tbaa !15
  %495 = sext i8 %494 to i32
  %496 = icmp eq i32 %495, 13
  br i1 %496, label %509, label %497

497:                                              ; preds = %491
  %498 = load ptr, ptr %43, align 8, !tbaa !5
  %499 = getelementptr inbounds i8, ptr %498, i64 0
  %500 = load i8, ptr %499, align 1, !tbaa !15
  %501 = sext i8 %500 to i32
  %502 = icmp eq i32 %501, 10
  br i1 %502, label %509, label %503

503:                                              ; preds = %497
  %504 = load ptr, ptr %43, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 0
  %506 = load i8, ptr %505, align 1, !tbaa !15
  %507 = sext i8 %506 to i32
  %508 = icmp eq i32 %507, 0
  br label %509

509:                                              ; preds = %503, %497, %491
  %510 = phi i1 [ true, %497 ], [ true, %491 ], [ %508, %503 ]
  %511 = xor i1 %510, true
  br i1 %511, label %512, label %571

512:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 12, ptr %67) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %67)
          to label %513 unwind label %535

513:                                              ; preds = %512
  %514 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %515 = udiv i64 %514, 3
  %516 = trunc i64 %515 to i32
  %517 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %518 = udiv i64 %517, 3
  %519 = trunc i64 %518 to i32
  %520 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %521 = udiv i64 %520, 2
  %522 = trunc i64 %521 to i32
  %523 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef %43, i32 noundef %516, i32 noundef %519, i32 noundef %522, ptr noundef %67, ptr noundef nonnull align 8 dereferenceable(16) %65)
          to label %524 unwind label %535

524:                                              ; preds = %513
  br i1 %523, label %559, label %525

525:                                              ; preds = %524
  %526 = load ptr, ptr %15, align 8, !tbaa !5
  %527 = icmp ne ptr %526, null
  br i1 %527, label %528, label %558

528:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #10
  invoke void @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %529 unwind label %539

529:                                              ; preds = %528
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %70)
          to label %530 unwind label %543

530:                                              ; preds = %529
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef @.str.53)
          to label %531 unwind label %547

531:                                              ; preds = %530
  %532 = load ptr, ptr %15, align 8, !tbaa !5
  %533 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %534 unwind label %551

534:                                              ; preds = %531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #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 %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  br label %558

535:                                              ; preds = %559, %513, %512
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %41, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %42, align 4
  br label %570

539:                                              ; preds = %528
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %41, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %42, align 4
  br label %557

543:                                              ; preds = %529
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %41, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %42, align 4
  br label %556

547:                                              ; preds = %530
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %41, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %42, align 4
  br label %555

551:                                              ; preds = %531
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %41, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  br label %555

555:                                              ; preds = %551, %547
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  br label %556

556:                                              ; preds = %555, %543
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  br label %557

557:                                              ; preds = %556, %539
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  br label %570

558:                                              ; preds = %534, %525
  store i1 false, ptr %10, align 1
  store i32 1, ptr %44, align 4
  br label %567

559:                                              ; preds = %524
  %560 = getelementptr inbounds %"struct.tinyobj::__line_t", ptr %66, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %560, ptr noundef nonnull align 4 dereferenceable(12) %67)
          to label %561 unwind label %535

561:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %562 = load ptr, ptr %43, align 8, !tbaa !5
  %563 = call i64 @strspn(ptr noundef %562, ptr noundef @.str.12) #11
  store i64 %563, ptr %71, align 8, !tbaa !13
  %564 = load i64, ptr %71, align 8, !tbaa !13
  %565 = load ptr, ptr %43, align 8, !tbaa !5
  %566 = getelementptr inbounds i8, ptr %565, i64 %564
  store ptr %566, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  store i32 0, ptr %44, align 4
  br label %567

567:                                              ; preds = %561, %558
  call void @llvm.lifetime.end.p0(i64 12, ptr %67) #10
  %568 = load i32, ptr %44, align 4
  switch i32 %568, label %578 [
    i32 0, label %569
  ]

569:                                              ; preds = %567
  br label %491, !llvm.loop !35

570:                                              ; preds = %557, %535
  call void @llvm.lifetime.end.p0(i64 12, ptr %67) #10
  br label %579

571:                                              ; preds = %509
  %572 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %28, i32 0, i32 1
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %572, ptr noundef nonnull align 8 dereferenceable(24) %66)
          to label %573 unwind label %574

573:                                              ; preds = %571
  store i32 2, ptr %44, align 4
  br label %578, !llvm.loop !16

574:                                              ; preds = %571
  %575 = landingpad { ptr, i32 }
          cleanup
  %576 = extractvalue { ptr, i32 } %575, 0
  store ptr %576, ptr %41, align 8
  %577 = extractvalue { ptr, i32 } %575, 1
  store i32 %577, ptr %42, align 4
  br label %579

578:                                              ; preds = %573, %567
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %66) #10
  br label %1563

579:                                              ; preds = %574, %570
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %66) #10
  br label %1567

580:                                              ; preds = %482, %466
  %581 = load ptr, ptr %43, align 8, !tbaa !5
  %582 = getelementptr inbounds i8, ptr %581, i64 0
  %583 = load i8, ptr %582, align 1, !tbaa !15
  %584 = sext i8 %583 to i32
  %585 = icmp eq i32 %584, 112
  br i1 %585, label %586, label %690

586:                                              ; preds = %580
  %587 = load ptr, ptr %43, align 8, !tbaa !5
  %588 = getelementptr inbounds i8, ptr %587, i64 1
  %589 = load i8, ptr %588, align 1, !tbaa !15
  %590 = sext i8 %589 to i32
  %591 = icmp eq i32 %590, 32
  br i1 %591, label %598, label %592

592:                                              ; preds = %586
  %593 = load ptr, ptr %43, align 8, !tbaa !5
  %594 = getelementptr inbounds i8, ptr %593, i64 1
  %595 = load i8, ptr %594, align 1, !tbaa !15
  %596 = sext i8 %595 to i32
  %597 = icmp eq i32 %596, 9
  br i1 %597, label %598, label %690

598:                                              ; preds = %592, %586
  %599 = load ptr, ptr %43, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i64 2
  store ptr %600, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %72) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %72) #10
  br label %601

601:                                              ; preds = %679, %598
  %602 = load ptr, ptr %43, align 8, !tbaa !5
  %603 = getelementptr inbounds i8, ptr %602, i64 0
  %604 = load i8, ptr %603, align 1, !tbaa !15
  %605 = sext i8 %604 to i32
  %606 = icmp eq i32 %605, 13
  br i1 %606, label %619, label %607

607:                                              ; preds = %601
  %608 = load ptr, ptr %43, align 8, !tbaa !5
  %609 = getelementptr inbounds i8, ptr %608, i64 0
  %610 = load i8, ptr %609, align 1, !tbaa !15
  %611 = sext i8 %610 to i32
  %612 = icmp eq i32 %611, 10
  br i1 %612, label %619, label %613

613:                                              ; preds = %607
  %614 = load ptr, ptr %43, align 8, !tbaa !5
  %615 = getelementptr inbounds i8, ptr %614, i64 0
  %616 = load i8, ptr %615, align 1, !tbaa !15
  %617 = sext i8 %616 to i32
  %618 = icmp eq i32 %617, 0
  br label %619

619:                                              ; preds = %613, %607, %601
  %620 = phi i1 [ true, %607 ], [ true, %601 ], [ %618, %613 ]
  %621 = xor i1 %620, true
  br i1 %621, label %622, label %681

622:                                              ; preds = %619
  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 %623 unwind label %645

623:                                              ; preds = %622
  %624 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %625 = udiv i64 %624, 3
  %626 = trunc i64 %625 to i32
  %627 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %628 = udiv i64 %627, 3
  %629 = trunc i64 %628 to i32
  %630 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %631 = udiv i64 %630, 2
  %632 = trunc i64 %631 to i32
  %633 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef %43, i32 noundef %626, i32 noundef %629, i32 noundef %632, ptr noundef %73, ptr noundef nonnull align 8 dereferenceable(16) %65)
          to label %634 unwind label %645

634:                                              ; preds = %623
  br i1 %633, label %669, label %635

635:                                              ; preds = %634
  %636 = load ptr, ptr %15, align 8, !tbaa !5
  %637 = icmp ne ptr %636, null
  br i1 %637, label %638, label %668

638:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #10
  invoke void @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %639 unwind label %649

639:                                              ; preds = %638
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef @.str.54, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %640 unwind label %653

640:                                              ; preds = %639
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef @.str.53)
          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) %74)
          to label %644 unwind label %661

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

645:                                              ; preds = %669, %623, %622
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %41, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %42, align 4
  br label %680

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

653:                                              ; preds = %639
  %654 = landingpad { ptr, i32 }
          cleanup
  %655 = extractvalue { ptr, i32 } %654, 0
  store ptr %655, ptr %41, align 8
  %656 = extractvalue { ptr, i32 } %654, 1
  store i32 %656, ptr %42, align 4
  br label %666

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

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

665:                                              ; preds = %661, %657
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %666

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

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

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

669:                                              ; preds = %634
  %670 = getelementptr inbounds %"struct.tinyobj::__points_t", ptr %72, 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) %73)
          to label %671 unwind label %645

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

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

679:                                              ; preds = %677
  br label %601, !llvm.loop !36

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

681:                                              ; preds = %619
  %682 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %28, 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) %72)
          to label %683 unwind label %684

683:                                              ; preds = %681
  store i32 2, ptr %44, 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 %41, align 8
  %687 = extractvalue { ptr, i32 } %685, 1
  store i32 %687, ptr %42, align 4
  br label %689

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

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

690:                                              ; preds = %592, %580
  %691 = load ptr, ptr %43, 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 %847

696:                                              ; preds = %690
  %697 = load ptr, ptr %43, 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 %43, 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 %847

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

715:                                              ; preds = %708
  %716 = load i32, ptr %33, align 4, !tbaa !11
  %717 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %78, i32 0, i32 0
  store i32 %716, ptr %717, align 8, !tbaa !37
  %718 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %78, 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 %768

719:                                              ; preds = %715
  br label %720

720:                                              ; preds = %839, %719
  %721 = load ptr, ptr %43, 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 %43, 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 %43, 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 %841

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

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) %23) #10
  %747 = udiv i64 %746, 3
  %748 = trunc i64 %747 to i32
  %749 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %750 = udiv i64 %749, 2
  %751 = trunc i64 %750 to i32
  %752 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef %43, i32 noundef %745, i32 noundef %748, i32 noundef %751, ptr noundef %79, ptr noundef nonnull align 8 dereferenceable(16) %65)
          to label %753 unwind label %772

753:                                              ; preds = %742
  br i1 %752, label %796, 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 %795

757:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #10
  invoke void @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %758 unwind label %776

758:                                              ; preds = %757
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %759 unwind label %780

759:                                              ; preds = %758
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef @.str.53)
          to label %760 unwind label %784

760:                                              ; preds = %759
  %761 = load ptr, ptr %15, align 8, !tbaa !5
  %762 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %761, ptr noundef nonnull align 8 dereferenceable(32) %80)
          to label %763 unwind label %788

763:                                              ; preds = %760
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  br label %795

764:                                              ; preds = %708
  %765 = landingpad { ptr, i32 }
          cleanup
  %766 = extractvalue { ptr, i32 } %765, 0
  store ptr %766, ptr %41, align 8
  %767 = extractvalue { ptr, i32 } %765, 1
  store i32 %767, ptr %42, align 4
  br label %846

768:                                              ; preds = %841, %715
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %41, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %42, align 4
  br label %845

772:                                              ; preds = %828, %742, %741
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %41, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %42, align 4
  br label %840

776:                                              ; preds = %757
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %41, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %42, align 4
  br label %794

780:                                              ; preds = %758
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %41, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %42, align 4
  br label %793

784:                                              ; preds = %759
  %785 = landingpad { ptr, i32 }
          cleanup
  %786 = extractvalue { ptr, i32 } %785, 0
  store ptr %786, ptr %41, align 8
  %787 = extractvalue { ptr, i32 } %785, 1
  store i32 %787, ptr %42, align 4
  br label %792

788:                                              ; preds = %760
  %789 = landingpad { ptr, i32 }
          cleanup
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %41, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  br label %792

792:                                              ; preds = %788, %784
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  br label %793

793:                                              ; preds = %792, %780
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #10
  br label %794

794:                                              ; preds = %793, %776
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  br label %840

795:                                              ; preds = %763, %754
  store i1 false, ptr %10, align 1
  store i32 1, ptr %44, align 4
  br label %837

796:                                              ; preds = %753
  %797 = load i32, ptr %34, align 4, !tbaa !11
  %798 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 0
  %799 = load i32, ptr %798, align 4, !tbaa !43
  %800 = icmp sgt i32 %797, %799
  br i1 %800, label %801, label %803

801:                                              ; preds = %796
  %802 = load i32, ptr %34, align 4, !tbaa !11
  br label %806

803:                                              ; preds = %796
  %804 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 0
  %805 = load i32, ptr %804, align 4, !tbaa !43
  br label %806

806:                                              ; preds = %803, %801
  %807 = phi i32 [ %802, %801 ], [ %805, %803 ]
  store i32 %807, ptr %34, align 4, !tbaa !11
  %808 = load i32, ptr %35, align 4, !tbaa !11
  %809 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 2
  %810 = load i32, ptr %809, align 4, !tbaa !45
  %811 = icmp sgt i32 %808, %810
  br i1 %811, label %812, label %814

812:                                              ; preds = %806
  %813 = load i32, ptr %35, align 4, !tbaa !11
  br label %817

814:                                              ; preds = %806
  %815 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 2
  %816 = load i32, ptr %815, align 4, !tbaa !45
  br label %817

817:                                              ; preds = %814, %812
  %818 = phi i32 [ %813, %812 ], [ %816, %814 ]
  store i32 %818, ptr %35, align 4, !tbaa !11
  %819 = load i32, ptr %36, align 4, !tbaa !11
  %820 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 1
  %821 = load i32, ptr %820, align 4, !tbaa !46
  %822 = icmp sgt i32 %819, %821
  br i1 %822, label %823, label %825

823:                                              ; preds = %817
  %824 = load i32, ptr %36, align 4, !tbaa !11
  br label %828

825:                                              ; preds = %817
  %826 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %79, i32 0, i32 1
  %827 = load i32, ptr %826, align 4, !tbaa !46
  br label %828

828:                                              ; preds = %825, %823
  %829 = phi i32 [ %824, %823 ], [ %827, %825 ]
  store i32 %829, ptr %36, align 4, !tbaa !11
  %830 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %78, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %830, ptr noundef nonnull align 4 dereferenceable(12) %79)
          to label %831 unwind label %772

831:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #10
  %832 = load ptr, ptr %43, align 8, !tbaa !5
  %833 = call i64 @strspn(ptr noundef %832, ptr noundef @.str.12) #11
  store i64 %833, ptr %83, align 8, !tbaa !13
  %834 = load i64, ptr %83, align 8, !tbaa !13
  %835 = load ptr, ptr %43, align 8, !tbaa !5
  %836 = getelementptr inbounds i8, ptr %835, i64 %834
  store ptr %836, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #10
  store i32 0, ptr %44, align 4
  br label %837

837:                                              ; preds = %831, %795
  call void @llvm.lifetime.end.p0(i64 12, ptr %79) #10
  %838 = load i32, ptr %44, align 4
  switch i32 %838, label %844 [
    i32 0, label %839
  ]

839:                                              ; preds = %837
  br label %720, !llvm.loop !47

840:                                              ; preds = %794, %772
  call void @llvm.lifetime.end.p0(i64 12, ptr %79) #10
  br label %845

841:                                              ; preds = %738
  %842 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %28, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %842, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %843 unwind label %768

843:                                              ; preds = %841
  store i32 2, ptr %44, align 4
  br label %844, !llvm.loop !16

844:                                              ; preds = %843, %837
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #10
  br label %1563

845:                                              ; preds = %840, %768
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  br label %846

846:                                              ; preds = %845, %764
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #10
  br label %1567

847:                                              ; preds = %702, %690
  %848 = load ptr, ptr %43, align 8, !tbaa !5
  %849 = call i32 @strncmp(ptr noundef %848, ptr noundef @.str.56, i64 noundef 6) #11
  %850 = icmp eq i32 0, %849
  br i1 %850, label %851, label %917

851:                                              ; preds = %847
  %852 = load ptr, ptr %43, align 8, !tbaa !5
  %853 = getelementptr inbounds i8, ptr %852, i64 6
  store ptr %853, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef %43)
          to label %854 unwind label %865

854:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #10
  store i32 -1, ptr %85, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #10
  %855 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %31, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %856 unwind label %869

856:                                              ; preds = %854
  %857 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %87, i32 0, i32 0
  store ptr %855, ptr %857, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(8) %87) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #10
  %858 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %31) #10
  %859 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %89, i32 0, i32 0
  store ptr %858, ptr %859, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 8 dereferenceable(8) %89) #10
  %860 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(8) %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  br i1 %860, label %861, label %873

861:                                              ; preds = %856
  %862 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %86) #10
  %863 = getelementptr inbounds %"struct.std::pair.90", ptr %862, i32 0, i32 1
  %864 = load i32, ptr %863, align 8, !tbaa !48
  store i32 %864, ptr %85, align 4, !tbaa !11
  br label %897

865:                                              ; preds = %851
  %866 = landingpad { ptr, i32 }
          cleanup
  %867 = extractvalue { ptr, i32 } %866, 0
  store ptr %867, ptr %41, align 8
  %868 = extractvalue { ptr, i32 } %866, 1
  store i32 %868, ptr %42, align 4
  br label %916

869:                                              ; preds = %854
  %870 = landingpad { ptr, i32 }
          cleanup
  %871 = extractvalue { ptr, i32 } %870, 0
  store ptr %871, ptr %41, align 8
  %872 = extractvalue { ptr, i32 } %870, 1
  store i32 %872, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  br label %915

873:                                              ; preds = %856
  %874 = load ptr, ptr %14, align 8, !tbaa !5
  %875 = icmp ne ptr %874, null
  br i1 %875, label %876, label %896

876:                                              ; preds = %873
  call void @llvm.lifetime.start.p0(i64 32, ptr %90) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #10
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef @.str.57, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %877 unwind label %882

877:                                              ; preds = %876
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef @.str.58)
          to label %878 unwind label %886

878:                                              ; preds = %877
  %879 = load ptr, ptr %14, align 8, !tbaa !5
  %880 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %879, ptr noundef nonnull align 8 dereferenceable(32) %90)
          to label %881 unwind label %890

881:                                              ; preds = %878
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #10
  br label %896

882:                                              ; preds = %876
  %883 = landingpad { ptr, i32 }
          cleanup
  %884 = extractvalue { ptr, i32 } %883, 0
  store ptr %884, ptr %41, align 8
  %885 = extractvalue { ptr, i32 } %883, 1
  store i32 %885, ptr %42, align 4
  br label %895

886:                                              ; preds = %877
  %887 = landingpad { ptr, i32 }
          cleanup
  %888 = extractvalue { ptr, i32 } %887, 0
  store ptr %888, ptr %41, align 8
  %889 = extractvalue { ptr, i32 } %887, 1
  store i32 %889, ptr %42, align 4
  br label %894

890:                                              ; preds = %878
  %891 = landingpad { ptr, i32 }
          cleanup
  %892 = extractvalue { ptr, i32 } %891, 0
  store ptr %892, ptr %41, align 8
  %893 = extractvalue { ptr, i32 } %891, 1
  store i32 %893, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #10
  br label %894

894:                                              ; preds = %890, %886
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #10
  br label %895

895:                                              ; preds = %894, %882
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %90) #10
  br label %915

896:                                              ; preds = %881, %873
  br label %897

897:                                              ; preds = %896, %861
  %898 = load i32, ptr %85, align 4, !tbaa !11
  %899 = load i32, ptr %32, align 4, !tbaa !11
  %900 = icmp ne i32 %898, %899
  br i1 %900, label %901, label %914

901:                                              ; preds = %897
  %902 = load i32, ptr %32, align 4, !tbaa !11
  %903 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %904 = trunc i8 %903 to i1
  %905 = load ptr, ptr %14, align 8, !tbaa !5
  %906 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef %37, ptr noundef nonnull align 8 dereferenceable(72) %28, ptr noundef nonnull align 8 dereferenceable(24) %27, i32 noundef %902, ptr noundef nonnull align 8 dereferenceable(32) %29, i1 noundef zeroext %904, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef %905)
          to label %907 unwind label %910

907:                                              ; preds = %901
  %908 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %28, i32 0, i32 0
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %908) #10
  %909 = load i32, ptr %85, align 4, !tbaa !11
  store i32 %909, ptr %32, align 4, !tbaa !11
  br label %914

910:                                              ; preds = %901
  %911 = landingpad { ptr, i32 }
          cleanup
  %912 = extractvalue { ptr, i32 } %911, 0
  store ptr %912, ptr %41, align 8
  %913 = extractvalue { ptr, i32 } %911, 1
  store i32 %913, ptr %42, align 4
  br label %915

914:                                              ; preds = %907, %897
  store i32 2, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #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
  br label %1563

915:                                              ; preds = %910, %895, %869
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  br label %916

916:                                              ; preds = %915, %865
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #10
  br label %1567

917:                                              ; preds = %847
  %918 = load ptr, ptr %43, align 8, !tbaa !5
  %919 = call i32 @strncmp(ptr noundef %918, ptr noundef @.str.59, i64 noundef 6) #11
  %920 = icmp eq i32 0, %919
  br i1 %920, label %921, label %1091

921:                                              ; preds = %917
  %922 = load ptr, ptr %43, align 8, !tbaa !5
  %923 = getelementptr inbounds i8, ptr %922, i64 6
  %924 = load i8, ptr %923, align 1, !tbaa !15
  %925 = sext i8 %924 to i32
  %926 = icmp eq i32 %925, 32
  br i1 %926, label %933, label %927

927:                                              ; preds = %921
  %928 = load ptr, ptr %43, 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, 9
  br i1 %932, label %933, label %1091

933:                                              ; preds = %927, %921
  %934 = load ptr, ptr %17, align 8, !tbaa !5
  %935 = icmp ne ptr %934, null
  br i1 %935, label %936, label %1090

936:                                              ; preds = %933
  %937 = load ptr, ptr %43, align 8, !tbaa !5
  %938 = getelementptr inbounds i8, ptr %937, i64 7
  store ptr %938, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %92) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #10
  %939 = load ptr, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %94) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %93, ptr noundef %939, ptr noundef nonnull align 1 dereferenceable(1) %94)
          to label %940 unwind label %960

940:                                              ; preds = %936
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEccRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %93, i8 noundef signext 32, i8 noundef signext 92, ptr noundef nonnull align 8 dereferenceable(24) %92)
          to label %941 unwind label %964

941:                                              ; preds = %940
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  %942 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #10
  br i1 %942, label %943, label %989

943:                                              ; preds = %941
  %944 = load ptr, ptr %14, align 8, !tbaa !5
  %945 = icmp ne ptr %944, null
  br i1 %945, label %946, label %988

946:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 392, ptr %95) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %95)
          to label %947 unwind label %969

947:                                              ; preds = %946
  %948 = getelementptr inbounds i8, ptr %95, i64 16
  %949 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %948, ptr noundef @.str.60)
          to label %950 unwind label %973

950:                                              ; preds = %947
  %951 = load i64, ptr %39, align 8, !tbaa !13
  %952 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %949, i64 noundef %951)
          to label %953 unwind label %973

953:                                              ; preds = %950
  %954 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %952, ptr noundef @.str.51)
          to label %955 unwind label %973

955:                                              ; preds = %953
  call void @llvm.lifetime.start.p0(i64 32, ptr %96) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %96, ptr noundef nonnull align 8 dereferenceable(128) %95)
          to label %956 unwind label %977

956:                                              ; preds = %955
  %957 = load ptr, ptr %14, align 8, !tbaa !5
  %958 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %957, ptr noundef nonnull align 8 dereferenceable(32) %96)
          to label %959 unwind label %981

959:                                              ; preds = %956
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %95) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %95) #10
  br label %988

960:                                              ; preds = %936
  %961 = landingpad { ptr, i32 }
          cleanup
  %962 = extractvalue { ptr, i32 } %961, 0
  store ptr %962, ptr %41, align 8
  %963 = extractvalue { ptr, i32 } %961, 1
  store i32 %963, ptr %42, align 4
  br label %968

964:                                              ; preds = %940
  %965 = landingpad { ptr, i32 }
          cleanup
  %966 = extractvalue { ptr, i32 } %965, 0
  store ptr %966, ptr %41, align 8
  %967 = extractvalue { ptr, i32 } %965, 1
  store i32 %967, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  br label %968

968:                                              ; preds = %964, %960
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  br label %1089

969:                                              ; preds = %946
  %970 = landingpad { ptr, i32 }
          cleanup
  %971 = extractvalue { ptr, i32 } %970, 0
  store ptr %971, ptr %41, align 8
  %972 = extractvalue { ptr, i32 } %970, 1
  store i32 %972, ptr %42, align 4
  br label %987

973:                                              ; preds = %953, %950, %947
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %41, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %42, align 4
  br label %986

977:                                              ; preds = %955
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %41, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %42, align 4
  br label %985

981:                                              ; preds = %956
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %41, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %96) #10
  br label %985

985:                                              ; preds = %981, %977
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #10
  br label %986

986:                                              ; preds = %985, %973
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %95) #10
  br label %987

987:                                              ; preds = %986, %969
  call void @llvm.lifetime.end.p0(i64 392, ptr %95) #10
  br label %1089

988:                                              ; preds = %959, %943
  br label %1088

989:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #10
  store i8 0, ptr %97, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #10
  store i64 0, ptr %98, align 8, !tbaa !13
  br label %990

990:                                              ; preds = %1065, %989
  %991 = load i64, ptr %98, align 8, !tbaa !13
  %992 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #10
  %993 = icmp ult i64 %991, %992
  br i1 %993, label %995, label %994

994:                                              ; preds = %990
  store i32 12, ptr %44, align 4
  br label %1069

995:                                              ; preds = %990
  %996 = load i64, ptr %98, align 8, !tbaa !13
  %997 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %996) #10
  %998 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %30, ptr noundef nonnull align 8 dereferenceable(32) %997)
          to label %999 unwind label %1002

999:                                              ; preds = %995
  %1000 = icmp ugt i64 %998, 0
  br i1 %1000, label %1001, label %1006

1001:                                             ; preds = %999
  store i8 1, ptr %97, align 1, !tbaa !9
  br label %1065

1002:                                             ; preds = %995
  %1003 = landingpad { ptr, i32 }
          cleanup
  %1004 = extractvalue { ptr, i32 } %1003, 0
  store ptr %1004, ptr %41, align 8
  %1005 = extractvalue { ptr, i32 } %1003, 1
  store i32 %1005, ptr %42, align 4
  br label %1070

1006:                                             ; preds = %999
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %101) #10
  %1007 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #10
  %1008 = load i64, ptr %98, align 8, !tbaa !13
  %1009 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %1008) #10
  %1010 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %1009) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %103) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %103) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef %1010, ptr noundef nonnull align 1 dereferenceable(1) %103)
          to label %1011 unwind label %1027

1011:                                             ; preds = %1006
  %1012 = load ptr, ptr %13, align 8, !tbaa !5
  %1013 = load ptr, ptr %1007, align 8, !tbaa !52
  %1014 = getelementptr inbounds ptr, ptr %1013, i64 2
  %1015 = load ptr, ptr %1014, align 8
  %1016 = invoke noundef zeroext i1 %1015(ptr noundef nonnull align 8 dereferenceable(8) %1007, ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef %1012, ptr noundef %31, ptr noundef %99, ptr noundef %100)
          to label %1017 unwind label %1031

1017:                                             ; preds = %1011
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %103) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #10
  %1018 = zext i1 %1016 to i8
  store i8 %1018, ptr %101, align 1, !tbaa !9
  %1019 = load ptr, ptr %14, align 8, !tbaa !5
  %1020 = icmp ne ptr %1019, null
  br i1 %1020, label %1021, label %1040

1021:                                             ; preds = %1017
  %1022 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %99) #10
  br i1 %1022, label %1040, label %1023

1023:                                             ; preds = %1021
  %1024 = load ptr, ptr %14, align 8, !tbaa !5
  %1025 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1024, ptr noundef nonnull align 8 dereferenceable(32) %99)
          to label %1026 unwind label %1036

1026:                                             ; preds = %1023
  br label %1040

1027:                                             ; preds = %1006
  %1028 = landingpad { ptr, i32 }
          cleanup
  %1029 = extractvalue { ptr, i32 } %1028, 0
  store ptr %1029, ptr %41, align 8
  %1030 = extractvalue { ptr, i32 } %1028, 1
  store i32 %1030, ptr %42, align 4
  br label %1035

1031:                                             ; preds = %1011
  %1032 = landingpad { ptr, i32 }
          cleanup
  %1033 = extractvalue { ptr, i32 } %1032, 0
  store ptr %1033, ptr %41, align 8
  %1034 = extractvalue { ptr, i32 } %1032, 1
  store i32 %1034, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #10
  br label %1035

1035:                                             ; preds = %1031, %1027
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %103) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #10
  br label %1068

1036:                                             ; preds = %1052, %1045, %1023
  %1037 = landingpad { ptr, i32 }
          cleanup
  %1038 = extractvalue { ptr, i32 } %1037, 0
  store ptr %1038, ptr %41, align 8
  %1039 = extractvalue { ptr, i32 } %1037, 1
  store i32 %1039, ptr %42, align 4
  br label %1068

1040:                                             ; preds = %1026, %1021, %1017
  %1041 = load ptr, ptr %15, align 8, !tbaa !5
  %1042 = icmp ne ptr %1041, null
  br i1 %1042, label %1043, label %1049

1043:                                             ; preds = %1040
  %1044 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %100) #10
  br i1 %1044, label %1049, label %1045

1045:                                             ; preds = %1043
  %1046 = load ptr, ptr %15, align 8, !tbaa !5
  %1047 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1046, ptr noundef nonnull align 8 dereferenceable(32) %100)
          to label %1048 unwind label %1036

1048:                                             ; preds = %1045
  br label %1049

1049:                                             ; preds = %1048, %1043, %1040
  %1050 = load i8, ptr %101, align 1, !tbaa !9, !range !18, !noundef !19
  %1051 = trunc i8 %1050 to i1
  br i1 %1051, label %1052, label %1061

1052:                                             ; preds = %1049
  store i8 1, ptr %97, align 1, !tbaa !9
  %1053 = load i64, ptr %98, align 8, !tbaa !13
  %1054 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %1053) #10
  %1055 = invoke { ptr, i8 } @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE6insertERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %30, ptr noundef nonnull align 8 dereferenceable(32) %1054)
          to label %1056 unwind label %1036

1056:                                             ; preds = %1052
  %1057 = getelementptr inbounds { ptr, i8 }, ptr %104, i32 0, i32 0
  %1058 = extractvalue { ptr, i8 } %1055, 0
  store ptr %1058, ptr %1057, align 8
  %1059 = getelementptr inbounds { ptr, i8 }, ptr %104, i32 0, i32 1
  %1060 = extractvalue { ptr, i8 } %1055, 1
  store i8 %1060, ptr %1059, align 8
  store i32 12, ptr %44, align 4
  br label %1062

1061:                                             ; preds = %1049
  store i32 0, ptr %44, align 4
  br label %1062

1062:                                             ; preds = %1061, %1056
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #10
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #10
  %1063 = load i32, ptr %44, align 4
  switch i32 %1063, label %1069 [
    i32 0, label %1064
  ]

1064:                                             ; preds = %1062
  br label %1065

1065:                                             ; preds = %1064, %1001
  %1066 = load i64, ptr %98, align 8, !tbaa !13
  %1067 = add i64 %1066, 1
  store i64 %1067, ptr %98, align 8, !tbaa !13
  br label %990, !llvm.loop !54

1068:                                             ; preds = %1036, %1035
  call void @llvm.lifetime.end.p0(i64 1, ptr %101) #10
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #10
  br label %1070

1069:                                             ; preds = %1062, %994
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %1071

1070:                                             ; preds = %1068, %1002
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %1087

1071:                                             ; preds = %1069
  %1072 = load i8, ptr %97, align 1, !tbaa !9, !range !18, !noundef !19
  %1073 = trunc i8 %1072 to i1
  br i1 %1073, label %1086, label %1074

1074:                                             ; preds = %1071
  %1075 = load ptr, ptr %14, align 8, !tbaa !5
  %1076 = icmp ne ptr %1075, null
  br i1 %1076, label %1077, label %1085

1077:                                             ; preds = %1074
  %1078 = load ptr, ptr %14, align 8, !tbaa !5
  %1079 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1078, ptr noundef @.str.61)
          to label %1080 unwind label %1081

1080:                                             ; preds = %1077
  br label %1085

1081:                                             ; preds = %1077
  %1082 = landingpad { ptr, i32 }
          cleanup
  %1083 = extractvalue { ptr, i32 } %1082, 0
  store ptr %1083, ptr %41, align 8
  %1084 = extractvalue { ptr, i32 } %1082, 1
  store i32 %1084, ptr %42, align 4
  br label %1087

1085:                                             ; preds = %1080, %1074
  br label %1086

1086:                                             ; preds = %1085, %1071
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1088

1087:                                             ; preds = %1081, %1070
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1089

1088:                                             ; preds = %1086, %988
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #10
  br label %1090

1089:                                             ; preds = %1087, %987, %968
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %92) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %92) #10
  br label %1567

1090:                                             ; preds = %1088, %933
  store i32 2, ptr %44, align 4
  br label %1563, !llvm.loop !16

1091:                                             ; preds = %927, %917
  %1092 = load ptr, ptr %43, align 8, !tbaa !5
  %1093 = getelementptr inbounds i8, ptr %1092, i64 0
  %1094 = load i8, ptr %1093, align 1, !tbaa !15
  %1095 = sext i8 %1094 to i32
  %1096 = icmp eq i32 %1095, 103
  br i1 %1096, label %1097, label %1256

1097:                                             ; preds = %1091
  %1098 = load ptr, ptr %43, align 8, !tbaa !5
  %1099 = getelementptr inbounds i8, ptr %1098, i64 1
  %1100 = load i8, ptr %1099, align 1, !tbaa !15
  %1101 = sext i8 %1100 to i32
  %1102 = icmp eq i32 %1101, 32
  br i1 %1102, label %1109, label %1103

1103:                                             ; preds = %1097
  %1104 = load ptr, ptr %43, align 8, !tbaa !5
  %1105 = getelementptr inbounds i8, ptr %1104, i64 1
  %1106 = load i8, ptr %1105, align 1, !tbaa !15
  %1107 = sext i8 %1106 to i32
  %1108 = icmp eq i32 %1107, 9
  br i1 %1108, label %1109, label %1256

1109:                                             ; preds = %1103, %1097
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #10
  %1110 = load i32, ptr %32, align 4, !tbaa !11
  %1111 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1112 = trunc i8 %1111 to i1
  %1113 = load ptr, ptr %14, align 8, !tbaa !5
  %1114 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef %37, ptr noundef nonnull align 8 dereferenceable(72) %28, ptr noundef nonnull align 8 dereferenceable(24) %27, i32 noundef %1110, ptr noundef nonnull align 8 dereferenceable(32) %29, i1 noundef zeroext %1112, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef %1113)
          to label %1115 unwind label %1124

1115:                                             ; preds = %1109
  %1116 = zext i1 %1114 to i8
  store i8 %1116, ptr %105, align 1, !tbaa !9
  %1117 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %37, i32 0, i32 1
  %1118 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1117, i32 0, i32 0
  %1119 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1118) #10
  %1120 = icmp ugt i64 %1119, 0
  br i1 %1120, label %1121, label %1128

1121:                                             ; preds = %1115
  %1122 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1122, ptr noundef nonnull align 8 dereferenceable(224) %37)
          to label %1123 unwind label %1124

1123:                                             ; preds = %1121
  br label %1128

1124:                                             ; preds = %1128, %1121, %1109
  %1125 = landingpad { ptr, i32 }
          cleanup
  %1126 = extractvalue { ptr, i32 } %1125, 0
  store ptr %1126, ptr %41, align 8
  %1127 = extractvalue { ptr, i32 } %1125, 1
  store i32 %1127, ptr %42, align 4
  br label %1255

1128:                                             ; preds = %1123, %1115
  call void @llvm.lifetime.start.p0(i64 224, ptr %106) #10
  call void @llvm.memset.p0.i64(ptr align 8 %106, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %106) #10
  %1129 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %37, ptr noundef nonnull align 8 dereferenceable(224) %106) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %106) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %106) #10
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %28)
          to label %1130 unwind label %1124

1130:                                             ; preds = %1128
  call void @llvm.lifetime.start.p0(i64 24, ptr %107) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  br label %1131

1131:                                             ; preds = %1154, %1130
  %1132 = load ptr, ptr %43, align 8, !tbaa !5
  %1133 = getelementptr inbounds i8, ptr %1132, i64 0
  %1134 = load i8, ptr %1133, align 1, !tbaa !15
  %1135 = sext i8 %1134 to i32
  %1136 = icmp eq i32 %1135, 13
  br i1 %1136, label %1149, label %1137

1137:                                             ; preds = %1131
  %1138 = load ptr, ptr %43, align 8, !tbaa !5
  %1139 = getelementptr inbounds i8, ptr %1138, i64 0
  %1140 = load i8, ptr %1139, align 1, !tbaa !15
  %1141 = sext i8 %1140 to i32
  %1142 = icmp eq i32 %1141, 10
  br i1 %1142, label %1149, label %1143

1143:                                             ; preds = %1137
  %1144 = load ptr, ptr %43, align 8, !tbaa !5
  %1145 = getelementptr inbounds i8, ptr %1144, i64 0
  %1146 = load i8, ptr %1145, align 1, !tbaa !15
  %1147 = sext i8 %1146 to i32
  %1148 = icmp eq i32 %1147, 0
  br label %1149

1149:                                             ; preds = %1143, %1137, %1131
  %1150 = phi i1 [ true, %1137 ], [ true, %1131 ], [ %1148, %1143 ]
  %1151 = xor i1 %1150, true
  br i1 %1151, label %1152, label %1168

1152:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 32, ptr %108) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %108, ptr noundef %43)
          to label %1153 unwind label %1159

1153:                                             ; preds = %1152
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(32) %108)
          to label %1154 unwind label %1163

1154:                                             ; preds = %1153
  %1155 = load ptr, ptr %43, align 8, !tbaa !5
  %1156 = call i64 @strspn(ptr noundef %1155, ptr noundef @.str.12) #11
  %1157 = load ptr, ptr %43, align 8, !tbaa !5
  %1158 = getelementptr inbounds i8, ptr %1157, i64 %1156
  store ptr %1158, ptr %43, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #10
  br label %1131, !llvm.loop !55

1159:                                             ; preds = %1152
  %1160 = landingpad { ptr, i32 }
          cleanup
  %1161 = extractvalue { ptr, i32 } %1160, 0
  store ptr %1161, ptr %41, align 8
  %1162 = extractvalue { ptr, i32 } %1160, 1
  store i32 %1162, ptr %42, align 4
  br label %1167

1163:                                             ; preds = %1153
  %1164 = landingpad { ptr, i32 }
          cleanup
  %1165 = extractvalue { ptr, i32 } %1164, 0
  store ptr %1165, ptr %41, align 8
  %1166 = extractvalue { ptr, i32 } %1164, 1
  store i32 %1166, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #10
  br label %1167

1167:                                             ; preds = %1163, %1159
  call void @llvm.lifetime.end.p0(i64 32, ptr %108) #10
  br label %1254

1168:                                             ; preds = %1149
  %1169 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  %1170 = icmp ult i64 %1169, 2
  br i1 %1170, label %1171, label %1210

1171:                                             ; preds = %1168
  %1172 = load ptr, ptr %14, align 8, !tbaa !5
  %1173 = icmp ne ptr %1172, null
  br i1 %1173, label %1174, label %1209

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

1175:                                             ; preds = %1174
  %1176 = getelementptr inbounds i8, ptr %109, i64 16
  %1177 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1176, ptr noundef @.str.62)
          to label %1178 unwind label %1194

1178:                                             ; preds = %1175
  %1179 = load i64, ptr %39, align 8, !tbaa !13
  %1180 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1177, i64 noundef %1179)
          to label %1181 unwind label %1194

1181:                                             ; preds = %1178
  %1182 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1180, ptr noundef @.str.45)
          to label %1183 unwind label %1194

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

1184:                                             ; preds = %1183
  %1185 = load ptr, ptr %14, align 8, !tbaa !5
  %1186 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1185, ptr noundef nonnull align 8 dereferenceable(32) %110)
          to label %1187 unwind label %1202

1187:                                             ; preds = %1184
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #10
  %1188 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef @.str.49)
          to label %1189 unwind label %1194

1189:                                             ; preds = %1187
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %109) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %109) #10
  br label %1209

1190:                                             ; preds = %1174
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %41, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %42, align 4
  br label %1208

1194:                                             ; preds = %1187, %1181, %1178, %1175
  %1195 = landingpad { ptr, i32 }
          cleanup
  %1196 = extractvalue { ptr, i32 } %1195, 0
  store ptr %1196, ptr %41, align 8
  %1197 = extractvalue { ptr, i32 } %1195, 1
  store i32 %1197, ptr %42, align 4
  br label %1207

1198:                                             ; preds = %1183
  %1199 = landingpad { ptr, i32 }
          cleanup
  %1200 = extractvalue { ptr, i32 } %1199, 0
  store ptr %1200, ptr %41, align 8
  %1201 = extractvalue { ptr, i32 } %1199, 1
  store i32 %1201, ptr %42, align 4
  br label %1206

1202:                                             ; preds = %1184
  %1203 = landingpad { ptr, i32 }
          cleanup
  %1204 = extractvalue { ptr, i32 } %1203, 0
  store ptr %1204, ptr %41, align 8
  %1205 = extractvalue { ptr, i32 } %1203, 1
  store i32 %1205, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #10
  br label %1206

1206:                                             ; preds = %1202, %1198
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #10
  br label %1207

1207:                                             ; preds = %1206, %1194
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %109) #10
  br label %1208

1208:                                             ; preds = %1207, %1190
  call void @llvm.lifetime.end.p0(i64 392, ptr %109) #10
  br label %1254

1209:                                             ; preds = %1189, %1171
  br label %1253

1210:                                             ; preds = %1168
  call void @llvm.lifetime.start.p0(i64 392, ptr %111) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %111)
          to label %1211 unwind label %1221

1211:                                             ; preds = %1210
  %1212 = getelementptr inbounds i8, ptr %111, i64 16
  %1213 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef 1) #10
  %1214 = 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) %1212, ptr noundef nonnull align 8 dereferenceable(32) %1213)
          to label %1215 unwind label %1225

1215:                                             ; preds = %1211
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #10
  store i64 2, ptr %112, align 8, !tbaa !13
  br label %1216

1216:                                             ; preds = %1237, %1215
  %1217 = load i64, ptr %112, align 8, !tbaa !13
  %1218 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  %1219 = icmp ult i64 %1217, %1218
  br i1 %1219, label %1229, label %1220

1220:                                             ; preds = %1216
  store i32 17, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #10
  br label %1244

1221:                                             ; preds = %1210
  %1222 = landingpad { ptr, i32 }
          cleanup
  %1223 = extractvalue { ptr, i32 } %1222, 0
  store ptr %1223, ptr %41, align 8
  %1224 = extractvalue { ptr, i32 } %1222, 1
  store i32 %1224, ptr %42, align 4
  br label %1252

1225:                                             ; preds = %1211
  %1226 = landingpad { ptr, i32 }
          cleanup
  %1227 = extractvalue { ptr, i32 } %1226, 0
  store ptr %1227, ptr %41, align 8
  %1228 = extractvalue { ptr, i32 } %1226, 1
  store i32 %1228, ptr %42, align 4
  br label %1251

1229:                                             ; preds = %1216
  %1230 = getelementptr inbounds i8, ptr %111, i64 16
  %1231 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1230, ptr noundef @.str.63)
          to label %1232 unwind label %1240

1232:                                             ; preds = %1229
  %1233 = load i64, ptr %112, align 8, !tbaa !13
  %1234 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %1233) #10
  %1235 = 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) %1231, ptr noundef nonnull align 8 dereferenceable(32) %1234)
          to label %1236 unwind label %1240

1236:                                             ; preds = %1232
  br label %1237

1237:                                             ; preds = %1236
  %1238 = load i64, ptr %112, align 8, !tbaa !13
  %1239 = add i64 %1238, 1
  store i64 %1239, ptr %112, align 8, !tbaa !13
  br label %1216, !llvm.loop !56

1240:                                             ; preds = %1232, %1229
  %1241 = landingpad { ptr, i32 }
          cleanup
  %1242 = extractvalue { ptr, i32 } %1241, 0
  store ptr %1242, ptr %41, align 8
  %1243 = extractvalue { ptr, i32 } %1241, 1
  store i32 %1243, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #10
  br label %1251

1244:                                             ; preds = %1220
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(128) %111)
          to label %1245 unwind label %1247

1245:                                             ; preds = %1244
  %1246 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 8 dereferenceable(32) %113) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %111) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %111) #10
  br label %1253

1247:                                             ; preds = %1244
  %1248 = landingpad { ptr, i32 }
          cleanup
  %1249 = extractvalue { ptr, i32 } %1248, 0
  store ptr %1249, ptr %41, align 8
  %1250 = extractvalue { ptr, i32 } %1248, 1
  store i32 %1250, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #10
  br label %1251

1251:                                             ; preds = %1247, %1240, %1225
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %111) #10
  br label %1252

1252:                                             ; preds = %1251, %1221
  call void @llvm.lifetime.end.p0(i64 392, ptr %111) #10
  br label %1254

1253:                                             ; preds = %1245, %1209
  store i32 2, ptr %44, align 4
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %107) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  br label %1563

1254:                                             ; preds = %1252, %1208, %1167
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %107) #10
  br label %1255

1255:                                             ; preds = %1254, %1124
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  br label %1567

1256:                                             ; preds = %1103, %1091
  %1257 = load ptr, ptr %43, align 8, !tbaa !5
  %1258 = getelementptr inbounds i8, ptr %1257, i64 0
  %1259 = load i8, ptr %1258, align 1, !tbaa !15
  %1260 = sext i8 %1259 to i32
  %1261 = icmp eq i32 %1260, 111
  br i1 %1261, label %1262, label %1330

1262:                                             ; preds = %1256
  %1263 = load ptr, ptr %43, align 8, !tbaa !5
  %1264 = getelementptr inbounds i8, ptr %1263, i64 1
  %1265 = load i8, ptr %1264, align 1, !tbaa !15
  %1266 = sext i8 %1265 to i32
  %1267 = icmp eq i32 %1266, 32
  br i1 %1267, label %1274, label %1268

1268:                                             ; preds = %1262
  %1269 = load ptr, ptr %43, align 8, !tbaa !5
  %1270 = getelementptr inbounds i8, ptr %1269, i64 1
  %1271 = load i8, ptr %1270, align 1, !tbaa !15
  %1272 = sext i8 %1271 to i32
  %1273 = icmp eq i32 %1272, 9
  br i1 %1273, label %1274, label %1330

1274:                                             ; preds = %1268, %1262
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #10
  %1275 = load i32, ptr %32, align 4, !tbaa !11
  %1276 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1277 = trunc i8 %1276 to i1
  %1278 = load ptr, ptr %14, align 8, !tbaa !5
  %1279 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef %37, ptr noundef nonnull align 8 dereferenceable(72) %28, ptr noundef nonnull align 8 dereferenceable(24) %27, i32 noundef %1275, ptr noundef nonnull align 8 dereferenceable(32) %29, i1 noundef zeroext %1277, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef %1278)
          to label %1280 unwind label %1299

1280:                                             ; preds = %1274
  %1281 = zext i1 %1279 to i8
  store i8 %1281, ptr %114, align 1, !tbaa !9
  %1282 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %37, i32 0, i32 1
  %1283 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1282, i32 0, i32 0
  %1284 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1283) #10
  %1285 = icmp ugt i64 %1284, 0
  br i1 %1285, label %1296, label %1286

1286:                                             ; preds = %1280
  %1287 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %37, i32 0, i32 2
  %1288 = getelementptr inbounds %"struct.tinyobj::lines_t", ptr %1287, i32 0, i32 0
  %1289 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1288) #10
  %1290 = icmp ugt i64 %1289, 0
  br i1 %1290, label %1296, label %1291

1291:                                             ; preds = %1286
  %1292 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %37, i32 0, i32 3
  %1293 = getelementptr inbounds %"struct.tinyobj::points_t", ptr %1292, i32 0, i32 0
  %1294 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1293) #10
  %1295 = icmp ugt i64 %1294, 0
  br i1 %1295, label %1296, label %1303

1296:                                             ; preds = %1291, %1286, %1280
  %1297 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1297, ptr noundef nonnull align 8 dereferenceable(224) %37)
          to label %1298 unwind label %1299

1298:                                             ; preds = %1296
  br label %1303

1299:                                             ; preds = %1303, %1296, %1274
  %1300 = landingpad { ptr, i32 }
          cleanup
  %1301 = extractvalue { ptr, i32 } %1300, 0
  store ptr %1301, ptr %41, align 8
  %1302 = extractvalue { ptr, i32 } %1300, 1
  store i32 %1302, ptr %42, align 4
  br label %1329

1303:                                             ; preds = %1298, %1291
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %28)
          to label %1304 unwind label %1299

1304:                                             ; preds = %1303
  call void @llvm.lifetime.start.p0(i64 224, ptr %115) #10
  call void @llvm.memset.p0.i64(ptr align 8 %115, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %115) #10
  %1305 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %37, ptr noundef nonnull align 8 dereferenceable(224) %115) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %115) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %115) #10
  %1306 = load ptr, ptr %43, align 8, !tbaa !5
  %1307 = getelementptr inbounds i8, ptr %1306, i64 2
  store ptr %1307, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 392, ptr %116) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %116)
          to label %1308 unwind label %1315

1308:                                             ; preds = %1304
  %1309 = getelementptr inbounds i8, ptr %116, i64 16
  %1310 = load ptr, ptr %43, align 8, !tbaa !5
  %1311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1309, ptr noundef %1310)
          to label %1312 unwind label %1319

1312:                                             ; preds = %1308
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(128) %116)
          to label %1313 unwind label %1323

1313:                                             ; preds = %1312
  %1314 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 8 dereferenceable(32) %117) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #10
  store i32 2, ptr %44, align 4
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %116) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %116) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #10
  br label %1563

1315:                                             ; preds = %1304
  %1316 = landingpad { ptr, i32 }
          cleanup
  %1317 = extractvalue { ptr, i32 } %1316, 0
  store ptr %1317, ptr %41, align 8
  %1318 = extractvalue { ptr, i32 } %1316, 1
  store i32 %1318, ptr %42, align 4
  br label %1328

1319:                                             ; preds = %1308
  %1320 = landingpad { ptr, i32 }
          cleanup
  %1321 = extractvalue { ptr, i32 } %1320, 0
  store ptr %1321, ptr %41, align 8
  %1322 = extractvalue { ptr, i32 } %1320, 1
  store i32 %1322, ptr %42, align 4
  br label %1327

1323:                                             ; preds = %1312
  %1324 = landingpad { ptr, i32 }
          cleanup
  %1325 = extractvalue { ptr, i32 } %1324, 0
  store ptr %1325, ptr %41, align 8
  %1326 = extractvalue { ptr, i32 } %1324, 1
  store i32 %1326, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #10
  br label %1327

1327:                                             ; preds = %1323, %1319
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %116) #10
  br label %1328

1328:                                             ; preds = %1327, %1315
  call void @llvm.lifetime.end.p0(i64 392, ptr %116) #10
  br label %1329

1329:                                             ; preds = %1328, %1299
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #10
  br label %1567

1330:                                             ; preds = %1268, %1256
  %1331 = load ptr, ptr %43, align 8, !tbaa !5
  %1332 = getelementptr inbounds i8, ptr %1331, i64 0
  %1333 = load i8, ptr %1332, align 1, !tbaa !15
  %1334 = sext i8 %1333 to i32
  %1335 = icmp eq i32 %1334, 116
  br i1 %1335, label %1336, label %1481

1336:                                             ; preds = %1330
  %1337 = load ptr, ptr %43, align 8, !tbaa !5
  %1338 = getelementptr inbounds i8, ptr %1337, i64 1
  %1339 = load i8, ptr %1338, align 1, !tbaa !15
  %1340 = sext i8 %1339 to i32
  %1341 = icmp eq i32 %1340, 32
  br i1 %1341, label %1348, label %1342

1342:                                             ; preds = %1336
  %1343 = load ptr, ptr %43, align 8, !tbaa !5
  %1344 = getelementptr inbounds i8, ptr %1343, i64 1
  %1345 = load i8, ptr %1344, align 1, !tbaa !15
  %1346 = sext i8 %1345 to i32
  %1347 = icmp eq i32 %1346, 9
  br i1 %1347, label %1348, label %1481

1348:                                             ; preds = %1342, %1336
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #10
  store i32 8192, ptr %118, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 104, ptr %119) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %119) #10
  %1349 = load ptr, ptr %43, align 8, !tbaa !5
  %1350 = getelementptr inbounds i8, ptr %1349, i64 2
  store ptr %1350, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef %43)
          to label %1351 unwind label %1361

1351:                                             ; preds = %1348
  %1352 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 0
  %1353 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1352, ptr noundef nonnull align 8 dereferenceable(32) %120) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %121) #10
  %1354 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef %43)
          to label %1355 unwind label %1365

1355:                                             ; preds = %1351
  store { i64, i32 } %1354, ptr %122, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %121, ptr align 8 %122, i64 12, i1 false)
  %1356 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  %1357 = load i32, ptr %1356, align 4, !tbaa !57
  %1358 = icmp slt i32 %1357, 0
  br i1 %1358, label %1359, label %1369

1359:                                             ; preds = %1355
  %1360 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  store i32 0, ptr %1360, align 4, !tbaa !57
  br label %1369

1361:                                             ; preds = %1348
  %1362 = landingpad { ptr, i32 }
          cleanup
  %1363 = extractvalue { ptr, i32 } %1362, 0
  store ptr %1363, ptr %41, align 8
  %1364 = extractvalue { ptr, i32 } %1362, 1
  store i32 %1364, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #10
  br label %1480

1365:                                             ; preds = %1477, %1451, %1425, %1399, %1351
  %1366 = landingpad { ptr, i32 }
          cleanup
  %1367 = extractvalue { ptr, i32 } %1366, 0
  store ptr %1367, ptr %41, align 8
  %1368 = extractvalue { ptr, i32 } %1366, 1
  store i32 %1368, ptr %42, align 4
  br label %1479

1369:                                             ; preds = %1359, %1355
  %1370 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  %1371 = load i32, ptr %1370, align 4, !tbaa !57
  %1372 = icmp sgt i32 %1371, 8192
  br i1 %1372, label %1373, label %1375

1373:                                             ; preds = %1369
  %1374 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  store i32 8192, ptr %1374, align 4, !tbaa !57
  br label %1375

1375:                                             ; preds = %1373, %1369
  %1376 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  %1377 = load i32, ptr %1376, align 4, !tbaa !59
  %1378 = icmp slt i32 %1377, 0
  br i1 %1378, label %1379, label %1381

1379:                                             ; preds = %1375
  %1380 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  store i32 0, ptr %1380, align 4, !tbaa !59
  br label %1381

1381:                                             ; preds = %1379, %1375
  %1382 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  %1383 = load i32, ptr %1382, align 4, !tbaa !59
  %1384 = icmp sgt i32 %1383, 8192
  br i1 %1384, label %1385, label %1387

1385:                                             ; preds = %1381
  %1386 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  store i32 8192, ptr %1386, align 4, !tbaa !59
  br label %1387

1387:                                             ; preds = %1385, %1381
  %1388 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  %1389 = load i32, ptr %1388, align 4, !tbaa !60
  %1390 = icmp slt i32 %1389, 0
  br i1 %1390, label %1391, label %1393

1391:                                             ; preds = %1387
  %1392 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  store i32 0, ptr %1392, align 4, !tbaa !60
  br label %1393

1393:                                             ; preds = %1391, %1387
  %1394 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  %1395 = load i32, ptr %1394, align 4, !tbaa !60
  %1396 = icmp sgt i32 %1395, 8192
  br i1 %1396, label %1397, label %1399

1397:                                             ; preds = %1393
  %1398 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  store i32 8192, ptr %1398, align 4, !tbaa !60
  br label %1399

1399:                                             ; preds = %1397, %1393
  %1400 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 1
  %1401 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  %1402 = load i32, ptr %1401, align 4, !tbaa !57
  %1403 = sext i32 %1402 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1400, i64 noundef %1403)
          to label %1404 unwind label %1365

1404:                                             ; preds = %1399
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #10
  store i64 0, ptr %123, align 8, !tbaa !13
  br label %1405

1405:                                             ; preds = %1418, %1404
  %1406 = load i64, ptr %123, align 8, !tbaa !13
  %1407 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 0
  %1408 = load i32, ptr %1407, align 4, !tbaa !57
  %1409 = sext i32 %1408 to i64
  %1410 = icmp ult i64 %1406, %1409
  br i1 %1410, label %1412, label %1411

1411:                                             ; preds = %1405
  store i32 20, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #10
  br label %1425

1412:                                             ; preds = %1405
  %1413 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %43)
          to label %1414 unwind label %1421

1414:                                             ; preds = %1412
  %1415 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 1
  %1416 = load i64, ptr %123, align 8, !tbaa !13
  %1417 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1415, i64 noundef %1416) #10
  store i32 %1413, ptr %1417, align 4, !tbaa !11
  br label %1418

1418:                                             ; preds = %1414
  %1419 = load i64, ptr %123, align 8, !tbaa !13
  %1420 = add i64 %1419, 1
  store i64 %1420, ptr %123, align 8, !tbaa !13
  br label %1405, !llvm.loop !61

1421:                                             ; preds = %1412
  %1422 = landingpad { ptr, i32 }
          cleanup
  %1423 = extractvalue { ptr, i32 } %1422, 0
  store ptr %1423, ptr %41, align 8
  %1424 = extractvalue { ptr, i32 } %1422, 1
  store i32 %1424, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #10
  br label %1479

1425:                                             ; preds = %1411
  %1426 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 2
  %1427 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  %1428 = load i32, ptr %1427, align 4, !tbaa !59
  %1429 = sext i32 %1428 to i64
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1426, i64 noundef %1429)
          to label %1430 unwind label %1365

1430:                                             ; preds = %1425
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #10
  store i64 0, ptr %124, align 8, !tbaa !13
  br label %1431

1431:                                             ; preds = %1444, %1430
  %1432 = load i64, ptr %124, align 8, !tbaa !13
  %1433 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 1
  %1434 = load i32, ptr %1433, align 4, !tbaa !59
  %1435 = sext i32 %1434 to i64
  %1436 = icmp ult i64 %1432, %1435
  br i1 %1436, label %1438, label %1437

1437:                                             ; preds = %1431
  store i32 23, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #10
  br label %1451

1438:                                             ; preds = %1431
  %1439 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %43, double noundef 0.000000e+00)
          to label %1440 unwind label %1447

1440:                                             ; preds = %1438
  %1441 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 2
  %1442 = load i64, ptr %124, align 8, !tbaa !13
  %1443 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1441, i64 noundef %1442) #10
  store float %1439, ptr %1443, align 4, !tbaa !26
  br label %1444

1444:                                             ; preds = %1440
  %1445 = load i64, ptr %124, align 8, !tbaa !13
  %1446 = add i64 %1445, 1
  store i64 %1446, ptr %124, align 8, !tbaa !13
  br label %1431, !llvm.loop !62

1447:                                             ; preds = %1438
  %1448 = landingpad { ptr, i32 }
          cleanup
  %1449 = extractvalue { ptr, i32 } %1448, 0
  store ptr %1449, ptr %41, align 8
  %1450 = extractvalue { ptr, i32 } %1448, 1
  store i32 %1450, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #10
  br label %1479

1451:                                             ; preds = %1437
  %1452 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 3
  %1453 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  %1454 = load i32, ptr %1453, align 4, !tbaa !60
  %1455 = sext i32 %1454 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1452, i64 noundef %1455)
          to label %1456 unwind label %1365

1456:                                             ; preds = %1451
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #10
  store i64 0, ptr %125, align 8, !tbaa !13
  br label %1457

1457:                                             ; preds = %1470, %1456
  %1458 = load i64, ptr %125, align 8, !tbaa !13
  %1459 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %121, i32 0, i32 2
  %1460 = load i32, ptr %1459, align 4, !tbaa !60
  %1461 = sext i32 %1460 to i64
  %1462 = icmp ult i64 %1458, %1461
  br i1 %1462, label %1464, label %1463

1463:                                             ; preds = %1457
  store i32 26, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #10
  br label %1477

1464:                                             ; preds = %1457
  call void @llvm.lifetime.start.p0(i64 32, ptr %126) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %126, ptr noundef %43)
          to label %1465 unwind label %1473

1465:                                             ; preds = %1464
  %1466 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %119, i32 0, i32 3
  %1467 = load i64, ptr %125, align 8, !tbaa !13
  %1468 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1466, i64 noundef %1467) #10
  %1469 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1468, ptr noundef nonnull align 8 dereferenceable(32) %126) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #10
  br label %1470

1470:                                             ; preds = %1465
  %1471 = load i64, ptr %125, align 8, !tbaa !13
  %1472 = add i64 %1471, 1
  store i64 %1472, ptr %125, align 8, !tbaa !13
  br label %1457, !llvm.loop !63

1473:                                             ; preds = %1464
  %1474 = landingpad { ptr, i32 }
          cleanup
  %1475 = extractvalue { ptr, i32 } %1474, 0
  store ptr %1475, ptr %41, align 8
  %1476 = extractvalue { ptr, i32 } %1474, 1
  store i32 %1476, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #10
  br label %1479

1477:                                             ; preds = %1463
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 8 dereferenceable(104) %119)
          to label %1478 unwind label %1365

1478:                                             ; preds = %1477
  store i32 2, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %121) #10
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %119) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %119) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #10
  br label %1563

1479:                                             ; preds = %1473, %1447, %1421, %1365
  call void @llvm.lifetime.end.p0(i64 12, ptr %121) #10
  br label %1480

1480:                                             ; preds = %1479, %1361
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %119) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %119) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #10
  br label %1567

1481:                                             ; preds = %1342, %1330
  %1482 = load ptr, ptr %43, align 8, !tbaa !5
  %1483 = getelementptr inbounds i8, ptr %1482, i64 0
  %1484 = load i8, ptr %1483, align 1, !tbaa !15
  %1485 = sext i8 %1484 to i32
  %1486 = icmp eq i32 %1485, 115
  br i1 %1486, label %1487, label %1562

1487:                                             ; preds = %1481
  %1488 = load ptr, ptr %43, align 8, !tbaa !5
  %1489 = getelementptr inbounds i8, ptr %1488, i64 1
  %1490 = load i8, ptr %1489, align 1, !tbaa !15
  %1491 = sext i8 %1490 to i32
  %1492 = icmp eq i32 %1491, 32
  br i1 %1492, label %1499, label %1493

1493:                                             ; preds = %1487
  %1494 = load ptr, ptr %43, align 8, !tbaa !5
  %1495 = getelementptr inbounds i8, ptr %1494, i64 1
  %1496 = load i8, ptr %1495, align 1, !tbaa !15
  %1497 = sext i8 %1496 to i32
  %1498 = icmp eq i32 %1497, 9
  br i1 %1498, label %1499, label %1562

1499:                                             ; preds = %1493, %1487
  %1500 = load ptr, ptr %43, align 8, !tbaa !5
  %1501 = getelementptr inbounds i8, ptr %1500, i64 2
  store ptr %1501, ptr %43, align 8, !tbaa !5
  %1502 = load ptr, ptr %43, align 8, !tbaa !5
  %1503 = call i64 @strspn(ptr noundef %1502, ptr noundef @.str) #11
  %1504 = load ptr, ptr %43, align 8, !tbaa !5
  %1505 = getelementptr inbounds i8, ptr %1504, i64 %1503
  store ptr %1505, ptr %43, align 8, !tbaa !5
  %1506 = load ptr, ptr %43, align 8, !tbaa !5
  %1507 = getelementptr inbounds i8, ptr %1506, i64 0
  %1508 = load i8, ptr %1507, align 1, !tbaa !15
  %1509 = sext i8 %1508 to i32
  %1510 = icmp eq i32 %1509, 0
  br i1 %1510, label %1511, label %1512

1511:                                             ; preds = %1499
  store i32 2, ptr %44, align 4
  br label %1563, !llvm.loop !16

1512:                                             ; preds = %1499
  %1513 = load ptr, ptr %43, align 8, !tbaa !5
  %1514 = getelementptr inbounds i8, ptr %1513, i64 0
  %1515 = load i8, ptr %1514, align 1, !tbaa !15
  %1516 = sext i8 %1515 to i32
  %1517 = icmp eq i32 %1516, 13
  br i1 %1517, label %1524, label %1518

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

1524:                                             ; preds = %1518, %1512
  store i32 2, ptr %44, align 4
  br label %1563, !llvm.loop !16

1525:                                             ; preds = %1518
  %1526 = load ptr, ptr %43, align 8, !tbaa !5
  %1527 = call i64 @strlen(ptr noundef %1526) #11
  %1528 = icmp uge i64 %1527, 3
  br i1 %1528, label %1529, label %1548

1529:                                             ; preds = %1525
  %1530 = load ptr, ptr %43, align 8, !tbaa !5
  %1531 = getelementptr inbounds i8, ptr %1530, i64 0
  %1532 = load i8, ptr %1531, align 1, !tbaa !15
  %1533 = sext i8 %1532 to i32
  %1534 = icmp eq i32 %1533, 111
  br i1 %1534, label %1535, label %1548

1535:                                             ; preds = %1529
  %1536 = load ptr, ptr %43, align 8, !tbaa !5
  %1537 = getelementptr inbounds i8, ptr %1536, i64 1
  %1538 = load i8, ptr %1537, align 1, !tbaa !15
  %1539 = sext i8 %1538 to i32
  %1540 = icmp eq i32 %1539, 102
  br i1 %1540, label %1541, label %1548

1541:                                             ; preds = %1535
  %1542 = load ptr, ptr %43, align 8, !tbaa !5
  %1543 = getelementptr inbounds i8, ptr %1542, i64 2
  %1544 = load i8, ptr %1543, align 1, !tbaa !15
  %1545 = sext i8 %1544 to i32
  %1546 = icmp eq i32 %1545, 102
  br i1 %1546, label %1547, label %1548

1547:                                             ; preds = %1541
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %1561

1548:                                             ; preds = %1541, %1535, %1529, %1525
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #10
  %1549 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %43)
          to label %1550 unwind label %1554

1550:                                             ; preds = %1548
  store i32 %1549, ptr %127, align 4, !tbaa !11
  %1551 = load i32, ptr %127, align 4, !tbaa !11
  %1552 = icmp slt i32 %1551, 0
  br i1 %1552, label %1553, label %1558

1553:                                             ; preds = %1550
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %1560

1554:                                             ; preds = %1548
  %1555 = landingpad { ptr, i32 }
          cleanup
  %1556 = extractvalue { ptr, i32 } %1555, 0
  store ptr %1556, ptr %41, align 8
  %1557 = extractvalue { ptr, i32 } %1555, 1
  store i32 %1557, ptr %42, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #10
  br label %1567

1558:                                             ; preds = %1550
  %1559 = load i32, ptr %127, align 4, !tbaa !11
  store i32 %1559, ptr %33, align 4, !tbaa !11
  br label %1560

1560:                                             ; preds = %1558, %1553
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #10
  br label %1561

1561:                                             ; preds = %1560, %1547
  store i32 2, ptr %44, align 4
  br label %1563, !llvm.loop !16

1562:                                             ; preds = %1493, %1481
  store i32 0, ptr %44, align 4
  br label %1563

1563:                                             ; preds = %1562, %1561, %1524, %1511, %1478, %1313, %1253, %1090, %914, %844, %688, %578
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #10
  br label %1564

1564:                                             ; preds = %1563, %457, %328, %294, %263, %213, %206
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  %1565 = load i32, ptr %44, align 4
  switch i32 %1565, label %1761 [
    i32 0, label %1566
    i32 2, label %138
  ]

1566:                                             ; preds = %1564
  br label %138, !llvm.loop !16

1567:                                             ; preds = %1554, %1480, %1329, %1255, %1089, %916, %846, %689, %579
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #10
  br label %1568

1568:                                             ; preds = %1567, %465, %329, %295, %259
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  br label %1763

1569:                                             ; preds = %141
  %1570 = load i8, ptr %38, align 1, !tbaa !9, !range !18, !noundef !19
  %1571 = trunc i8 %1570 to i1
  br i1 %1571, label %1576, label %1572

1572:                                             ; preds = %1569
  %1573 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %1574 = trunc i8 %1573 to i1
  br i1 %1574, label %1576, label %1575

1575:                                             ; preds = %1572
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  br label %1576

1576:                                             ; preds = %1575, %1572, %1569
  %1577 = load i32, ptr %34, align 4, !tbaa !11
  %1578 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1579 = udiv i64 %1578, 3
  %1580 = trunc i64 %1579 to i32
  %1581 = icmp sge i32 %1577, %1580
  br i1 %1581, label %1582, label %1619

1582:                                             ; preds = %1576
  %1583 = load ptr, ptr %14, align 8, !tbaa !5
  %1584 = icmp ne ptr %1583, null
  br i1 %1584, label %1585, label %1618

1585:                                             ; preds = %1582
  call void @llvm.lifetime.start.p0(i64 392, ptr %128) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %128)
          to label %1586 unwind label %1599

1586:                                             ; preds = %1585
  %1587 = getelementptr inbounds i8, ptr %128, i64 16
  %1588 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1587, ptr noundef @.str.64)
          to label %1589 unwind label %1603

1589:                                             ; preds = %1586
  %1590 = load i64, ptr %39, align 8, !tbaa !13
  %1591 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1588, i64 noundef %1590)
          to label %1592 unwind label %1603

1592:                                             ; preds = %1589
  %1593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1591, ptr noundef @.str.65)
          to label %1594 unwind label %1603

1594:                                             ; preds = %1592
  call void @llvm.lifetime.start.p0(i64 32, ptr %129) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %129, ptr noundef nonnull align 8 dereferenceable(128) %128)
          to label %1595 unwind label %1607

1595:                                             ; preds = %1594
  %1596 = load ptr, ptr %14, align 8, !tbaa !5
  %1597 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1596, ptr noundef nonnull align 8 dereferenceable(32) %129)
          to label %1598 unwind label %1611

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

1599:                                             ; preds = %1585
  %1600 = landingpad { ptr, i32 }
          cleanup
  %1601 = extractvalue { ptr, i32 } %1600, 0
  store ptr %1601, ptr %41, align 8
  %1602 = extractvalue { ptr, i32 } %1600, 1
  store i32 %1602, ptr %42, align 4
  br label %1617

1603:                                             ; preds = %1592, %1589, %1586
  %1604 = landingpad { ptr, i32 }
          cleanup
  %1605 = extractvalue { ptr, i32 } %1604, 0
  store ptr %1605, ptr %41, align 8
  %1606 = extractvalue { ptr, i32 } %1604, 1
  store i32 %1606, ptr %42, align 4
  br label %1616

1607:                                             ; preds = %1594
  %1608 = landingpad { ptr, i32 }
          cleanup
  %1609 = extractvalue { ptr, i32 } %1608, 0
  store ptr %1609, ptr %41, align 8
  %1610 = extractvalue { ptr, i32 } %1608, 1
  store i32 %1610, ptr %42, align 4
  br label %1615

1611:                                             ; preds = %1595
  %1612 = landingpad { ptr, i32 }
          cleanup
  %1613 = extractvalue { ptr, i32 } %1612, 0
  store ptr %1613, ptr %41, align 8
  %1614 = extractvalue { ptr, i32 } %1612, 1
  store i32 %1614, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #10
  br label %1615

1615:                                             ; preds = %1611, %1607
  call void @llvm.lifetime.end.p0(i64 32, ptr %129) #10
  br label %1616

1616:                                             ; preds = %1615, %1603
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %128) #10
  br label %1617

1617:                                             ; preds = %1616, %1599
  call void @llvm.lifetime.end.p0(i64 392, ptr %128) #10
  br label %1763

1618:                                             ; preds = %1598, %1582
  br label %1619

1619:                                             ; preds = %1618, %1576
  %1620 = load i32, ptr %35, align 4, !tbaa !11
  %1621 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1622 = udiv i64 %1621, 3
  %1623 = trunc i64 %1622 to i32
  %1624 = icmp sge i32 %1620, %1623
  br i1 %1624, label %1625, label %1662

1625:                                             ; preds = %1619
  %1626 = load ptr, ptr %14, align 8, !tbaa !5
  %1627 = icmp ne ptr %1626, null
  br i1 %1627, label %1628, label %1661

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

1629:                                             ; preds = %1628
  %1630 = getelementptr inbounds i8, ptr %130, i64 16
  %1631 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1630, ptr noundef @.str.66)
          to label %1632 unwind label %1646

1632:                                             ; preds = %1629
  %1633 = load i64, ptr %39, align 8, !tbaa !13
  %1634 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1631, i64 noundef %1633)
          to label %1635 unwind label %1646

1635:                                             ; preds = %1632
  %1636 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1634, ptr noundef @.str.65)
          to label %1637 unwind label %1646

1637:                                             ; preds = %1635
  call void @llvm.lifetime.start.p0(i64 32, ptr %131) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %131, ptr noundef nonnull align 8 dereferenceable(128) %130)
          to label %1638 unwind label %1650

1638:                                             ; preds = %1637
  %1639 = load ptr, ptr %14, align 8, !tbaa !5
  %1640 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1639, ptr noundef nonnull align 8 dereferenceable(32) %131)
          to label %1641 unwind label %1654

1641:                                             ; preds = %1638
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %130) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %130) #10
  br label %1661

1642:                                             ; preds = %1628
  %1643 = landingpad { ptr, i32 }
          cleanup
  %1644 = extractvalue { ptr, i32 } %1643, 0
  store ptr %1644, ptr %41, align 8
  %1645 = extractvalue { ptr, i32 } %1643, 1
  store i32 %1645, ptr %42, align 4
  br label %1660

1646:                                             ; preds = %1635, %1632, %1629
  %1647 = landingpad { ptr, i32 }
          cleanup
  %1648 = extractvalue { ptr, i32 } %1647, 0
  store ptr %1648, ptr %41, align 8
  %1649 = extractvalue { ptr, i32 } %1647, 1
  store i32 %1649, ptr %42, align 4
  br label %1659

1650:                                             ; preds = %1637
  %1651 = landingpad { ptr, i32 }
          cleanup
  %1652 = extractvalue { ptr, i32 } %1651, 0
  store ptr %1652, ptr %41, align 8
  %1653 = extractvalue { ptr, i32 } %1651, 1
  store i32 %1653, ptr %42, align 4
  br label %1658

1654:                                             ; preds = %1638
  %1655 = landingpad { ptr, i32 }
          cleanup
  %1656 = extractvalue { ptr, i32 } %1655, 0
  store ptr %1656, ptr %41, align 8
  %1657 = extractvalue { ptr, i32 } %1655, 1
  store i32 %1657, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #10
  br label %1658

1658:                                             ; preds = %1654, %1650
  call void @llvm.lifetime.end.p0(i64 32, ptr %131) #10
  br label %1659

1659:                                             ; preds = %1658, %1646
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %130) #10
  br label %1660

1660:                                             ; preds = %1659, %1642
  call void @llvm.lifetime.end.p0(i64 392, ptr %130) #10
  br label %1763

1661:                                             ; preds = %1641, %1625
  br label %1662

1662:                                             ; preds = %1661, %1619
  %1663 = load i32, ptr %36, align 4, !tbaa !11
  %1664 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %1665 = udiv i64 %1664, 2
  %1666 = trunc i64 %1665 to i32
  %1667 = icmp sge i32 %1663, %1666
  br i1 %1667, label %1668, label %1705

1668:                                             ; preds = %1662
  %1669 = load ptr, ptr %14, align 8, !tbaa !5
  %1670 = icmp ne ptr %1669, null
  br i1 %1670, label %1671, label %1704

1671:                                             ; preds = %1668
  call void @llvm.lifetime.start.p0(i64 392, ptr %132) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %132)
          to label %1672 unwind label %1685

1672:                                             ; preds = %1671
  %1673 = getelementptr inbounds i8, ptr %132, i64 16
  %1674 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1673, ptr noundef @.str.67)
          to label %1675 unwind label %1689

1675:                                             ; preds = %1672
  %1676 = load i64, ptr %39, align 8, !tbaa !13
  %1677 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1674, i64 noundef %1676)
          to label %1678 unwind label %1689

1678:                                             ; preds = %1675
  %1679 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1677, ptr noundef @.str.65)
          to label %1680 unwind label %1689

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

1681:                                             ; preds = %1680
  %1682 = load ptr, ptr %14, align 8, !tbaa !5
  %1683 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1682, ptr noundef nonnull align 8 dereferenceable(32) %133)
          to label %1684 unwind label %1697

1684:                                             ; preds = %1681
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %132) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %132) #10
  br label %1704

1685:                                             ; preds = %1671
  %1686 = landingpad { ptr, i32 }
          cleanup
  %1687 = extractvalue { ptr, i32 } %1686, 0
  store ptr %1687, ptr %41, align 8
  %1688 = extractvalue { ptr, i32 } %1686, 1
  store i32 %1688, ptr %42, align 4
  br label %1703

1689:                                             ; preds = %1678, %1675, %1672
  %1690 = landingpad { ptr, i32 }
          cleanup
  %1691 = extractvalue { ptr, i32 } %1690, 0
  store ptr %1691, ptr %41, align 8
  %1692 = extractvalue { ptr, i32 } %1690, 1
  store i32 %1692, ptr %42, align 4
  br label %1702

1693:                                             ; preds = %1680
  %1694 = landingpad { ptr, i32 }
          cleanup
  %1695 = extractvalue { ptr, i32 } %1694, 0
  store ptr %1695, ptr %41, align 8
  %1696 = extractvalue { ptr, i32 } %1694, 1
  store i32 %1696, ptr %42, align 4
  br label %1701

1697:                                             ; preds = %1681
  %1698 = landingpad { ptr, i32 }
          cleanup
  %1699 = extractvalue { ptr, i32 } %1698, 0
  store ptr %1699, ptr %41, align 8
  %1700 = extractvalue { ptr, i32 } %1698, 1
  store i32 %1700, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #10
  br label %1701

1701:                                             ; preds = %1697, %1693
  call void @llvm.lifetime.end.p0(i64 32, ptr %133) #10
  br label %1702

1702:                                             ; preds = %1701, %1689
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %132) #10
  br label %1703

1703:                                             ; preds = %1702, %1685
  call void @llvm.lifetime.end.p0(i64 392, ptr %132) #10
  br label %1763

1704:                                             ; preds = %1684, %1668
  br label %1705

1705:                                             ; preds = %1704, %1662
  call void @llvm.lifetime.start.p0(i64 1, ptr %134) #10
  %1706 = load i32, ptr %32, align 4, !tbaa !11
  %1707 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1708 = trunc i8 %1707 to i1
  %1709 = load ptr, ptr %14, align 8, !tbaa !5
  %1710 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef %37, ptr noundef nonnull align 8 dereferenceable(72) %28, ptr noundef nonnull align 8 dereferenceable(24) %27, i32 noundef %1706, ptr noundef nonnull align 8 dereferenceable(32) %29, i1 noundef zeroext %1708, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef %1709)
          to label %1711 unwind label %1723

1711:                                             ; preds = %1705
  %1712 = zext i1 %1710 to i8
  store i8 %1712, ptr %134, align 1, !tbaa !9
  %1713 = load i8, ptr %134, align 1, !tbaa !9, !range !18, !noundef !19
  %1714 = trunc i8 %1713 to i1
  br i1 %1714, label %1720, label %1715

1715:                                             ; preds = %1711
  %1716 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %37, i32 0, i32 1
  %1717 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1716, i32 0, i32 0
  %1718 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1717) #10
  %1719 = icmp ne i64 %1718, 0
  br i1 %1719, label %1720, label %1727

1720:                                             ; preds = %1715, %1711
  %1721 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1721, ptr noundef nonnull align 8 dereferenceable(224) %37)
          to label %1722 unwind label %1723

1722:                                             ; preds = %1720
  br label %1727

1723:                                             ; preds = %1727, %1720, %1705
  %1724 = landingpad { ptr, i32 }
          cleanup
  %1725 = extractvalue { ptr, i32 } %1724, 0
  store ptr %1725, ptr %41, align 8
  %1726 = extractvalue { ptr, i32 } %1724, 1
  store i32 %1726, ptr %42, align 4
  br label %1760

1727:                                             ; preds = %1722, %1715
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %28)
          to label %1728 unwind label %1723

1728:                                             ; preds = %1727
  %1729 = load ptr, ptr %15, align 8, !tbaa !5
  %1730 = icmp ne ptr %1729, null
  br i1 %1730, label %1731, label %1745

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

1732:                                             ; preds = %1731
  %1733 = load ptr, ptr %15, align 8, !tbaa !5
  %1734 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1733, ptr noundef nonnull align 8 dereferenceable(32) %135)
          to label %1735 unwind label %1740

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

1736:                                             ; preds = %1731
  %1737 = landingpad { ptr, i32 }
          cleanup
  %1738 = extractvalue { ptr, i32 } %1737, 0
  store ptr %1738, ptr %41, align 8
  %1739 = extractvalue { ptr, i32 } %1737, 1
  store i32 %1739, ptr %42, align 4
  br label %1744

1740:                                             ; preds = %1732
  %1741 = landingpad { ptr, i32 }
          cleanup
  %1742 = extractvalue { ptr, i32 } %1741, 0
  store ptr %1742, ptr %41, align 8
  %1743 = extractvalue { ptr, i32 } %1741, 1
  store i32 %1743, ptr %42, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #10
  br label %1744

1744:                                             ; preds = %1740, %1736
  call void @llvm.lifetime.end.p0(i64 32, ptr %135) #10
  br label %1760

1745:                                             ; preds = %1735, %1728
  %1746 = load ptr, ptr %11, align 8, !tbaa !5
  %1747 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1746, i32 0, i32 0
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1747, ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1748 = load ptr, ptr %11, align 8, !tbaa !5
  %1749 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1748, i32 0, i32 1
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1749, ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %1750 = load ptr, ptr %11, align 8, !tbaa !5
  %1751 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1750, i32 0, i32 2
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1751, ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1752 = load ptr, ptr %11, align 8, !tbaa !5
  %1753 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1752, i32 0, i32 3
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1753, ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %1754 = load ptr, ptr %11, align 8, !tbaa !5
  %1755 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1754, i32 0, i32 4
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1755, ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %1756 = load ptr, ptr %11, align 8, !tbaa !5
  %1757 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1756, i32 0, i32 5
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1757, ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  %1758 = load ptr, ptr %11, align 8, !tbaa !5
  %1759 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1758, i32 0, i32 6
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE4swapERS3_(ptr noundef nonnull align 8 dereferenceable(24) %1759, ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  store i1 true, ptr %10, align 1
  store i32 1, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %134) #10
  br label %1761

1760:                                             ; preds = %1744, %1723
  call void @llvm.lifetime.end.p0(i64 1, ptr %134) #10
  br label %1763

1761:                                             ; preds = %1745, %1564
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %37) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, 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 @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %31) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %31) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %30) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %30) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %28) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %28) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(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
  %1762 = load i1, ptr %10, align 1
  ret i1 %1762

1763:                                             ; preds = %1760, %1703, %1660, %1617, %1568, %164
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %37) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, 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 @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %31) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %31) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %30) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %30) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %28) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %28) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(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 %1764

1764:                                             ; preds = %1763
  %1765 = load ptr, ptr %41, align 8
  %1766 = load i32, ptr %42, align 4
  %1767 = insertvalue { ptr, i32 } poison, ptr %1765, 0
  %1768 = insertvalue { ptr, i32 } %1767, i32 %1766, 1
  resume { ptr, i32 } %1768
}

; 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 @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 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 i32 @_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_tERKNS_15warning_contextE(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(16)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #3

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

; 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: 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_IfSaIfEEPSG_(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), ptr noundef) #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_traitsIcESaIcEEEccRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, 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 dso_local noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE6insertERKS5_(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 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: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(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 = !{!33, !6, i64 0}
!33 = !{!"_ZTSN7tinyobj15warning_contextE", !6, i64 0, !14, i64 8}
!34 = !{!33, !14, i64 8}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = !{!38, !12, i64 0}
!38 = !{!"_ZTSN7tinyobj6face_tE", !12, i64 0, !12, i64 4, !39, i64 8}
!39 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!44, !12, i64 0}
!44 = !{!"_ZTSN7tinyobj14vertex_index_tE", !12, i64 0, !12, i64 4, !12, i64 8}
!45 = !{!44, !12, i64 8}
!46 = !{!44, !12, i64 4}
!47 = distinct !{!47, !17}
!48 = !{!49, !12, i64 32}
!49 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !50, i64 0, !12, i64 32}
!50 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !51, i64 0, !14, i64 8, !7, i64 16}
!51 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!52 = !{!53, !53, i64 0}
!53 = !{!"vtable pointer", !8, i64 0}
!54 = distinct !{!54, !17}
!55 = distinct !{!55, !17}
!56 = distinct !{!56, !17}
!57 = !{!58, !12, i64 0}
!58 = !{!"_ZTSN7tinyobj9tag_sizesE", !12, i64 0, !12, i64 4, !12, i64 8}
!59 = !{!58, !12, i64 4}
!60 = !{!58, !12, i64 8}
!61 = distinct !{!61, !17}
!62 = distinct !{!62, !17}
!63 = distinct !{!63, !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::set" = type { %"class.std::_Rb_tree.61" }
%"class.std::_Rb_tree.61" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::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.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.65", %"class.std::vector.70", %"class.std::vector.75", %"class.std::vector.70", %"class.std::vector.41" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = 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.75" = type { %"struct.std::_Vector_base.76" }
%"struct.std::_Vector_base.76" = 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.70" = type { %"struct.std::_Vector_base.71" }
%"struct.std::_Vector_base.71" = 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.65", %"class.std::vector.75" }
%"struct.tinyobj::points_t" = type { %"class.std::vector.65" }
%"struct.tinyobj::skin_weight_t" = type { i32, %"class.std::vector.80" }
%"class.std::vector.80" = type { %"struct.std::_Vector_base.81" }
%"struct.std::_Vector_base.81" = 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::warning_context" = type { ptr, i64 }
%"struct.tinyobj::__line_t" = type { %"class.std::vector.85" }
%"class.std::vector.85" = type { %"struct.std::_Vector_base.86" }
%"struct.std::_Vector_base.86" = 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.85" }
%"struct.tinyobj::face_t" = type { i32, i32, %"class.std::vector.85" }
%"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.75", %"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 [96 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.49 = 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.50 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.67 = 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: 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: 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: 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(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #5 align 2

; 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: 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.26", align 8
  %16 = alloca %"class.std::vector.31", align 8
  %17 = alloca %"class.std::vector.41", align 8
  %18 = alloca %"struct.tinyobj::PrimGroup", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::set", align 8
  %21 = alloca %"class.std::map.3", align 8
  %22 = alloca %"struct.tinyobj::shape_t", align 8
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca ptr, align 8
  %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 float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca %"struct.tinyobj::skin_weight_t", align 8
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"struct.tinyobj::joint_and_weight_t", align 4
  %43 = alloca %"struct.tinyobj::warning_context", align 8
  %44 = alloca %"struct.tinyobj::__line_t", align 8
  %45 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"struct.tinyobj::__points_t", align 8
  %50 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"struct.tinyobj::face_t", align 8
  %55 = alloca %"struct.tinyobj::vertex_index_t", align 4
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %61 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %62 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %63 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::vector.20", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::allocator", align 1
  %69 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"class.std::allocator", align 1
  %75 = alloca %"struct.tinyobj::shape_t", align 8
  %76 = alloca %"class.std::vector.20", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"struct.tinyobj::shape_t", align 8
  %83 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"struct.tinyobj::tag_t", align 8
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %89 = alloca %"class.std::__cxx11::basic_string", align 8
  %90 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %91 = alloca %"class.std::__cxx11::basic_string", align 8
  %92 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = 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 @_ZNSt6vectorIfSaIfEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %18) #10
  call void @_ZN7tinyobj9PrimGroupC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %20) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %22) #10
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %22) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  store i64 0, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %95 = getelementptr inbounds i8, ptr %42, i64 4
  %96 = getelementptr inbounds i8, ptr %37, i64 8
  %97 = getelementptr inbounds i8, ptr %43, i64 8
  %98 = getelementptr inbounds i8, ptr %54, i64 8
  %99 = getelementptr inbounds i8, ptr %55, i64 8
  %100 = getelementptr inbounds i8, ptr %55, i64 4
  %.not393 = icmp eq ptr %4, null
  %101 = getelementptr inbounds i8, ptr %18, i64 48
  %102 = getelementptr inbounds i8, ptr %18, i64 24
  %.not366 = icmp eq ptr %6, null
  %.not372 = icmp eq ptr %3, null
  %103 = getelementptr inbounds i8, ptr %69, i64 16
  %104 = getelementptr inbounds i8, ptr %85, i64 32
  %105 = getelementptr inbounds i8, ptr %85, i64 56
  %106 = getelementptr inbounds i8, ptr %85, i64 80
  %107 = getelementptr inbounds i8, ptr %22, i64 32
  %108 = getelementptr inbounds i8, ptr %22, i64 152
  %109 = getelementptr inbounds i8, ptr %22, i64 200
  %110 = getelementptr inbounds i8, ptr %83, i64 16
  %111 = getelementptr inbounds i8, ptr %80, i64 16
  %112 = getelementptr inbounds i8, ptr %78, i64 16
  br label %.outer.outer

.outer.outer:                                     ; preds = %.thread1283, %9
  %.0180.ph.ph = phi i8 [ %.1181.ph, %.thread1283 ], [ 1, %9 ]
  %.0173.ph.ph = phi i32 [ %.0173.ph.ph2092, %.thread1283 ], [ -1, %9 ]
  %.0167.ph.ph = phi i32 [ %.0167.ph.ph2093, %.thread1283 ], [ -1, %9 ]
  %.0161.ph.ph = phi i32 [ %.0161.ph.ph2094, %.thread1283 ], [ -1, %9 ]
  %.0156.ph.ph = phi i32 [ %.0156.ph, %.thread1283 ], [ 0, %9 ]
  %.0149.ph.ph = phi i32 [ %.0149.ph, %.thread1283 ], [ -1, %9 ]
  br label %.outer.outer2091

.outer.outer2091:                                 ; preds = %.outer.outer, %716
  %.0173.ph.ph2092 = phi i32 [ %.0173.ph.ph, %.outer.outer ], [ %.4177, %716 ]
  %.0167.ph.ph2093 = phi i32 [ %.0167.ph.ph, %.outer.outer ], [ %.4171, %716 ]
  %.0161.ph.ph2094 = phi i32 [ %.0161.ph.ph, %.outer.outer ], [ %.4165, %716 ]
  %.0156.ph.ph2095 = phi i32 [ %.0156.ph.ph, %.outer.outer ], [ %.0156.ph, %716 ]
  %.0149.ph.ph2096 = phi i32 [ %.0149.ph.ph, %.outer.outer ], [ %.0149.ph, %716 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer2091, %.thread1298
  %.0156.ph = phi i32 [ %.3159.ph, %.thread1298 ], [ %.0156.ph.ph2095, %.outer.outer2091 ]
  %.0149.ph = phi i32 [ %.2151.ph, %.thread1298 ], [ %.0149.ph.ph2096, %.outer.outer2091 ]
  br label %113

113:                                              ; preds = %.outer, %146
  %114 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %115 unwind label %132

115:                                              ; preds = %113
  %.not313 = icmp eq i32 %114, -1
  br i1 %.not313, label %719, label %116

116:                                              ; preds = %115
  %117 = 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) %24)
          to label %118 unwind label %132

118:                                              ; preds = %116
  %119 = load i64, ptr %23, align 8, !tbaa !5
  %120 = add i64 %119, 1
  store i64 %120, ptr %23, align 8, !tbaa !5
  %121 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %.not330 = icmp eq i64 %121, 0
  br i1 %.not330, label %134, label %122

122:                                              ; preds = %118
  %123 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %124 = add i64 %123, -1
  %125 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %124)
  %126 = load i8, ptr %125, align 1, !tbaa !9
  %127 = icmp eq i8 %126, 10
  br i1 %127, label %128, label %134

128:                                              ; preds = %122
  %129 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %130 = add i64 %129, -1
  %131 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %130, i64 noundef -1)
          to label %134 unwind label %132

132:                                              ; preds = %142, %128, %116, %113
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %835

134:                                              ; preds = %122, %128, %118
  %135 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %.not331 = icmp eq i64 %135, 0
  br i1 %.not331, label %146, label %136

136:                                              ; preds = %134
  %137 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %138 = add i64 %137, -1
  %139 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %138)
  %140 = load i8, ptr %139, align 1, !tbaa !9
  %141 = icmp eq i8 %140, 13
  br i1 %141, label %142, label %146

142:                                              ; preds = %136
  %143 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  %144 = add i64 %143, -1
  %145 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %144, i64 noundef -1)
          to label %146 unwind label %132

146:                                              ; preds = %136, %142, %134
  %147 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  br i1 %147, label %113, label %148, !llvm.loop !10

148:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  %149 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  store ptr %149, ptr %25, align 8, !tbaa !12
  %150 = call i64 @strspn(ptr noundef %149, ptr noundef nonnull @.str) #11
  %151 = getelementptr inbounds i8, ptr %149, i64 %150
  store ptr %151, ptr %25, align 8, !tbaa !12
  %.not332 = icmp eq ptr %149, null
  br i1 %.not332, label %152, label %153

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

153:                                              ; preds = %148
  %154 = load i8, ptr %151, align 1, !tbaa !9
  switch i8 %154, label %.thread433 [
    i8 0, label %.thread1283
    i8 35, label %.thread1283
    i8 118, label %155
  ]

155:                                              ; preds = %153
  %156 = getelementptr inbounds i8, ptr %151, i64 1
  %157 = load i8, ptr %156, align 1, !tbaa !9
  switch i8 %157, label %.thread433 [
    i8 32, label %158
    i8 9, label %158
    i8 110, label %177
    i8 116, label %188
    i8 119, label %198
  ]

158:                                              ; preds = %155, %155
  %159 = getelementptr inbounds i8, ptr %151, i64 2
  store ptr %159, ptr %25, align 8, !tbaa !12
  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
  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
  %160 = invoke noundef i32 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %29, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef nonnull %25, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %161 unwind label %174

161:                                              ; preds = %158
  %162 = icmp eq i32 %160, 6
  %163 = and i8 %.0180.ph.ph, 1
  %164 = icmp ne i8 %163, 0
  %165 = select i1 %162, i1 %164, i1 false
  %166 = zext i1 %165 to i8
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %167 unwind label %174

167:                                              ; preds = %161
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %168 unwind label %174

168:                                              ; preds = %167
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %169 unwind label %174

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

170:                                              ; preds = %169
  %brmerge = or i1 %162, %8
  br i1 %brmerge, label %171, label %176

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

172:                                              ; preds = %171
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %173 unwind label %174

173:                                              ; preds = %172
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %176 unwind label %174

174:                                              ; preds = %173, %172, %171, %169, %168, %167, %161, %158
  %175 = 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
  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
  br label %718

176:                                              ; preds = %170, %173
  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
  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
  br label %.thread1283

177:                                              ; preds = %155
  %178 = getelementptr inbounds i8, ptr %151, i64 2
  %179 = load i8, ptr %178, align 1, !tbaa !9
  switch i8 %179, label %.thread433 [
    i8 32, label %180
    i8 9, label %180
  ]

180:                                              ; preds = %177, %177
  %181 = getelementptr inbounds i8, ptr %151, i64 3
  store ptr %181, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #10
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef nonnull %34, ptr noundef nonnull %25, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %182 unwind label %186

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

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

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

185:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #10
  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 %.thread1283

186:                                              ; preds = %184, %183, %182, %180
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #10
  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 %718

188:                                              ; preds = %155
  %189 = getelementptr inbounds i8, ptr %151, i64 2
  %190 = load i8, ptr %189, align 1, !tbaa !9
  switch i8 %190, label %.thread433 [
    i8 32, label %191
    i8 9, label %191
  ]

191:                                              ; preds = %188, %188
  %192 = getelementptr inbounds i8, ptr %151, i64 3
  store ptr %192, ptr %25, align 8, !tbaa !12
  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 %25, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %193 unwind label %196

193:                                              ; preds = %191
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %194 unwind label %196

194:                                              ; preds = %193
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %195 unwind label %196

195:                                              ; preds = %194
  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 %.thread1283

196:                                              ; preds = %194, %193, %191
  %197 = landingpad { ptr, i32 }
          cleanup
  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 %718

198:                                              ; preds = %155
  %199 = getelementptr inbounds i8, ptr %151, i64 2
  %200 = load i8, ptr %199, align 1, !tbaa !9
  switch i8 %200, label %.thread433 [
    i8 32, label %201
    i8 9, label %201
  ]

201:                                              ; preds = %198, %198
  %202 = getelementptr inbounds i8, ptr %151, i64 3
  store ptr %202, ptr %25, align 8, !tbaa !12
  %203 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %25)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #10
  call void @_ZN7tinyobj13skin_weight_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  store i32 %203, ptr %37, align 8, !tbaa !14
  %.pre = load ptr, ptr %25, align 8, !tbaa !12
  br label %204

204:                                              ; preds = %240, %201
  %205 = phi ptr [ %243, %240 ], [ %.pre, %201 ]
  %206 = load i8, ptr %205, align 1, !tbaa !9
  switch i8 %206, label %switch.edge [
    i8 13, label %247
    i8 10, label %247
    i8 0, label %247
  ]

switch.edge:                                      ; preds = %204
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef nonnull %38, ptr noundef nonnull %39, ptr noundef nonnull %25, double noundef -1.000000e+00, double noundef 0.000000e+00)
          to label %207 unwind label %224

207:                                              ; preds = %switch.edge
  %208 = load float, ptr %38, align 4, !tbaa !21
  %209 = fcmp uge float %208, 0.000000e+00
  br i1 %209, label %237, label %210

210:                                              ; preds = %207
  br i1 %.not393, label %.thread455, label %211

211:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %40) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %40)
          to label %212 unwind label %226

212:                                              ; preds = %211
  %213 = getelementptr inbounds i8, ptr %40, i64 16
  %214 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %213, ptr noundef nonnull @.str.50)
          to label %215 unwind label %228

215:                                              ; preds = %212
  %216 = load i64, ptr %23, align 8, !tbaa !5
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %214, i64 noundef %216)
          to label %218 unwind label %228

218:                                              ; preds = %215
  %219 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %217, ptr noundef nonnull @.str.51)
          to label %220 unwind label %228

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

221:                                              ; preds = %220
  %222 = 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) %41)
          to label %223 unwind label %232

223:                                              ; preds = %221
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %40) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %40) #10
  br label %.thread455

224:                                              ; preds = %switch.edge
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %246

226:                                              ; preds = %211
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %236

228:                                              ; preds = %218, %215, %212
  %229 = landingpad { ptr, i32 }
          cleanup
  br label %235

230:                                              ; preds = %220
  %231 = landingpad { ptr, i32 }
          cleanup
  br label %234

232:                                              ; preds = %221
  %233 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  br label %234

234:                                              ; preds = %232, %230
  %.pn334 = phi { ptr, i32 } [ %233, %232 ], [ %231, %230 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  br label %235

235:                                              ; preds = %234, %228
  %.pn334.pn = phi { ptr, i32 } [ %.pn334, %234 ], [ %229, %228 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %40) #10
  br label %236

236:                                              ; preds = %235, %226
  %.pn334.pn.pn = phi { ptr, i32 } [ %.pn334.pn, %235 ], [ %227, %226 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %40) #10
  br label %246

237:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #10
  %238 = fptosi float %208 to i32
  store i32 %238, ptr %42, align 4, !tbaa !23
  %239 = load float, ptr %39, align 4, !tbaa !21
  store float %239, ptr %95, align 4, !tbaa !25
  invoke void @_ZNSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 4 dereferenceable(8) %42)
          to label %240 unwind label %244

240:                                              ; preds = %237
  %241 = load ptr, ptr %25, align 8, !tbaa !12
  %242 = call i64 @strspn(ptr noundef %241, ptr noundef nonnull @.str.12) #11
  %243 = getelementptr inbounds i8, ptr %241, i64 %242
  store ptr %243, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #10
  br label %204

244:                                              ; preds = %237
  %245 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  br label %246

246:                                              ; preds = %244, %236, %224
  %.pn334.pn.pn.pn = phi { ptr, i32 } [ %.pn334.pn.pn, %236 ], [ %245, %244 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #10
  br label %250

247:                                              ; preds = %204, %204, %204
  invoke void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %.thread437 unwind label %248

.thread437:                                       ; preds = %247
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #10
  %.pre1277 = load ptr, ptr %25, align 8, !tbaa !12
  br label %.thread433

.thread455:                                       ; preds = %223, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #10
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %.loopexit

248:                                              ; preds = %247
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %250

250:                                              ; preds = %248, %246
  %.pn334.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn334.pn.pn.pn, %246 ], [ %249, %248 ]
  call void @_ZN7tinyobj13skin_weight_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #10
  br label %718

.thread433:                                       ; preds = %155, %177, %188, %153, %.thread437, %198
  %251 = phi ptr [ %151, %153 ], [ %.pre1277, %.thread437 ], [ %151, %198 ], [ %151, %188 ], [ %151, %177 ], [ %151, %155 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %43) #10
  store ptr %3, ptr %43, align 8, !tbaa !26
  %252 = load i64, ptr %23, align 8, !tbaa !5
  store i64 %252, ptr %97, align 8, !tbaa !28
  %253 = load i8, ptr %251, align 1, !tbaa !9
  switch i8 %253, label %.thread444 [
    i8 108, label %254
    i8 112, label %304
    i8 102, label %354
  ]

254:                                              ; preds = %.thread433
  %255 = getelementptr inbounds i8, ptr %251, i64 1
  %256 = load i8, ptr %255, align 1, !tbaa !9
  switch i8 %256, label %.thread444 [
    i8 32, label %257
    i8 9, label %257
  ]

257:                                              ; preds = %254, %254
  %258 = getelementptr inbounds i8, ptr %251, i64 2
  store ptr %258, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %44) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  %.pre1280 = load ptr, ptr %25, align 8, !tbaa !12
  br label %259

259:                                              ; preds = %295, %257
  %260 = phi ptr [ %298, %295 ], [ %.pre1280, %257 ]
  %261 = load i8, ptr %260, align 1, !tbaa !9
  switch i8 %261, label %262 [
    i8 13, label %.critedge
    i8 10, label %.critedge
    i8 0, label %.critedge
  ]

262:                                              ; preds = %259
  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)
  %263 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %264 = udiv i64 %263, 3
  %265 = trunc i64 %264 to i32
  %266 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %267 = udiv i64 %266, 3
  %268 = trunc i64 %267 to i32
  %269 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %270 = lshr i64 %269, 1
  %271 = trunc i64 %270 to i32
  %272 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef nonnull %25, i32 noundef %265, i32 noundef %268, i32 noundef %271, ptr noundef nonnull %45, ptr noundef nonnull align 8 dereferenceable(16) %43)
          to label %273 unwind label %281

273:                                              ; preds = %262
  br i1 %272, label %294, label %274

274:                                              ; preds = %273
  br i1 %.not393, label %.thread439, label %275

275:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #10
  invoke void @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %276 unwind label %283

276:                                              ; preds = %275
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull @.str.52, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %277 unwind label %285

277:                                              ; preds = %276
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull @.str.53)
          to label %278 unwind label %287

278:                                              ; preds = %277
  %279 = 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) %46)
          to label %280 unwind label %289

280:                                              ; preds = %278
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #10
  br label %.thread439

281:                                              ; preds = %294, %262
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %299

283:                                              ; preds = %275
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %293

285:                                              ; preds = %276
  %286 = landingpad { ptr, i32 }
          cleanup
  br label %292

287:                                              ; preds = %277
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %291

289:                                              ; preds = %278
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #10
  br label %291

291:                                              ; preds = %289, %287
  %.pn410 = phi { ptr, i32 } [ %290, %289 ], [ %288, %287 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  br label %292

292:                                              ; preds = %291, %285
  %.pn410.pn = phi { ptr, i32 } [ %.pn410, %291 ], [ %286, %285 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  br label %293

293:                                              ; preds = %292, %283
  %.pn410.pn.pn = phi { ptr, i32 } [ %.pn410.pn, %292 ], [ %284, %283 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #10
  br label %299

294:                                              ; preds = %273
  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 %295 unwind label %281

.thread439:                                       ; preds = %274, %280
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %302

295:                                              ; preds = %294
  %296 = load ptr, ptr %25, align 8, !tbaa !12
  %297 = call i64 @strspn(ptr noundef %296, ptr noundef nonnull @.str.12) #11
  %298 = getelementptr inbounds i8, ptr %296, i64 %297
  store ptr %298, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %259

299:                                              ; preds = %293, %281
  %.pn414 = phi { ptr, i32 } [ %282, %281 ], [ %.pn410.pn.pn, %293 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %45) #10
  br label %303

.critedge:                                        ; preds = %259, %259, %259
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 8 dereferenceable(24) %44)
          to label %302 unwind label %300, !llvm.loop !10

300:                                              ; preds = %.critedge
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %303

302:                                              ; preds = %.thread439, %.critedge
  %.3262 = phi i32 [ 2, %.critedge ], [ 1, %.thread439 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %44) #10
  br label %716

303:                                              ; preds = %300, %299
  %.pn414.pn = phi { ptr, i32 } [ %.pn414, %299 ], [ %301, %300 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %44) #10
  br label %717

304:                                              ; preds = %.thread433
  %305 = getelementptr inbounds i8, ptr %251, i64 1
  %306 = load i8, ptr %305, align 1, !tbaa !9
  switch i8 %306, label %.thread444 [
    i8 32, label %307
    i8 9, label %307
  ]

307:                                              ; preds = %304, %304
  %308 = getelementptr inbounds i8, ptr %251, i64 2
  store ptr %308, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %49) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #10
  %.pre1279 = load ptr, ptr %25, align 8, !tbaa !12
  br label %309

309:                                              ; preds = %345, %307
  %310 = phi ptr [ %348, %345 ], [ %.pre1279, %307 ]
  %311 = load i8, ptr %310, align 1, !tbaa !9
  switch i8 %311, label %312 [
    i8 13, label %.critedge424
    i8 10, label %.critedge424
    i8 0, label %.critedge424
  ]

312:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %50) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %50)
  %313 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %314 = udiv i64 %313, 3
  %315 = trunc i64 %314 to i32
  %316 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %317 = udiv i64 %316, 3
  %318 = trunc i64 %317 to i32
  %319 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %320 = lshr i64 %319, 1
  %321 = trunc i64 %320 to i32
  %322 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef nonnull %25, i32 noundef %315, i32 noundef %318, i32 noundef %321, ptr noundef nonnull %50, ptr noundef nonnull align 8 dereferenceable(16) %43)
          to label %323 unwind label %331

323:                                              ; preds = %312
  br i1 %322, label %344, label %324

324:                                              ; preds = %323
  br i1 %.not393, label %.thread442, label %325

325:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #10
  invoke void @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %326 unwind label %333

326:                                              ; preds = %325
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull @.str.54, ptr noundef nonnull align 8 dereferenceable(32) %53)
          to label %327 unwind label %335

327:                                              ; preds = %326
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef nonnull @.str.53)
          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) %51)
          to label %330 unwind label %339

330:                                              ; preds = %328
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #10
  br label %.thread442

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

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

335:                                              ; preds = %326
  %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) %51) #10
  br label %341

341:                                              ; preds = %339, %337
  %.pn402 = phi { ptr, i32 } [ %340, %339 ], [ %338, %337 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #10
  br label %342

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

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

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

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

345:                                              ; preds = %344
  %346 = load ptr, ptr %25, align 8, !tbaa !12
  %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 %25, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %50) #10
  br label %309

349:                                              ; preds = %343, %331
  %.pn406 = phi { ptr, i32 } [ %332, %331 ], [ %.pn402.pn.pn, %343 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %50) #10
  br label %353

.critedge424:                                     ; preds = %309, %309, %309
  invoke void @_ZNSt6vectorIN7tinyobj10__points_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 8 dereferenceable(24) %49)
          to label %352 unwind label %350, !llvm.loop !10

350:                                              ; preds = %.critedge424
  %351 = landingpad { ptr, i32 }
          cleanup
  br label %353

352:                                              ; preds = %.thread442, %.critedge424
  %.5264 = phi i32 [ 2, %.critedge424 ], [ 1, %.thread442 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #10
  br label %716

353:                                              ; preds = %350, %349
  %.pn406.pn = phi { ptr, i32 } [ %.pn406, %349 ], [ %351, %350 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #10
  br label %717

354:                                              ; preds = %.thread433
  %355 = getelementptr inbounds i8, ptr %251, i64 1
  %356 = load i8, ptr %355, align 1, !tbaa !9
  switch i8 %356, label %.thread444 [
    i8 32, label %357
    i8 9, label %357
  ]

357:                                              ; preds = %354, %354
  %358 = getelementptr inbounds i8, ptr %251, i64 2
  store ptr %358, ptr %25, align 8, !tbaa !12
  %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 %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #10
  call void @_ZN7tinyobj6face_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54)
  store i32 %.0156.ph, ptr %54, align 8, !tbaa !29
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %98, i64 noundef 3)
          to label %.preheader467.preheader unwind label %382

.preheader467.preheader:                          ; preds = %357
  %.pre1278 = load ptr, ptr %25, align 8, !tbaa !12
  br label %.preheader467

.preheader467:                                    ; preds = %.preheader467.preheader, %401
  %361 = phi ptr [ %407, %401 ], [ %.pre1278, %.preheader467.preheader ]
  %.1174 = phi i32 [ %402, %401 ], [ %.0173.ph.ph2092, %.preheader467.preheader ]
  %.1168 = phi i32 [ %403, %401 ], [ %.0167.ph.ph2093, %.preheader467.preheader ]
  %.1162 = phi i32 [ %404, %401 ], [ %.0161.ph.ph2094, %.preheader467.preheader ]
  %362 = load i8, ptr %361, align 1, !tbaa !9
  switch i8 %362, label %363 [
    i8 13, label %.critedge427
    i8 10, label %.critedge427
    i8 0, label %.critedge427
  ]

363:                                              ; preds = %.preheader467
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %55) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %55)
  %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) %13) #10
  %368 = udiv i64 %367, 3
  %369 = trunc i64 %368 to i32
  %370 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %371 = lshr i64 %370, 1
  %372 = trunc i64 %371 to i32
  %373 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tERKNS_15warning_contextE(ptr noundef nonnull %25, i32 noundef %366, i32 noundef %369, i32 noundef %372, ptr noundef nonnull %55, ptr noundef nonnull align 8 dereferenceable(16) %43)
          to label %374 unwind label %384

374:                                              ; preds = %363
  br i1 %373, label %397, label %375

375:                                              ; preds = %374
  br i1 %.not393, label %.thread446, label %376

376:                                              ; preds = %375
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #10
  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 @_ZN7tinyobjL8toStringImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %377 unwind label %386

377:                                              ; preds = %376
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull @.str.55, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %378 unwind label %388

378:                                              ; preds = %377
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull @.str.53)
          to label %379 unwind label %390

379:                                              ; preds = %378
  %380 = 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) %56)
          to label %381 unwind label %392

381:                                              ; preds = %379
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #10
  br label %.thread446

382:                                              ; preds = %.critedge427, %357
  %383 = landingpad { ptr, i32 }
          cleanup
  br label %410

384:                                              ; preds = %397, %363
  %385 = landingpad { ptr, i32 }
          cleanup
  br label %408

386:                                              ; preds = %376
  %387 = landingpad { ptr, i32 }
          cleanup
  br label %396

388:                                              ; preds = %377
  %389 = landingpad { ptr, i32 }
          cleanup
  br label %395

390:                                              ; preds = %378
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %394

392:                                              ; preds = %379
  %393 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  br label %394

394:                                              ; preds = %392, %390
  %.pn394 = phi { ptr, i32 } [ %393, %392 ], [ %391, %390 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br label %395

395:                                              ; preds = %394, %388
  %.pn394.pn = phi { ptr, i32 } [ %.pn394, %394 ], [ %389, %388 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  br label %396

396:                                              ; preds = %395, %386
  %.pn394.pn.pn = phi { ptr, i32 } [ %.pn394.pn, %395 ], [ %387, %386 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #10
  br label %408

397:                                              ; preds = %374
  %398 = load i32, ptr %55, align 4
  %399 = load i32, ptr %99, align 4
  %400 = load i32, ptr %100, align 4
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 4 dereferenceable(12) %55)
          to label %401 unwind label %384

.thread446:                                       ; preds = %375, %381
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %55) #10
  br label %409

401:                                              ; preds = %397
  %402 = call i32 @llvm.smax.i32(i32 %.1174, i32 %400)
  %403 = call i32 @llvm.smax.i32(i32 %.1168, i32 %399)
  %404 = call i32 @llvm.smax.i32(i32 %.1162, i32 %398)
  %405 = load ptr, ptr %25, align 8, !tbaa !12
  %406 = call i64 @strspn(ptr noundef %405, ptr noundef nonnull @.str.12) #11
  %407 = getelementptr inbounds i8, ptr %405, i64 %406
  store ptr %407, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %55) #10
  br label %.preheader467

408:                                              ; preds = %396, %384
  %.pn398 = phi { ptr, i32 } [ %385, %384 ], [ %.pn394.pn.pn, %396 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %55) #10
  br label %410

.critedge427:                                     ; preds = %.preheader467, %.preheader467, %.preheader467
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %409 unwind label %382, !llvm.loop !10

409:                                              ; preds = %.thread446, %.critedge427
  %.7266 = phi i32 [ 2, %.critedge427 ], [ 1, %.thread446 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #10
  br label %716

410:                                              ; preds = %408, %382
  %.pn398.pn = phi { ptr, i32 } [ %.pn398, %408 ], [ %383, %382 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #10
  br label %717

.thread444:                                       ; preds = %.thread433, %254, %304, %354
  %411 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %251, ptr noundef nonnull dereferenceable(1) @.str.56, i64 noundef 6) #11
  %412 = icmp eq i32 %411, 0
  br i1 %412, label %413, label %451

413:                                              ; preds = %.thread444
  %414 = getelementptr inbounds i8, ptr %251, i64 6
  store ptr %414, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull %25)
          to label %415 unwind label %424

415:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #10
  %416 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %417 unwind label %426

417:                                              ; preds = %415
  store ptr %416, ptr %61, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull align 8 dereferenceable(8) %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #10
  %418 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  store ptr %418, ptr %63, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %63) #10
  %419 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #10
  br i1 %419, label %420, label %428

420:                                              ; preds = %417
  %421 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %60) #10
  %422 = getelementptr inbounds i8, ptr %421, i64 32
  %423 = load i32, ptr %422, align 8, !tbaa !35
  br label %442

424:                                              ; preds = %413
  %425 = landingpad { ptr, i32 }
          cleanup
  br label %450

426:                                              ; preds = %415
  %427 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #10
  br label %449

428:                                              ; preds = %417
  br i1 %.not372, label %442, label %429

429:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #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 %65, ptr noundef nonnull @.str.57, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %430 unwind label %434

430:                                              ; preds = %429
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull @.str.58)
          to label %431 unwind label %436

431:                                              ; preds = %430
  %432 = 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 %433 unwind label %438

433:                                              ; preds = %431
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  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 @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #10
  br label %442

434:                                              ; preds = %429
  %435 = landingpad { ptr, i32 }
          cleanup
  br label %441

436:                                              ; preds = %430
  %437 = landingpad { ptr, i32 }
          cleanup
  br label %440

438:                                              ; preds = %431
  %439 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  br label %440

440:                                              ; preds = %438, %436
  %.pn386 = phi { ptr, i32 } [ %439, %438 ], [ %437, %436 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  br label %441

441:                                              ; preds = %440, %434
  %.pn386.pn = phi { ptr, i32 } [ %.pn386, %440 ], [ %435, %434 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #10
  br label %449

442:                                              ; preds = %428, %433, %420
  %.0275 = phi i32 [ %423, %420 ], [ -1, %433 ], [ -1, %428 ]
  %.not389 = icmp eq i32 %.0275, %.0149.ph
  br i1 %.not389, label %448, label %443

443:                                              ; preds = %442
  %444 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef nonnull %22, ptr noundef nonnull align 8 dereferenceable(72) %18, ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %.0149.ph, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef %3)
          to label %445 unwind label %446

445:                                              ; preds = %443
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #10
  br label %448

446:                                              ; preds = %443
  %447 = landingpad { ptr, i32 }
          cleanup
  br label %449

448:                                              ; preds = %445, %442
  %.1150 = phi i32 [ %.0275, %445 ], [ %.0149.ph, %442 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #10
  br label %.thread1298

449:                                              ; preds = %446, %441, %426
  %.pn390 = phi { ptr, i32 } [ %447, %446 ], [ %.pn386.pn, %441 ], [ %427, %426 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  br label %450

450:                                              ; preds = %449, %424
  %.pn390.pn = phi { ptr, i32 } [ %.pn390, %449 ], [ %425, %424 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #10
  br label %717

451:                                              ; preds = %.thread444
  %452 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %251, ptr noundef nonnull dereferenceable(1) @.str.59, i64 noundef 6) #11
  %453 = icmp eq i32 %452, 0
  br i1 %453, label %454, label %540

454:                                              ; preds = %451
  %455 = getelementptr inbounds i8, ptr %251, i64 6
  %456 = load i8, ptr %455, align 1, !tbaa !9
  switch i8 %456, label %540 [
    i8 32, label %457
    i8 9, label %457
  ]

457:                                              ; preds = %454, %454
  br i1 %.not366, label %.thread1298, label %458, !llvm.loop !10

458:                                              ; preds = %457
  %459 = getelementptr inbounds i8, ptr %251, i64 7
  store ptr %459, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %66) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #10
  %460 = load ptr, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %68) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef %460, ptr noundef nonnull align 1 dereferenceable(1) %68)
          to label %461 unwind label %478

461:                                              ; preds = %458
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEccRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %67, i8 noundef signext 32, i8 noundef signext 92, ptr noundef nonnull align 8 dereferenceable(24) %66)
          to label %462 unwind label %480

462:                                              ; preds = %461
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %68) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #10
  %463 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  br i1 %463, label %465, label %.preheader466

.preheader466:                                    ; preds = %462
  %464 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  %.not877 = icmp eq i64 %464, 0
  br i1 %.not877, label %._crit_edge, label %.lr.ph

465:                                              ; preds = %462
  br i1 %.not372, label %538, label %466

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

467:                                              ; preds = %466
  %468 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull @.str.60)
          to label %469 unwind label %485

469:                                              ; preds = %467
  %470 = load i64, ptr %23, align 8, !tbaa !5
  %471 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %468, i64 noundef %470)
          to label %472 unwind label %485

472:                                              ; preds = %469
  %473 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %471, ptr noundef nonnull @.str.51)
          to label %474 unwind label %485

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

475:                                              ; preds = %474
  %476 = 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) %70)
          to label %477 unwind label %489

477:                                              ; preds = %475
  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
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %69) #10
  br label %538

478:                                              ; preds = %458
  %479 = landingpad { ptr, i32 }
          cleanup
  br label %482

480:                                              ; preds = %461
  %481 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #10
  br label %482

482:                                              ; preds = %480, %478
  %.pn367 = phi { ptr, i32 } [ %481, %480 ], [ %479, %478 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %68) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %68) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #10
  br label %539

483:                                              ; preds = %466
  %484 = landingpad { ptr, i32 }
          cleanup
  br label %493

485:                                              ; preds = %472, %469, %467
  %486 = landingpad { ptr, i32 }
          cleanup
  br label %492

487:                                              ; preds = %474
  %488 = landingpad { ptr, i32 }
          cleanup
  br label %491

489:                                              ; preds = %475
  %490 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  br label %491

491:                                              ; preds = %489, %487
  %.pn380 = phi { ptr, i32 } [ %490, %489 ], [ %488, %487 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #10
  br label %492

492:                                              ; preds = %491, %485
  %.pn380.pn = phi { ptr, i32 } [ %.pn380, %491 ], [ %486, %485 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69) #10
  br label %493

493:                                              ; preds = %492, %483
  %.pn380.pn.pn = phi { ptr, i32 } [ %.pn380.pn, %492 ], [ %484, %483 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %69) #10
  br label %539

.lr.ph:                                           ; preds = %.preheader466, %529
  %.0270862 = phi i64 [ %530, %529 ], [ 0, %.preheader466 ]
  %.0271861 = phi i1 [ %.2273, %529 ], [ false, %.preheader466 ]
  %494 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %66, i64 noundef %.0270862) #10
  %495 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %20, ptr noundef nonnull align 8 dereferenceable(32) %494)
          to label %496 unwind label %497

496:                                              ; preds = %.lr.ph
  %.not369 = icmp eq i64 %495, 0
  br i1 %.not369, label %499, label %529

497:                                              ; preds = %.lr.ph
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %539

499:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #10
  %500 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %66, i64 noundef %.0270862) #10
  %501 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %500) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %74) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef %501, ptr noundef nonnull align 1 dereferenceable(1) %74)
          to label %502 unwind label %512

502:                                              ; preds = %499
  %503 = load ptr, ptr %6, align 8, !tbaa !39
  %504 = getelementptr inbounds i8, ptr %503, i64 16
  %505 = load ptr, ptr %504, align 8
  %506 = invoke noundef zeroext i1 %505(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef %2, ptr noundef nonnull %21, ptr noundef nonnull %71, ptr noundef nonnull %72)
          to label %507 unwind label %514

507:                                              ; preds = %502
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #10
  br i1 %.not372, label %519, label %508

508:                                              ; preds = %507
  %509 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  br i1 %509, label %519, label %510

510:                                              ; preds = %508
  %511 = 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) %71)
          to label %519 unwind label %517

512:                                              ; preds = %499
  %513 = landingpad { ptr, i32 }
          cleanup
  br label %516

514:                                              ; preds = %502
  %515 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  br label %516

516:                                              ; preds = %514, %512
  %.pn370 = phi { ptr, i32 } [ %515, %514 ], [ %513, %512 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %74) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #10
  br label %533

517:                                              ; preds = %525, %522, %510
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %533

519:                                              ; preds = %510, %508, %507
  br i1 %.not393, label %524, label %520

520:                                              ; preds = %519
  %521 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  br i1 %521, label %524, label %522

522:                                              ; preds = %520
  %523 = 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) %72)
          to label %524 unwind label %517

524:                                              ; preds = %522, %520, %519
  br i1 %506, label %525, label %528

525:                                              ; preds = %524
  %526 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %66, i64 noundef %.0270862) #10
  %527 = invoke { ptr, i8 } @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE6insertERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %20, ptr noundef nonnull align 8 dereferenceable(32) %526)
          to label %528 unwind label %517

528:                                              ; preds = %524, %525
  %.1272 = phi i1 [ true, %525 ], [ %.0271861, %524 ]
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #10
  br i1 %506, label %._crit_edge, label %529

529:                                              ; preds = %496, %528
  %.2273 = phi i1 [ %.1272, %528 ], [ true, %496 ]
  %530 = add nuw i64 %.0270862, 1
  %531 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  %532 = icmp ult i64 %530, %531
  br i1 %532, label %.lr.ph, label %._crit_edge, !llvm.loop !41

533:                                              ; preds = %517, %516
  %.pn374 = phi { ptr, i32 } [ %518, %517 ], [ %.pn370, %516 ]
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #10
  br label %539

._crit_edge:                                      ; preds = %528, %529, %.preheader466
  %.3274 = phi i1 [ false, %.preheader466 ], [ %.2273, %529 ], [ %.1272, %528 ]
  %or.cond.not = or i1 %.not372, %.3274
  br i1 %or.cond.not, label %538, label %534

534:                                              ; preds = %._crit_edge
  %535 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.61)
          to label %538 unwind label %536

536:                                              ; preds = %534
  %537 = landingpad { ptr, i32 }
          cleanup
  br label %539

538:                                              ; preds = %._crit_edge, %534, %465, %477
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %66) #10
  br label %.thread1298, !llvm.loop !10

539:                                              ; preds = %536, %533, %497, %493, %482
  %.pn380.pn.pn.pn = phi { ptr, i32 } [ %.pn380.pn.pn, %493 ], [ %.pn367, %482 ], [ %537, %536 ], [ %.pn374, %533 ], [ %498, %497 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %66) #10
  br label %717

540:                                              ; preds = %454, %451
  switch i8 %253, label %.thread1298 [
    i8 103, label %541
    i8 111, label %623
    i8 116, label %655
    i8 115, label %693
  ]

541:                                              ; preds = %540
  %542 = getelementptr inbounds i8, ptr %251, i64 1
  %543 = load i8, ptr %542, align 1, !tbaa !9
  switch i8 %543, label %.thread1298 [
    i8 32, label %544
    i8 9, label %544
  ]

544:                                              ; preds = %541, %541
  %545 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef nonnull %22, ptr noundef nonnull align 8 dereferenceable(72) %18, ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %.0149.ph, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef %3)
          to label %546 unwind label %549

546:                                              ; preds = %544
  %547 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  %.not352 = icmp eq i64 %547, 0
  br i1 %.not352, label %551, label %548

548:                                              ; preds = %546
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %22)
          to label %551 unwind label %549

549:                                              ; preds = %548, %544
  %550 = landingpad { ptr, i32 }
          cleanup
  br label %717

551:                                              ; preds = %548, %546
  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
  %552 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %22, 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
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %18)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %76) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  br label %553

553:                                              ; preds = %558, %551
  %554 = load ptr, ptr %25, align 8, !tbaa !12
  %555 = load i8, ptr %554, align 1, !tbaa !9
  switch i8 %555, label %556 [
    i8 13, label %.critedge430
    i8 10, label %.critedge430
    i8 0, label %.critedge430
  ]

556:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull %25)
          to label %557 unwind label %562

557:                                              ; preds = %556
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %76, ptr noundef nonnull align 8 dereferenceable(32) %77)
          to label %558 unwind label %564

558:                                              ; preds = %557
  %559 = load ptr, ptr %25, align 8, !tbaa !12
  %560 = call i64 @strspn(ptr noundef %559, ptr noundef nonnull @.str.12) #11
  %561 = getelementptr inbounds i8, ptr %559, i64 %560
  store ptr %561, ptr %25, align 8, !tbaa !12
  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
  br label %553, !llvm.loop !42

562:                                              ; preds = %556
  %563 = landingpad { ptr, i32 }
          cleanup
  br label %566

564:                                              ; preds = %557
  %565 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  br label %566

566:                                              ; preds = %564, %562
  %.pn362 = phi { ptr, i32 } [ %565, %564 ], [ %563, %562 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #10
  br label %622

.critedge430:                                     ; preds = %553, %553, %553
  %567 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  %568 = icmp ult i64 %567, 2
  br i1 %568, label %569, label %595

569:                                              ; preds = %.critedge430
  br i1 %.not372, label %621, label %570

570:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %78) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %78)
          to label %571 unwind label %584

571:                                              ; preds = %570
  %572 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %112, ptr noundef nonnull @.str.62)
          to label %573 unwind label %586

573:                                              ; preds = %571
  %574 = load i64, ptr %23, align 8, !tbaa !5
  %575 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %572, i64 noundef %574)
          to label %576 unwind label %586

576:                                              ; preds = %573
  %577 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %575, ptr noundef nonnull @.str.45)
          to label %578 unwind label %586

578:                                              ; preds = %576
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(128) %78)
          to label %579 unwind label %588

579:                                              ; preds = %578
  %580 = 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) %79)
          to label %581 unwind label %590

581:                                              ; preds = %579
  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
  %582 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull @.str.49)
          to label %583 unwind label %586

583:                                              ; preds = %581
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %78) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %78) #10
  br label %621

584:                                              ; preds = %570
  %585 = landingpad { ptr, i32 }
          cleanup
  br label %594

586:                                              ; preds = %581, %576, %573, %571
  %587 = landingpad { ptr, i32 }
          cleanup
  br label %593

588:                                              ; preds = %578
  %589 = landingpad { ptr, i32 }
          cleanup
  br label %592

590:                                              ; preds = %579
  %591 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  br label %592

592:                                              ; preds = %590, %588
  %.pn357 = phi { ptr, i32 } [ %591, %590 ], [ %589, %588 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #10
  br label %593

593:                                              ; preds = %592, %586
  %.pn359 = phi { ptr, i32 } [ %587, %586 ], [ %.pn357, %592 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %78) #10
  br label %594

594:                                              ; preds = %593, %584
  %.pn359.pn = phi { ptr, i32 } [ %.pn359, %593 ], [ %585, %584 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %78) #10
  br label %622

595:                                              ; preds = %.critedge430
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %80) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %80)
          to label %596 unwind label %601

596:                                              ; preds = %595
  %597 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef 1) #10
  %598 = 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) %111, ptr noundef nonnull align 8 dereferenceable(32) %597)
          to label %.preheader unwind label %603

.preheader:                                       ; preds = %596
  %599 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  %600 = icmp ugt i64 %599, 2
  br i1 %600, label %.lr.ph875, label %._crit_edge876

._crit_edge876:                                   ; preds = %609, %.preheader
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %81) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(128) %80)
          to label %615 unwind label %617

601:                                              ; preds = %595
  %602 = landingpad { ptr, i32 }
          cleanup
  br label %620

603:                                              ; preds = %596
  %604 = landingpad { ptr, i32 }
          cleanup
  br label %619

.lr.ph875:                                        ; preds = %.preheader, %609
  %.0179874 = phi i64 [ %610, %609 ], [ 2, %.preheader ]
  %605 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %111, ptr noundef nonnull @.str.63)
          to label %606 unwind label %613

606:                                              ; preds = %.lr.ph875
  %607 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %.0179874) #10
  %608 = 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) %605, ptr noundef nonnull align 8 dereferenceable(32) %607)
          to label %609 unwind label %613

609:                                              ; preds = %606
  %610 = add nuw i64 %.0179874, 1
  %611 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  %612 = icmp ult i64 %610, %611
  br i1 %612, label %.lr.ph875, label %._crit_edge876, !llvm.loop !43

613:                                              ; preds = %606, %.lr.ph875
  %614 = landingpad { ptr, i32 }
          cleanup
  br label %619

615:                                              ; preds = %._crit_edge876
  %616 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %80) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %80) #10
  br label %621

617:                                              ; preds = %._crit_edge876
  %618 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #10
  br label %619

619:                                              ; preds = %617, %613, %603
  %.pn353 = phi { ptr, i32 } [ %614, %613 ], [ %618, %617 ], [ %604, %603 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %80) #10
  br label %620

620:                                              ; preds = %619, %601
  %.pn353.pn = phi { ptr, i32 } [ %.pn353, %619 ], [ %602, %601 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %80) #10
  br label %622

621:                                              ; preds = %569, %583, %615
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %76) #10
  br label %.thread1298

622:                                              ; preds = %620, %594, %566
  %.pn362.pn = phi { ptr, i32 } [ %.pn362, %566 ], [ %.pn359.pn, %594 ], [ %.pn353.pn, %620 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %76) #10
  br label %717

623:                                              ; preds = %540
  %624 = getelementptr inbounds i8, ptr %251, i64 1
  %625 = load i8, ptr %624, align 1, !tbaa !9
  switch i8 %625, label %.thread1298 [
    i8 32, label %626
    i8 9, label %626
  ]

626:                                              ; preds = %623, %623
  %627 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef nonnull %22, ptr noundef nonnull align 8 dereferenceable(72) %18, ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %.0149.ph, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef %3)
          to label %628 unwind label %635

628:                                              ; preds = %626
  %629 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  %.not345 = icmp eq i64 %629, 0
  br i1 %.not345, label %630, label %634

630:                                              ; preds = %628
  %631 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %108) #10
  %.not346 = icmp eq i64 %631, 0
  br i1 %.not346, label %632, label %634

632:                                              ; preds = %630
  %633 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %109) #10
  %.not347 = icmp eq i64 %633, 0
  br i1 %.not347, label %637, label %634

634:                                              ; preds = %632, %630, %628
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %22)
          to label %637 unwind label %635

635:                                              ; preds = %634, %626
  %636 = landingpad { ptr, i32 }
          cleanup
  br label %717

637:                                              ; preds = %634, %632
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %18)
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %82) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(224) %82, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %82) #10
  %638 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %22, ptr noundef nonnull align 8 dereferenceable(224) %82) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %82) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %82) #10
  %639 = load ptr, ptr %25, align 8, !tbaa !12
  %640 = getelementptr inbounds i8, ptr %639, i64 2
  store ptr %640, ptr %25, align 8, !tbaa !12
  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 %641 unwind label %647

641:                                              ; preds = %637
  %642 = load ptr, ptr %25, align 8, !tbaa !12
  %643 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef %642)
          to label %644 unwind label %649

644:                                              ; preds = %641
  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 %645 unwind label %651

645:                                              ; preds = %644
  %646 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %84) #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 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 %.thread1298

647:                                              ; preds = %637
  %648 = landingpad { ptr, i32 }
          cleanup
  br label %654

649:                                              ; preds = %641
  %650 = landingpad { ptr, i32 }
          cleanup
  br label %653

651:                                              ; preds = %644
  %652 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %84) #10
  br label %653

653:                                              ; preds = %651, %649
  %.pn348 = phi { ptr, i32 } [ %652, %651 ], [ %650, %649 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %83) #10
  br label %654

654:                                              ; preds = %653, %647
  %.pn348.pn = phi { ptr, i32 } [ %.pn348, %653 ], [ %648, %647 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %83) #10
  br label %717

655:                                              ; preds = %540
  %656 = getelementptr inbounds i8, ptr %251, i64 1
  %657 = load i8, ptr %656, align 1, !tbaa !9
  switch i8 %657, label %.thread1298 [
    i8 32, label %658
    i8 9, label %658
  ]

658:                                              ; preds = %655, %655
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %85) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %85) #10
  %659 = load ptr, ptr %25, align 8, !tbaa !12
  %660 = getelementptr inbounds i8, ptr %659, i64 2
  store ptr %660, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %86, ptr noundef nonnull %25)
          to label %661 unwind label %670

661:                                              ; preds = %658
  %662 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  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
  %663 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef nonnull %25)
          to label %664 unwind label %672

664:                                              ; preds = %661
  %.fca.0.extract = extractvalue { i64, i32 } %663, 0
  %.fca.1.extract = extractvalue { i64, i32 } %663, 1
  %665 = and i64 %.fca.0.extract, 2147483648
  %.not340 = icmp eq i64 %665, 0
  %.sroa.024.0.insert.mask = and i64 %.fca.0.extract, -4294967296
  %spec.select = select i1 %.not340, i64 %.fca.0.extract, i64 %.sroa.024.0.insert.mask
  %.sroa.024.0.extract.trunc26 = trunc i64 %spec.select to i32
  %666 = 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 %666, i64 %.sroa.024.0.insert.insert29, i64 %spec.select
  %667 = icmp slt i64 %.sroa.024.1, 0
  %.sroa.024.4.insert.mask = and i64 %.sroa.024.1, 4294967295
  %.sroa.024.2 = select i1 %667, i64 %.sroa.024.4.insert.mask, i64 %.sroa.024.1
  %668 = 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 %668, 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
  %669 = ashr exact i64 %sext, 32
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %104, i64 noundef %669)
          to label %.preheader465 unwind label %672

.preheader465:                                    ; preds = %664
  %.not878 = icmp eq i64 %sext, 0
  br i1 %.not878, label %._crit_edge867, label %.lr.ph866.preheader

.lr.ph866.preheader:                              ; preds = %.preheader465
  %umax = call i64 @llvm.umax.i64(i64 %669, i64 1)
  br label %.lr.ph866

670:                                              ; preds = %658
  %671 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #10
  br label %692

672:                                              ; preds = %._crit_edge873, %._crit_edge870, %._crit_edge867, %664, %661
  %673 = landingpad { ptr, i32 }
          cleanup
  br label %692

._crit_edge867:                                   ; preds = %.lr.ph866, %.preheader465
  %674 = ashr i64 %.sroa.024.3, 32
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %674)
          to label %.preheader464 unwind label %672

.preheader464:                                    ; preds = %._crit_edge867
  %.not879 = icmp ult i64 %.sroa.024.3, 4294967296
  br i1 %.not879, label %._crit_edge870, label %.lr.ph869.preheader

.lr.ph869.preheader:                              ; preds = %.preheader464
  %umax1274 = call i64 @llvm.umax.i64(i64 %674, i64 1)
  br label %.lr.ph869

.lr.ph866:                                        ; preds = %.lr.ph866.preheader, %.lr.ph866
  %.0155865 = phi i64 [ %677, %.lr.ph866 ], [ 0, %.lr.ph866.preheader ]
  %675 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %25)
  %676 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %104, i64 noundef %.0155865) #10
  store i32 %675, ptr %676, align 4, !tbaa !44
  %677 = add nuw i64 %.0155865, 1
  %exitcond.not = icmp eq i64 %677, %umax
  br i1 %exitcond.not, label %._crit_edge867, label %.lr.ph866, !llvm.loop !45

._crit_edge870:                                   ; preds = %680, %.preheader464
  %678 = zext nneg i32 %.sroa.16.1 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %106, i64 noundef %678)
          to label %.preheader463 unwind label %672

.preheader463:                                    ; preds = %._crit_edge870
  %.not880 = icmp slt i32 %.fca.1.extract, 1
  br i1 %.not880, label %._crit_edge873, label %.lr.ph872

.lr.ph869:                                        ; preds = %.lr.ph869.preheader, %680
  %.0154868 = phi i64 [ %682, %680 ], [ 0, %.lr.ph869.preheader ]
  %679 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %25, double noundef 0.000000e+00)
          to label %680 unwind label %683

680:                                              ; preds = %.lr.ph869
  %681 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %.0154868) #10
  store float %679, ptr %681, align 4, !tbaa !21
  %682 = add nuw i64 %.0154868, 1
  %exitcond1275.not = icmp eq i64 %682, %umax1274
  br i1 %exitcond1275.not, label %._crit_edge870, label %.lr.ph869, !llvm.loop !46

683:                                              ; preds = %.lr.ph869
  %684 = landingpad { ptr, i32 }
          cleanup
  br label %692

._crit_edge873:                                   ; preds = %685, %.preheader463
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(104) %85)
          to label %691 unwind label %672

.lr.ph872:                                        ; preds = %.preheader463, %685
  %.0153871 = phi i64 [ %688, %685 ], [ 0, %.preheader463 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %87, ptr noundef nonnull %25)
          to label %685 unwind label %689

685:                                              ; preds = %.lr.ph872
  %686 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %106, i64 noundef %.0153871) #10
  %687 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %686, ptr noundef nonnull align 8 dereferenceable(32) %87) #10
  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
  %688 = add nuw nsw i64 %.0153871, 1
  %exitcond1276.not = icmp eq i64 %688, %678
  br i1 %exitcond1276.not, label %._crit_edge873, label %.lr.ph872, !llvm.loop !47

689:                                              ; preds = %.lr.ph872
  %690 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #10
  br label %692

691:                                              ; preds = %._crit_edge873
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %85) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %85) #10
  br label %.thread1298

692:                                              ; preds = %672, %683, %689, %670
  %.pn342.pn = phi { ptr, i32 } [ %671, %670 ], [ %684, %683 ], [ %690, %689 ], [ %673, %672 ]
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %85) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %85) #10
  br label %717

693:                                              ; preds = %540
  %694 = getelementptr inbounds i8, ptr %251, i64 1
  %695 = load i8, ptr %694, align 1, !tbaa !9
  switch i8 %695, label %.thread1298 [
    i8 32, label %696
    i8 9, label %696
  ]

696:                                              ; preds = %693, %693
  %697 = getelementptr inbounds i8, ptr %251, i64 2
  store ptr %697, ptr %25, align 8, !tbaa !12
  %698 = call i64 @strspn(ptr noundef nonnull %697, ptr noundef nonnull @.str) #11
  %699 = getelementptr inbounds i8, ptr %697, i64 %698
  store ptr %699, ptr %25, align 8, !tbaa !12
  %700 = load i8, ptr %699, align 1, !tbaa !9
  switch i8 %700, label %701 [
    i8 0, label %.thread1298
    i8 13, label %.thread1298
  ], !llvm.loop !10

701:                                              ; preds = %696
  %702 = getelementptr inbounds i8, ptr %699, i64 1
  %703 = load i8, ptr %702, align 1, !tbaa !9
  %704 = icmp eq i8 %703, 10
  br i1 %704, label %.thread1298, label %705, !llvm.loop !10

705:                                              ; preds = %701
  %706 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %699) #11
  %707 = icmp ugt i64 %706, 2
  %708 = icmp eq i8 %700, 111
  %or.cond = and i1 %708, %707
  %709 = icmp eq i8 %703, 102
  %or.cond431 = and i1 %709, %or.cond
  br i1 %or.cond431, label %710, label %714

710:                                              ; preds = %705
  %711 = getelementptr inbounds i8, ptr %699, i64 2
  %712 = load i8, ptr %711, align 1, !tbaa !9
  %713 = icmp eq i8 %712, 102
  br i1 %713, label %.thread1298, label %714, !llvm.loop !10

714:                                              ; preds = %710, %705
  %715 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %25)
  %. = call i32 @llvm.smax.i32(i32 %715, i32 0)
  br label %.thread1298, !llvm.loop !10

.thread1283:                                      ; preds = %153, %153, %176, %185, %195
  %.1181.ph = phi i8 [ %.0180.ph.ph, %195 ], [ %.0180.ph.ph, %185 ], [ %166, %176 ], [ %.0180.ph.ph, %153 ], [ %.0180.ph.ph, %153 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %.outer.outer, !llvm.loop !10

.thread1298:                                      ; preds = %448, %621, %645, %691, %538, %457, %696, %696, %701, %710, %714, %693, %655, %623, %541, %540
  %.3159.ph = phi i32 [ %.0156.ph, %540 ], [ %.0156.ph, %541 ], [ %.0156.ph, %623 ], [ %.0156.ph, %655 ], [ %.0156.ph, %693 ], [ %., %714 ], [ 0, %710 ], [ %.0156.ph, %701 ], [ %.0156.ph, %696 ], [ %.0156.ph, %696 ], [ %.0156.ph, %457 ], [ %.0156.ph, %538 ], [ %.0156.ph, %691 ], [ %.0156.ph, %645 ], [ %.0156.ph, %621 ], [ %.0156.ph, %448 ]
  %.2151.ph = phi i32 [ %.0149.ph, %540 ], [ %.0149.ph, %541 ], [ %.0149.ph, %623 ], [ %.0149.ph, %655 ], [ %.0149.ph, %693 ], [ %.0149.ph, %714 ], [ %.0149.ph, %710 ], [ %.0149.ph, %701 ], [ %.0149.ph, %696 ], [ %.0149.ph, %696 ], [ %.0149.ph, %457 ], [ %.0149.ph, %538 ], [ %.0149.ph, %691 ], [ %.0149.ph, %645 ], [ %.0149.ph, %621 ], [ %.1150, %448 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %.outer, !llvm.loop !10

716:                                              ; preds = %302, %352, %409
  %.9268 = phi i32 [ %.3262, %302 ], [ %.5264, %352 ], [ %.7266, %409 ]
  %.4177 = phi i32 [ %.0173.ph.ph2092, %302 ], [ %.0173.ph.ph2092, %352 ], [ %.1174, %409 ]
  %.4171 = phi i32 [ %.0167.ph.ph2093, %302 ], [ %.0167.ph.ph2093, %352 ], [ %.1168, %409 ]
  %.4165 = phi i32 [ %.0161.ph.ph2094, %302 ], [ %.0161.ph.ph2094, %352 ], [ %.1162, %409 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  %cond = icmp eq i32 %.9268, 2
  br i1 %cond, label %.outer.outer2091, label %.loopexit, !llvm.loop !10

717:                                              ; preds = %635, %654, %549, %622, %692, %539, %450, %410, %353, %303
  %.pn414.pn.pn = phi { ptr, i32 } [ %.pn414.pn, %303 ], [ %.pn406.pn, %353 ], [ %.pn398.pn, %410 ], [ %.pn390.pn, %450 ], [ %.pn380.pn.pn.pn, %539 ], [ %.pn342.pn, %692 ], [ %.pn362.pn, %622 ], [ %550, %549 ], [ %.pn348.pn, %654 ], [ %636, %635 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %43) #10
  br label %718

718:                                              ; preds = %717, %250, %196, %186, %174
  %.pn418 = phi { ptr, i32 } [ %175, %174 ], [ %187, %186 ], [ %197, %196 ], [ %.pn414.pn.pn, %717 ], [ %.pn334.pn.pn.pn.pn, %250 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %835

719:                                              ; preds = %115
  %720 = trunc nuw i8 %.0180.ph.ph to i1
  %brmerge432 = or i1 %720, %8
  br i1 %brmerge432, label %722, label %721

721:                                              ; preds = %719
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  br label %722

722:                                              ; preds = %719, %721
  %723 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %724 = udiv i64 %723, 3
  %725 = trunc i64 %724 to i32
  %726 = icmp sge i32 %.0161.ph.ph2094, %725
  %727 = icmp ne ptr %3, null
  %or.cond8 = and i1 %727, %726
  br i1 %or.cond8, label %728, label %752

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

729:                                              ; preds = %728
  %730 = getelementptr inbounds i8, ptr %88, i64 16
  %731 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %730, ptr noundef nonnull @.str.64)
          to label %732 unwind label %743

732:                                              ; preds = %729
  %733 = load i64, ptr %23, align 8, !tbaa !5
  %734 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %731, i64 noundef %733)
          to label %735 unwind label %743

735:                                              ; preds = %732
  %736 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %734, ptr noundef nonnull @.str.65)
          to label %737 unwind label %743

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

738:                                              ; preds = %737
  %739 = 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) %89)
          to label %740 unwind label %747

740:                                              ; preds = %738
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %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 nonnull %88) #10
  br label %752

741:                                              ; preds = %728
  %742 = landingpad { ptr, i32 }
          cleanup
  br label %751

743:                                              ; preds = %735, %732, %729
  %744 = landingpad { ptr, i32 }
          cleanup
  br label %750

745:                                              ; preds = %737
  %746 = landingpad { ptr, i32 }
          cleanup
  br label %749

747:                                              ; preds = %738
  %748 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %89) #10
  br label %749

749:                                              ; preds = %747, %745
  %.pn = phi { ptr, i32 } [ %748, %747 ], [ %746, %745 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %89) #10
  br label %750

750:                                              ; preds = %749, %743
  %.pn.pn = phi { ptr, i32 } [ %.pn, %749 ], [ %744, %743 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %88) #10
  br label %751

751:                                              ; preds = %750, %741
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %750 ], [ %742, %741 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %88) #10
  br label %835

752:                                              ; preds = %740, %722
  %753 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %754 = udiv i64 %753, 3
  %755 = trunc i64 %754 to i32
  %756 = icmp sge i32 %.0167.ph.ph2093, %755
  %or.cond10 = and i1 %727, %756
  br i1 %or.cond10, label %757, label %781

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

758:                                              ; preds = %757
  %759 = getelementptr inbounds i8, ptr %90, 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 nonnull @.str.66)
          to label %761 unwind label %772

761:                                              ; preds = %758
  %762 = load i64, ptr %23, align 8, !tbaa !5
  %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 %772

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 nonnull @.str.65)
          to label %766 unwind label %772

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

767:                                              ; preds = %766
  %768 = 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) %91)
          to label %769 unwind label %776

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

770:                                              ; preds = %757
  %771 = landingpad { ptr, i32 }
          cleanup
  br label %780

772:                                              ; preds = %764, %761, %758
  %773 = landingpad { ptr, i32 }
          cleanup
  br label %779

774:                                              ; preds = %766
  %775 = landingpad { ptr, i32 }
          cleanup
  br label %778

776:                                              ; preds = %767
  %777 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #10
  br label %778

778:                                              ; preds = %776, %774
  %.pn317 = phi { ptr, i32 } [ %777, %776 ], [ %775, %774 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #10
  br label %779

779:                                              ; preds = %778, %772
  %.pn317.pn = phi { ptr, i32 } [ %.pn317, %778 ], [ %773, %772 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %90) #10
  br label %780

780:                                              ; preds = %779, %770
  %.pn317.pn.pn = phi { ptr, i32 } [ %.pn317.pn, %779 ], [ %771, %770 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %90) #10
  br label %835

781:                                              ; preds = %769, %752
  %782 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %783 = lshr i64 %782, 1
  %784 = trunc i64 %783 to i32
  %785 = icmp sge i32 %.0173.ph.ph2092, %784
  %or.cond12 = and i1 %727, %785
  br i1 %or.cond12, label %786, label %810

786:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %92) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92)
          to label %787 unwind label %799

787:                                              ; preds = %786
  %788 = getelementptr inbounds i8, ptr %92, i64 16
  %789 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %788, ptr noundef nonnull @.str.67)
          to label %790 unwind label %801

790:                                              ; preds = %787
  %791 = load i64, ptr %23, align 8, !tbaa !5
  %792 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %789, i64 noundef %791)
          to label %793 unwind label %801

793:                                              ; preds = %790
  %794 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %792, ptr noundef nonnull @.str.65)
          to label %795 unwind label %801

795:                                              ; preds = %793
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %93) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(128) %92)
          to label %796 unwind label %803

796:                                              ; preds = %795
  %797 = 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) %93)
          to label %798 unwind label %805

798:                                              ; preds = %796
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %92) #10
  br label %810

799:                                              ; preds = %786
  %800 = landingpad { ptr, i32 }
          cleanup
  br label %809

801:                                              ; preds = %793, %790, %787
  %802 = landingpad { ptr, i32 }
          cleanup
  br label %808

803:                                              ; preds = %795
  %804 = landingpad { ptr, i32 }
          cleanup
  br label %807

805:                                              ; preds = %796
  %806 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  br label %807

807:                                              ; preds = %805, %803
  %.pn321 = phi { ptr, i32 } [ %806, %805 ], [ %804, %803 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %93) #10
  br label %808

808:                                              ; preds = %807, %801
  %.pn321.pn = phi { ptr, i32 } [ %.pn321, %807 ], [ %802, %801 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92) #10
  br label %809

809:                                              ; preds = %808, %799
  %.pn321.pn.pn = phi { ptr, i32 } [ %.pn321.pn, %808 ], [ %800, %799 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %92) #10
  br label %835

810:                                              ; preds = %798, %781
  %811 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEEPSG_(ptr noundef nonnull %22, ptr noundef nonnull align 8 dereferenceable(72) %18, ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %.0149.ph, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef %3)
          to label %812 unwind label %816

812:                                              ; preds = %810
  br i1 %811, label %815, label %813

813:                                              ; preds = %812
  %814 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %107) #10
  %.not325 = icmp eq i64 %814, 0
  br i1 %.not325, label %818, label %815

815:                                              ; preds = %813, %812
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %22)
          to label %818 unwind label %816

816:                                              ; preds = %815, %810
  %817 = landingpad { ptr, i32 }
          cleanup
  br label %835

818:                                              ; preds = %815, %813
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %18)
  br i1 %.not393, label %828, label %819

819:                                              ; preds = %818
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %94) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %94, ptr noundef nonnull align 8 dereferenceable(128) %10)
          to label %820 unwind label %823

820:                                              ; preds = %819
  %821 = 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) %94)
          to label %822 unwind label %825

822:                                              ; preds = %820
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #10
  br label %828

823:                                              ; preds = %819
  %824 = landingpad { ptr, i32 }
          cleanup
  br label %827

825:                                              ; preds = %820
  %826 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #10
  br label %827

827:                                              ; preds = %825, %823
  %.pn327 = phi { ptr, i32 } [ %826, %825 ], [ %824, %823 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #10
  br label %835

828:                                              ; preds = %822, %818
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %829 = getelementptr inbounds i8, ptr %0, i64 24
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %829, ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %830 = getelementptr inbounds i8, ptr %0, i64 48
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %830, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %831 = getelementptr inbounds i8, ptr %0, i64 72
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %831, ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %832 = getelementptr inbounds i8, ptr %0, i64 96
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %832, ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  %833 = getelementptr inbounds i8, ptr %0, i64 120
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %833, ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  %834 = getelementptr inbounds i8, ptr %0, i64 144
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_tESaIS1_EE4swapERS3_(ptr noundef nonnull align 8 dereferenceable(24) %834, ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  br label %.loopexit

.loopexit:                                        ; preds = %716, %.thread455, %828
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %22) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %22) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %18) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_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 @_ZNSt6vectorIfSaIfEED2Ev(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 %.not313

835:                                              ; preds = %816, %827, %809, %780, %751, %718, %132
  %.pn418.pn = phi { ptr, i32 } [ %.pn418, %718 ], [ %133, %132 ], [ %.pn321.pn.pn, %809 ], [ %.pn317.pn.pn, %780 ], [ %.pn.pn.pn, %751 ], [ %.pn327, %827 ], [ %817, %816 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %22) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %22) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #10
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %20) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %18) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %18) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN7tinyobj13skin_weight_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 @_ZNSt6vectorIfSaIfEED2Ev(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 } %.pn418.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 @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 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 i32 @_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_tERKNS_15warning_contextE(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(16)) 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: 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: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(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 #3

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

; 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: 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_IfSaIfEEPSG_(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), ptr noundef) 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_traitsIcESaIcEEEccRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, 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 dso_local noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE6insertERKS5_(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 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: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!15, !16, i64 0}
!15 = !{!"_ZTSN7tinyobj13skin_weight_tE", !16, i64 0, !17, i64 8}
!16 = !{!"int", !7, i64 0}
!17 = !{!"_ZTSSt6vectorIN7tinyobj18joint_and_weight_tESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj18joint_and_weight_tESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!21 = !{!22, !22, i64 0}
!22 = !{!"float", !7, i64 0}
!23 = !{!24, !16, i64 0}
!24 = !{!"_ZTSN7tinyobj18joint_and_weight_tE", !16, i64 0, !22, i64 4}
!25 = !{!24, !22, i64 4}
!26 = !{!27, !13, i64 0}
!27 = !{!"_ZTSN7tinyobj15warning_contextE", !13, i64 0, !6, i64 8}
!28 = !{!27, !6, i64 8}
!29 = !{!30, !16, i64 0}
!30 = !{!"_ZTSN7tinyobj6face_tE", !16, i64 0, !16, i64 4, !31, i64 8}
!31 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!35 = !{!36, !16, i64 32}
!36 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !37, i64 0, !16, i64 32}
!37 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !38, i64 0, !6, i64 8, !7, i64 16}
!38 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !13, i64 0}
!39 = !{!40, !40, i64 0}
!40 = !{!"vtable pointer", !8, i64 0}
!41 = distinct !{!41, !11}
!42 = distinct !{!42, !11}
!43 = distinct !{!43, !11}
!44 = !{!16, !16, i64 0}
!45 = distinct !{!45, !11}
!46 = distinct !{!46, !11}
!47 = distinct !{!47, !11}


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