; LLVM IR from erwincoumans/tiny-differentiable-simulator :: third_party/tinyobjloader (tiny_obj_loader)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

@.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 [120 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [1 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb = external hidden unnamed_addr constant [161 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

121:                                              ; preds = %1406, %1404, %171, %9
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %122)
          to label %124 unwind label %147

124:                                              ; preds = %121
  %125 = icmp ne i32 %123, -1
  br i1 %125, label %126, label %1408

126:                                              ; preds = %124
  %127 = load ptr, ptr %16, align 8, !tbaa !5
  %128 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %127, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %129 unwind label %147

129:                                              ; preds = %126
  %130 = load i64, ptr %36, align 8, !tbaa !13
  %131 = add i64 %130, 1
  store i64 %131, ptr %36, align 8, !tbaa !13
  %132 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  %133 = icmp ugt i64 %132, 0
  br i1 %133, label %134, label %152

134:                                              ; preds = %129
  %135 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  %136 = sub i64 %135, 1
  %137 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %37, i64 noundef %136)
          to label %138 unwind label %147

138:                                              ; preds = %134
  %139 = load i8, ptr %137, align 1, !tbaa !15
  %140 = sext i8 %139 to i32
  %141 = icmp eq i32 %140, 10
  br i1 %141, label %142, label %151

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

146:                                              ; preds = %142
  br label %151

147:                                              ; preds = %163, %155, %142, %134, %126, %121
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %38, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %39, align 4
  br label %1605

151:                                              ; preds = %146, %138
  br label %152

152:                                              ; preds = %151, %129
  %153 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  %154 = icmp ugt i64 %153, 0
  br i1 %154, label %155, label %169

155:                                              ; preds = %152
  %156 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  %157 = sub i64 %156, 1
  %158 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %37, i64 noundef %157)
          to label %159 unwind label %147

159:                                              ; preds = %155
  %160 = load i8, ptr %158, align 1, !tbaa !15
  %161 = sext i8 %160 to i32
  %162 = icmp eq i32 %161, 13
  br i1 %162, label %163, label %168

163:                                              ; preds = %159
  %164 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  %165 = sub i64 %164, 1
  %166 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %37, i64 noundef %165, i64 noundef -1)
          to label %167 unwind label %147

167:                                              ; preds = %163
  br label %168

168:                                              ; preds = %167, %159
  br label %169

169:                                              ; preds = %168, %152
  %170 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  br i1 %170, label %171, label %172

171:                                              ; preds = %169
  br label %121, !llvm.loop !16

172:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %173 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  store ptr %173, ptr %40, align 8, !tbaa !5
  %174 = load ptr, ptr %40, align 8, !tbaa !5
  %175 = call i64 @strspn(ptr noundef %174, ptr noundef @.str) #11
  %176 = load ptr, ptr %40, align 8, !tbaa !5
  %177 = getelementptr inbounds i8, ptr %176, i64 %175
  store ptr %177, ptr %40, align 8, !tbaa !5
  %178 = load ptr, ptr %40, align 8, !tbaa !5
  %179 = icmp ne ptr %178, null
  br i1 %179, label %180, label %181

180:                                              ; preds = %172
  br label %183

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

182:                                              ; No predecessors!
  br label %183

183:                                              ; preds = %182, %180
  %184 = load ptr, ptr %40, align 8, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %184, i64 0
  %186 = load i8, ptr %185, align 1, !tbaa !15
  %187 = sext i8 %186 to i32
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %189, label %190

189:                                              ; preds = %183
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

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

196:                                              ; preds = %190
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

197:                                              ; preds = %190
  %198 = load ptr, ptr %40, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i64 0
  %200 = load i8, ptr %199, align 1, !tbaa !15
  %201 = sext i8 %200 to i32
  %202 = icmp eq i32 %201, 118
  br i1 %202, label %203, label %244

203:                                              ; preds = %197
  %204 = load ptr, ptr %40, align 8, !tbaa !5
  %205 = getelementptr inbounds i8, ptr %204, i64 1
  %206 = load i8, ptr %205, align 1, !tbaa !15
  %207 = sext i8 %206 to i32
  %208 = icmp eq i32 %207, 32
  br i1 %208, label %215, label %209

209:                                              ; preds = %203
  %210 = load ptr, ptr %40, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 1
  %212 = load i8, ptr %211, align 1, !tbaa !15
  %213 = sext i8 %212 to i32
  %214 = icmp eq i32 %213, 9
  br i1 %214, label %215, label %244

215:                                              ; preds = %209, %203
  %216 = load ptr, ptr %40, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 2
  store ptr %217, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  %218 = invoke noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef %42, ptr noundef %43, ptr noundef %44, ptr noundef %45, ptr noundef %46, ptr noundef %47, ptr noundef %40, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %219 unwind label %239

219:                                              ; preds = %215
  %220 = zext i1 %218 to i32
  %221 = load i8, ptr %35, align 1, !tbaa !9, !range !18, !noundef !19
  %222 = trunc i8 %221 to i1
  %223 = zext i1 %222 to i32
  %224 = and i32 %223, %220
  %225 = icmp ne i32 %224, 0
  %226 = zext i1 %225 to i8
  store i8 %226, ptr %35, align 1, !tbaa !9
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %227 unwind label %239

227:                                              ; preds = %219
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %228 unwind label %239

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

229:                                              ; preds = %228
  %230 = load i8, ptr %35, align 1, !tbaa !9, !range !18, !noundef !19
  %231 = trunc i8 %230 to i1
  br i1 %231, label %235, label %232

232:                                              ; preds = %229
  %233 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %234 = trunc i8 %233 to i1
  br i1 %234, label %235, label %243

235:                                              ; preds = %232, %229
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %236 unwind label %239

236:                                              ; preds = %235
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %237 unwind label %239

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

238:                                              ; preds = %237
  br label %243

239:                                              ; preds = %237, %236, %235, %228, %227, %219, %215
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %38, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %1407

243:                                              ; preds = %238, %232
  store i32 2, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %1404

244:                                              ; preds = %209, %197
  %245 = load ptr, ptr %40, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %245, i64 0
  %247 = load i8, ptr %246, align 1, !tbaa !15
  %248 = sext i8 %247 to i32
  %249 = icmp eq i32 %248, 118
  br i1 %249, label %250, label %279

250:                                              ; preds = %244
  %251 = load ptr, ptr %40, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %251, i64 1
  %253 = load i8, ptr %252, align 1, !tbaa !15
  %254 = sext i8 %253 to i32
  %255 = icmp eq i32 %254, 110
  br i1 %255, label %256, label %279

256:                                              ; preds = %250
  %257 = load ptr, ptr %40, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i64 2
  %259 = load i8, ptr %258, align 1, !tbaa !15
  %260 = sext i8 %259 to i32
  %261 = icmp eq i32 %260, 32
  br i1 %261, label %268, label %262

262:                                              ; preds = %256
  %263 = load ptr, ptr %40, align 8, !tbaa !5
  %264 = getelementptr inbounds i8, ptr %263, i64 2
  %265 = load i8, ptr %264, align 1, !tbaa !15
  %266 = sext i8 %265 to i32
  %267 = icmp eq i32 %266, 9
  br i1 %267, label %268, label %279

268:                                              ; preds = %262, %256
  %269 = load ptr, ptr %40, align 8, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %269, i64 3
  store ptr %270, ptr %40, align 8, !tbaa !5
  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
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %48, ptr noundef %49, ptr noundef %50, ptr noundef %40, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %271 unwind label %275

271:                                              ; preds = %268
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %272 unwind label %275

272:                                              ; preds = %271
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %273 unwind label %275

273:                                              ; preds = %272
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %274 unwind label %275

274:                                              ; preds = %273
  store i32 2, ptr %41, align 4
  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
  br label %1404

275:                                              ; preds = %273, %272, %271, %268
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %38, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %39, align 4
  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
  br label %1407

279:                                              ; preds = %262, %250, %244
  %280 = load ptr, ptr %40, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 0
  %282 = load i8, ptr %281, align 1, !tbaa !15
  %283 = sext i8 %282 to i32
  %284 = icmp eq i32 %283, 118
  br i1 %284, label %285, label %313

285:                                              ; preds = %279
  %286 = load ptr, ptr %40, align 8, !tbaa !5
  %287 = getelementptr inbounds i8, ptr %286, i64 1
  %288 = load i8, ptr %287, align 1, !tbaa !15
  %289 = sext i8 %288 to i32
  %290 = icmp eq i32 %289, 116
  br i1 %290, label %291, label %313

291:                                              ; preds = %285
  %292 = load ptr, ptr %40, align 8, !tbaa !5
  %293 = getelementptr inbounds i8, ptr %292, i64 2
  %294 = load i8, ptr %293, align 1, !tbaa !15
  %295 = sext i8 %294 to i32
  %296 = icmp eq i32 %295, 32
  br i1 %296, label %303, label %297

297:                                              ; preds = %291
  %298 = load ptr, ptr %40, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 2
  %300 = load i8, ptr %299, align 1, !tbaa !15
  %301 = sext i8 %300 to i32
  %302 = icmp eq i32 %301, 9
  br i1 %302, label %303, label %313

303:                                              ; preds = %297, %291
  %304 = load ptr, ptr %40, align 8, !tbaa !5
  %305 = getelementptr inbounds i8, ptr %304, i64 3
  store ptr %305, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef %51, ptr noundef %52, ptr noundef %40, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %306 unwind label %309

306:                                              ; preds = %303
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %307 unwind label %309

307:                                              ; preds = %306
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %308 unwind label %309

308:                                              ; preds = %307
  store i32 2, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  br label %1404

309:                                              ; preds = %307, %306, %303
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %38, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  br label %1407

313:                                              ; preds = %297, %285, %279
  %314 = load ptr, ptr %40, align 8, !tbaa !5
  %315 = getelementptr inbounds i8, ptr %314, i64 0
  %316 = load i8, ptr %315, align 1, !tbaa !15
  %317 = sext i8 %316 to i32
  %318 = icmp eq i32 %317, 108
  br i1 %318, label %319, label %430

319:                                              ; preds = %313
  %320 = load ptr, ptr %40, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i64 1
  %322 = load i8, ptr %321, align 1, !tbaa !15
  %323 = sext i8 %322 to i32
  %324 = icmp eq i32 %323, 32
  br i1 %324, label %331, label %325

325:                                              ; preds = %319
  %326 = load ptr, ptr %40, align 8, !tbaa !5
  %327 = getelementptr inbounds i8, ptr %326, i64 1
  %328 = load i8, ptr %327, align 1, !tbaa !15
  %329 = sext i8 %328 to i32
  %330 = icmp eq i32 %329, 9
  br i1 %330, label %331, label %430

331:                                              ; preds = %325, %319
  %332 = load ptr, ptr %40, align 8, !tbaa !5
  %333 = getelementptr inbounds i8, ptr %332, i64 2
  store ptr %333, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %53) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #10
  br label %334

334:                                              ; preds = %419, %331
  %335 = load ptr, ptr %40, align 8, !tbaa !5
  %336 = getelementptr inbounds i8, ptr %335, i64 0
  %337 = load i8, ptr %336, align 1, !tbaa !15
  %338 = sext i8 %337 to i32
  %339 = icmp eq i32 %338, 13
  br i1 %339, label %352, label %340

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

346:                                              ; preds = %340
  %347 = load ptr, ptr %40, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %347, i64 0
  %349 = load i8, ptr %348, align 1, !tbaa !15
  %350 = sext i8 %349 to i32
  %351 = icmp eq i32 %350, 0
  br label %352

352:                                              ; preds = %346, %340, %334
  %353 = phi i1 [ true, %340 ], [ true, %334 ], [ %351, %346 ]
  %354 = xor i1 %353, true
  br i1 %354, label %355, label %421

355:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 12, ptr %54) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %54)
          to label %356 unwind label %385

356:                                              ; preds = %355
  %357 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %358 = udiv i64 %357, 3
  %359 = trunc i64 %358 to i32
  %360 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %361 = udiv i64 %360, 3
  %362 = trunc i64 %361 to i32
  %363 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %364 = udiv i64 %363, 2
  %365 = trunc i64 %364 to i32
  %366 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %40, i32 noundef %359, i32 noundef %362, i32 noundef %365, ptr noundef %54)
          to label %367 unwind label %385

367:                                              ; preds = %356
  br i1 %366, label %409, label %368

368:                                              ; preds = %367
  %369 = load ptr, ptr %15, align 8, !tbaa !5
  %370 = icmp ne ptr %369, null
  br i1 %370, label %371, label %408

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

372:                                              ; preds = %371
  %373 = getelementptr inbounds i8, ptr %55, i64 16
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %373, ptr noundef @.str.46)
          to label %375 unwind label %393

375:                                              ; preds = %372
  %376 = load i64, ptr %36, align 8, !tbaa !13
  %377 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %374, i64 noundef %376)
          to label %378 unwind label %393

378:                                              ; preds = %375
  %379 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %377, ptr noundef @.str.47)
          to label %380 unwind label %393

380:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(128) %55)
          to label %381 unwind label %397

381:                                              ; preds = %380
  %382 = load ptr, ptr %15, align 8, !tbaa !5
  %383 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %382, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %384 unwind label %401

384:                                              ; preds = %381
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %55) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %55) #10
  br label %408

385:                                              ; preds = %409, %356, %355
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %38, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %39, align 4
  br label %420

389:                                              ; preds = %371
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %38, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %39, align 4
  br label %407

393:                                              ; preds = %378, %375, %372
  %394 = landingpad { ptr, i32 }
          cleanup
  %395 = extractvalue { ptr, i32 } %394, 0
  store ptr %395, ptr %38, align 8
  %396 = extractvalue { ptr, i32 } %394, 1
  store i32 %396, ptr %39, align 4
  br label %406

397:                                              ; preds = %380
  %398 = landingpad { ptr, i32 }
          cleanup
  %399 = extractvalue { ptr, i32 } %398, 0
  store ptr %399, ptr %38, align 8
  %400 = extractvalue { ptr, i32 } %398, 1
  store i32 %400, ptr %39, align 4
  br label %405

401:                                              ; preds = %381
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %38, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  br label %405

405:                                              ; preds = %401, %397
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #10
  br label %406

406:                                              ; preds = %405, %393
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %55) #10
  br label %407

407:                                              ; preds = %406, %389
  call void @llvm.lifetime.end.p0(i64 392, ptr %55) #10
  br label %420

408:                                              ; preds = %384, %368
  store i1 false, ptr %10, align 1
  store i32 1, ptr %41, align 4
  br label %417

409:                                              ; preds = %367
  %410 = getelementptr inbounds %"struct.tinyobj::__line_t", ptr %53, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %410, ptr noundef nonnull align 4 dereferenceable(12) %54)
          to label %411 unwind label %385

411:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  %412 = load ptr, ptr %40, align 8, !tbaa !5
  %413 = call i64 @strspn(ptr noundef %412, ptr noundef @.str.12) #11
  store i64 %413, ptr %57, align 8, !tbaa !13
  %414 = load i64, ptr %57, align 8, !tbaa !13
  %415 = load ptr, ptr %40, align 8, !tbaa !5
  %416 = getelementptr inbounds i8, ptr %415, i64 %414
  store ptr %416, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  store i32 0, ptr %41, align 4
  br label %417

417:                                              ; preds = %411, %408
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #10
  %418 = load i32, ptr %41, align 4
  switch i32 %418, label %428 [
    i32 0, label %419
  ]

419:                                              ; preds = %417
  br label %334, !llvm.loop !20

420:                                              ; preds = %407, %385
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #10
  br label %429

421:                                              ; preds = %352
  %422 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %26, i32 0, i32 1
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %422, ptr noundef nonnull align 8 dereferenceable(24) %53)
          to label %423 unwind label %424

423:                                              ; preds = %421
  store i32 2, ptr %41, align 4
  br label %428, !llvm.loop !16

424:                                              ; preds = %421
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %38, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %39, align 4
  br label %429

428:                                              ; preds = %423, %417
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #10
  br label %1404

429:                                              ; preds = %424, %420
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #10
  br label %1407

430:                                              ; preds = %325, %313
  %431 = load ptr, ptr %40, align 8, !tbaa !5
  %432 = getelementptr inbounds i8, ptr %431, i64 0
  %433 = load i8, ptr %432, align 1, !tbaa !15
  %434 = sext i8 %433 to i32
  %435 = icmp eq i32 %434, 112
  br i1 %435, label %436, label %547

436:                                              ; preds = %430
  %437 = load ptr, ptr %40, align 8, !tbaa !5
  %438 = getelementptr inbounds i8, ptr %437, i64 1
  %439 = load i8, ptr %438, align 1, !tbaa !15
  %440 = sext i8 %439 to i32
  %441 = icmp eq i32 %440, 32
  br i1 %441, label %448, label %442

442:                                              ; preds = %436
  %443 = load ptr, ptr %40, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i64 1
  %445 = load i8, ptr %444, align 1, !tbaa !15
  %446 = sext i8 %445 to i32
  %447 = icmp eq i32 %446, 9
  br i1 %447, label %448, label %547

448:                                              ; preds = %442, %436
  %449 = load ptr, ptr %40, align 8, !tbaa !5
  %450 = getelementptr inbounds i8, ptr %449, i64 2
  store ptr %450, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %58) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #10
  br label %451

451:                                              ; preds = %536, %448
  %452 = load ptr, ptr %40, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i64 0
  %454 = load i8, ptr %453, align 1, !tbaa !15
  %455 = sext i8 %454 to i32
  %456 = icmp eq i32 %455, 13
  br i1 %456, label %469, label %457

457:                                              ; preds = %451
  %458 = load ptr, ptr %40, align 8, !tbaa !5
  %459 = getelementptr inbounds i8, ptr %458, i64 0
  %460 = load i8, ptr %459, align 1, !tbaa !15
  %461 = sext i8 %460 to i32
  %462 = icmp eq i32 %461, 10
  br i1 %462, label %469, label %463

463:                                              ; preds = %457
  %464 = load ptr, ptr %40, align 8, !tbaa !5
  %465 = getelementptr inbounds i8, ptr %464, i64 0
  %466 = load i8, ptr %465, align 1, !tbaa !15
  %467 = sext i8 %466 to i32
  %468 = icmp eq i32 %467, 0
  br label %469

469:                                              ; preds = %463, %457, %451
  %470 = phi i1 [ true, %457 ], [ true, %451 ], [ %468, %463 ]
  %471 = xor i1 %470, true
  br i1 %471, label %472, label %538

472:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 12, ptr %59) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %59)
          to label %473 unwind label %502

473:                                              ; preds = %472
  %474 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %475 = udiv i64 %474, 3
  %476 = trunc i64 %475 to i32
  %477 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %478 = udiv i64 %477, 3
  %479 = trunc i64 %478 to i32
  %480 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %481 = udiv i64 %480, 2
  %482 = trunc i64 %481 to i32
  %483 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %40, i32 noundef %476, i32 noundef %479, i32 noundef %482, ptr noundef %59)
          to label %484 unwind label %502

484:                                              ; preds = %473
  br i1 %483, label %526, label %485

485:                                              ; preds = %484
  %486 = load ptr, ptr %15, align 8, !tbaa !5
  %487 = icmp ne ptr %486, null
  br i1 %487, label %488, label %525

488:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 392, ptr %60) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %60)
          to label %489 unwind label %506

489:                                              ; preds = %488
  %490 = getelementptr inbounds i8, ptr %60, i64 16
  %491 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %490, ptr noundef @.str.48)
          to label %492 unwind label %510

492:                                              ; preds = %489
  %493 = load i64, ptr %36, align 8, !tbaa !13
  %494 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %491, i64 noundef %493)
          to label %495 unwind label %510

495:                                              ; preds = %492
  %496 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %494, ptr noundef @.str.47)
          to label %497 unwind label %510

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

498:                                              ; preds = %497
  %499 = load ptr, ptr %15, align 8, !tbaa !5
  %500 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %499, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %501 unwind label %518

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

502:                                              ; preds = %526, %473, %472
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %38, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %39, align 4
  br label %537

506:                                              ; preds = %488
  %507 = landingpad { ptr, i32 }
          cleanup
  %508 = extractvalue { ptr, i32 } %507, 0
  store ptr %508, ptr %38, align 8
  %509 = extractvalue { ptr, i32 } %507, 1
  store i32 %509, ptr %39, align 4
  br label %524

510:                                              ; preds = %495, %492, %489
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %38, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %39, align 4
  br label %523

514:                                              ; preds = %497
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %38, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %39, align 4
  br label %522

518:                                              ; preds = %498
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %38, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #10
  br label %522

522:                                              ; preds = %518, %514
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #10
  br label %523

523:                                              ; preds = %522, %510
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %60) #10
  br label %524

524:                                              ; preds = %523, %506
  call void @llvm.lifetime.end.p0(i64 392, ptr %60) #10
  br label %537

525:                                              ; preds = %501, %485
  store i1 false, ptr %10, align 1
  store i32 1, ptr %41, align 4
  br label %534

526:                                              ; preds = %484
  %527 = getelementptr inbounds %"struct.tinyobj::__points_t", ptr %58, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %527, ptr noundef nonnull align 4 dereferenceable(12) %59)
          to label %528 unwind label %502

528:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %529 = load ptr, ptr %40, align 8, !tbaa !5
  %530 = call i64 @strspn(ptr noundef %529, ptr noundef @.str.12) #11
  store i64 %530, ptr %62, align 8, !tbaa !13
  %531 = load i64, ptr %62, align 8, !tbaa !13
  %532 = load ptr, ptr %40, align 8, !tbaa !5
  %533 = getelementptr inbounds i8, ptr %532, i64 %531
  store ptr %533, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  store i32 0, ptr %41, align 4
  br label %534

534:                                              ; preds = %528, %525
  call void @llvm.lifetime.end.p0(i64 12, ptr %59) #10
  %535 = load i32, ptr %41, align 4
  switch i32 %535, label %545 [
    i32 0, label %536
  ]

536:                                              ; preds = %534
  br label %451, !llvm.loop !21

537:                                              ; preds = %524, %502
  call void @llvm.lifetime.end.p0(i64 12, ptr %59) #10
  br label %546

538:                                              ; preds = %469
  %539 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %26, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj10__points_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %539, ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %540 unwind label %541

540:                                              ; preds = %538
  store i32 2, ptr %41, align 4
  br label %545, !llvm.loop !16

541:                                              ; preds = %538
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %38, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %39, align 4
  br label %546

545:                                              ; preds = %540, %534
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #10
  br label %1404

546:                                              ; preds = %541, %537
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #10
  br label %1407

547:                                              ; preds = %442, %430
  %548 = load ptr, ptr %40, align 8, !tbaa !5
  %549 = getelementptr inbounds i8, ptr %548, i64 0
  %550 = load i8, ptr %549, align 1, !tbaa !15
  %551 = sext i8 %550 to i32
  %552 = icmp eq i32 %551, 102
  br i1 %552, label %553, label %711

553:                                              ; preds = %547
  %554 = load ptr, ptr %40, align 8, !tbaa !5
  %555 = getelementptr inbounds i8, ptr %554, i64 1
  %556 = load i8, ptr %555, align 1, !tbaa !15
  %557 = sext i8 %556 to i32
  %558 = icmp eq i32 %557, 32
  br i1 %558, label %565, label %559

559:                                              ; preds = %553
  %560 = load ptr, ptr %40, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i64 1
  %562 = load i8, ptr %561, align 1, !tbaa !15
  %563 = sext i8 %562 to i32
  %564 = icmp eq i32 %563, 9
  br i1 %564, label %565, label %711

565:                                              ; preds = %559, %553
  %566 = load ptr, ptr %40, align 8, !tbaa !5
  %567 = getelementptr inbounds i8, ptr %566, i64 2
  store ptr %567, ptr %40, align 8, !tbaa !5
  %568 = load ptr, ptr %40, align 8, !tbaa !5
  %569 = call i64 @strspn(ptr noundef %568, ptr noundef @.str) #11
  %570 = load ptr, ptr %40, align 8, !tbaa !5
  %571 = getelementptr inbounds i8, ptr %570, i64 %569
  store ptr %571, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #10
  invoke void @_ZN7tinyobj6face_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %572 unwind label %628

572:                                              ; preds = %565
  %573 = load i32, ptr %30, align 4, !tbaa !11
  %574 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %63, i32 0, i32 0
  store i32 %573, ptr %574, align 8, !tbaa !22
  %575 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %63, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %575, i64 noundef 3)
          to label %576 unwind label %632

576:                                              ; preds = %572
  br label %577

577:                                              ; preds = %703, %576
  %578 = load ptr, ptr %40, align 8, !tbaa !5
  %579 = getelementptr inbounds i8, ptr %578, i64 0
  %580 = load i8, ptr %579, align 1, !tbaa !15
  %581 = sext i8 %580 to i32
  %582 = icmp eq i32 %581, 13
  br i1 %582, label %595, label %583

583:                                              ; preds = %577
  %584 = load ptr, ptr %40, align 8, !tbaa !5
  %585 = getelementptr inbounds i8, ptr %584, i64 0
  %586 = load i8, ptr %585, align 1, !tbaa !15
  %587 = sext i8 %586 to i32
  %588 = icmp eq i32 %587, 10
  br i1 %588, label %595, label %589

589:                                              ; preds = %583
  %590 = load ptr, ptr %40, align 8, !tbaa !5
  %591 = getelementptr inbounds i8, ptr %590, i64 0
  %592 = load i8, ptr %591, align 1, !tbaa !15
  %593 = sext i8 %592 to i32
  %594 = icmp eq i32 %593, 0
  br label %595

595:                                              ; preds = %589, %583, %577
  %596 = phi i1 [ true, %583 ], [ true, %577 ], [ %594, %589 ]
  %597 = xor i1 %596, true
  br i1 %597, label %598, label %705

598:                                              ; preds = %595
  call void @llvm.lifetime.start.p0(i64 12, ptr %64) #10
  invoke void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %64)
          to label %599 unwind label %636

599:                                              ; preds = %598
  %600 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %601 = udiv i64 %600, 3
  %602 = trunc i64 %601 to i32
  %603 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %604 = udiv i64 %603, 3
  %605 = trunc i64 %604 to i32
  %606 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %607 = udiv i64 %606, 2
  %608 = trunc i64 %607 to i32
  %609 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef %40, i32 noundef %602, i32 noundef %605, i32 noundef %608, ptr noundef %64)
          to label %610 unwind label %636

610:                                              ; preds = %599
  br i1 %609, label %660, label %611

611:                                              ; preds = %610
  %612 = load ptr, ptr %15, align 8, !tbaa !5
  %613 = icmp ne ptr %612, null
  br i1 %613, label %614, label %659

614:                                              ; preds = %611
  call void @llvm.lifetime.start.p0(i64 392, ptr %65) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %65)
          to label %615 unwind label %640

615:                                              ; preds = %614
  %616 = getelementptr inbounds i8, ptr %65, i64 16
  %617 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %616, ptr noundef @.str.49)
          to label %618 unwind label %644

618:                                              ; preds = %615
  %619 = load i64, ptr %36, align 8, !tbaa !13
  %620 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %617, i64 noundef %619)
          to label %621 unwind label %644

621:                                              ; preds = %618
  %622 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %620, ptr noundef @.str.47)
          to label %623 unwind label %644

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

624:                                              ; preds = %623
  %625 = load ptr, ptr %15, align 8, !tbaa !5
  %626 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %625, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %627 unwind label %652

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

628:                                              ; preds = %565
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %38, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %39, align 4
  br label %710

632:                                              ; preds = %705, %572
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %38, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %39, align 4
  br label %709

636:                                              ; preds = %692, %599, %598
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %38, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %39, align 4
  br label %704

640:                                              ; preds = %614
  %641 = landingpad { ptr, i32 }
          cleanup
  %642 = extractvalue { ptr, i32 } %641, 0
  store ptr %642, ptr %38, align 8
  %643 = extractvalue { ptr, i32 } %641, 1
  store i32 %643, ptr %39, align 4
  br label %658

644:                                              ; preds = %621, %618, %615
  %645 = landingpad { ptr, i32 }
          cleanup
  %646 = extractvalue { ptr, i32 } %645, 0
  store ptr %646, ptr %38, align 8
  %647 = extractvalue { ptr, i32 } %645, 1
  store i32 %647, ptr %39, align 4
  br label %657

648:                                              ; preds = %623
  %649 = landingpad { ptr, i32 }
          cleanup
  %650 = extractvalue { ptr, i32 } %649, 0
  store ptr %650, ptr %38, align 8
  %651 = extractvalue { ptr, i32 } %649, 1
  store i32 %651, ptr %39, align 4
  br label %656

652:                                              ; preds = %624
  %653 = landingpad { ptr, i32 }
          cleanup
  %654 = extractvalue { ptr, i32 } %653, 0
  store ptr %654, ptr %38, align 8
  %655 = extractvalue { ptr, i32 } %653, 1
  store i32 %655, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  br label %656

656:                                              ; preds = %652, %648
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #10
  br label %657

657:                                              ; preds = %656, %644
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %65) #10
  br label %658

658:                                              ; preds = %657, %640
  call void @llvm.lifetime.end.p0(i64 392, ptr %65) #10
  br label %704

659:                                              ; preds = %627, %611
  store i1 false, ptr %10, align 1
  store i32 1, ptr %41, align 4
  br label %701

660:                                              ; preds = %610
  %661 = load i32, ptr %31, align 4, !tbaa !11
  %662 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 0
  %663 = load i32, ptr %662, align 4, !tbaa !28
  %664 = icmp sgt i32 %661, %663
  br i1 %664, label %665, label %667

665:                                              ; preds = %660
  %666 = load i32, ptr %31, align 4, !tbaa !11
  br label %670

667:                                              ; preds = %660
  %668 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 0
  %669 = load i32, ptr %668, align 4, !tbaa !28
  br label %670

670:                                              ; preds = %667, %665
  %671 = phi i32 [ %666, %665 ], [ %669, %667 ]
  store i32 %671, ptr %31, align 4, !tbaa !11
  %672 = load i32, ptr %32, align 4, !tbaa !11
  %673 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 2
  %674 = load i32, ptr %673, align 4, !tbaa !30
  %675 = icmp sgt i32 %672, %674
  br i1 %675, label %676, label %678

676:                                              ; preds = %670
  %677 = load i32, ptr %32, align 4, !tbaa !11
  br label %681

678:                                              ; preds = %670
  %679 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 2
  %680 = load i32, ptr %679, align 4, !tbaa !30
  br label %681

681:                                              ; preds = %678, %676
  %682 = phi i32 [ %677, %676 ], [ %680, %678 ]
  store i32 %682, ptr %32, align 4, !tbaa !11
  %683 = load i32, ptr %33, align 4, !tbaa !11
  %684 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 1
  %685 = load i32, ptr %684, align 4, !tbaa !31
  %686 = icmp sgt i32 %683, %685
  br i1 %686, label %687, label %689

687:                                              ; preds = %681
  %688 = load i32, ptr %33, align 4, !tbaa !11
  br label %692

689:                                              ; preds = %681
  %690 = getelementptr inbounds %"struct.tinyobj::vertex_index_t", ptr %64, i32 0, i32 1
  %691 = load i32, ptr %690, align 4, !tbaa !31
  br label %692

692:                                              ; preds = %689, %687
  %693 = phi i32 [ %688, %687 ], [ %691, %689 ]
  store i32 %693, ptr %33, align 4, !tbaa !11
  %694 = getelementptr inbounds %"struct.tinyobj::face_t", ptr %63, i32 0, i32 2
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %694, ptr noundef nonnull align 4 dereferenceable(12) %64)
          to label %695 unwind label %636

695:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #10
  %696 = load ptr, ptr %40, align 8, !tbaa !5
  %697 = call i64 @strspn(ptr noundef %696, ptr noundef @.str.12) #11
  store i64 %697, ptr %67, align 8, !tbaa !13
  %698 = load i64, ptr %67, align 8, !tbaa !13
  %699 = load ptr, ptr %40, align 8, !tbaa !5
  %700 = getelementptr inbounds i8, ptr %699, i64 %698
  store ptr %700, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #10
  store i32 0, ptr %41, align 4
  br label %701

701:                                              ; preds = %695, %659
  call void @llvm.lifetime.end.p0(i64 12, ptr %64) #10
  %702 = load i32, ptr %41, align 4
  switch i32 %702, label %708 [
    i32 0, label %703
  ]

703:                                              ; preds = %701
  br label %577, !llvm.loop !32

704:                                              ; preds = %658, %636
  call void @llvm.lifetime.end.p0(i64 12, ptr %64) #10
  br label %709

705:                                              ; preds = %595
  %706 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %26, i32 0, i32 0
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %706, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %707 unwind label %632

707:                                              ; preds = %705
  store i32 2, ptr %41, align 4
  br label %708, !llvm.loop !16

708:                                              ; preds = %707, %701
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  br label %1404

709:                                              ; preds = %704, %632
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  br label %710

710:                                              ; preds = %709, %628
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  br label %1407

711:                                              ; preds = %559, %547
  %712 = load ptr, ptr %40, align 8, !tbaa !5
  %713 = call i32 @strncmp(ptr noundef %712, ptr noundef @.str.50, i64 noundef 6) #11
  %714 = icmp eq i32 0, %713
  br i1 %714, label %715, label %780

715:                                              ; preds = %711
  %716 = load ptr, ptr %40, align 8, !tbaa !5
  %717 = getelementptr inbounds i8, ptr %716, i64 6
  store ptr %717, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef %40)
          to label %718 unwind label %729

718:                                              ; preds = %715
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #10
  store i32 -1, ptr %69, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %719 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %28, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %720 unwind label %733

720:                                              ; preds = %718
  %721 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %71, i32 0, i32 0
  store ptr %719, ptr %721, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #10
  %722 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %28) #10
  %723 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %73, i32 0, i32 0
  store ptr %722, ptr %723, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 8 dereferenceable(8) %73) #10
  %724 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %72) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #10
  br i1 %724, label %725, label %737

725:                                              ; preds = %720
  %726 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #10
  %727 = getelementptr inbounds %"struct.std::pair.81", ptr %726, i32 0, i32 1
  %728 = load i32, ptr %727, align 8, !tbaa !33
  store i32 %728, ptr %69, align 4, !tbaa !11
  br label %761

729:                                              ; preds = %715
  %730 = landingpad { ptr, i32 }
          cleanup
  %731 = extractvalue { ptr, i32 } %730, 0
  store ptr %731, ptr %38, align 8
  %732 = extractvalue { ptr, i32 } %730, 1
  store i32 %732, ptr %39, align 4
  br label %779

733:                                              ; preds = %718
  %734 = landingpad { ptr, i32 }
          cleanup
  %735 = extractvalue { ptr, i32 } %734, 0
  store ptr %735, ptr %38, align 8
  %736 = extractvalue { ptr, i32 } %734, 1
  store i32 %736, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  br label %778

737:                                              ; preds = %720
  %738 = load ptr, ptr %14, align 8, !tbaa !5
  %739 = icmp ne ptr %738, null
  br i1 %739, label %740, label %760

740:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #10
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef @.str.51, ptr noundef nonnull align 8 dereferenceable(32) %68)
          to label %741 unwind label %746

741:                                              ; preds = %740
  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.52)
          to label %742 unwind label %750

742:                                              ; preds = %741
  %743 = load ptr, ptr %14, align 8, !tbaa !5
  %744 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %743, ptr noundef nonnull align 8 dereferenceable(32) %74)
          to label %745 unwind label %754

745:                                              ; preds = %742
  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 @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #10
  br label %760

746:                                              ; preds = %740
  %747 = landingpad { ptr, i32 }
          cleanup
  %748 = extractvalue { ptr, i32 } %747, 0
  store ptr %748, ptr %38, align 8
  %749 = extractvalue { ptr, i32 } %747, 1
  store i32 %749, ptr %39, align 4
  br label %759

750:                                              ; preds = %741
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %38, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %39, align 4
  br label %758

754:                                              ; preds = %742
  %755 = landingpad { ptr, i32 }
          cleanup
  %756 = extractvalue { ptr, i32 } %755, 0
  store ptr %756, ptr %38, align 8
  %757 = extractvalue { ptr, i32 } %755, 1
  store i32 %757, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  br label %758

758:                                              ; preds = %754, %750
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %759

759:                                              ; preds = %758, %746
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #10
  br label %778

760:                                              ; preds = %745, %737
  br label %761

761:                                              ; preds = %760, %725
  %762 = load i32, ptr %69, align 4, !tbaa !11
  %763 = load i32, ptr %29, align 4, !tbaa !11
  %764 = icmp ne i32 %762, %763
  br i1 %764, label %765, label %777

765:                                              ; preds = %761
  %766 = load i32, ptr %29, align 4, !tbaa !11
  %767 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %768 = trunc i8 %767 to i1
  %769 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %34, ptr noundef nonnull align 8 dereferenceable(72) %26, ptr noundef nonnull align 8 dereferenceable(24) %25, i32 noundef %766, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext %768, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %770 unwind label %773

770:                                              ; preds = %765
  %771 = getelementptr inbounds %"struct.tinyobj::PrimGroup", ptr %26, i32 0, i32 0
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %771) #10
  %772 = load i32, ptr %69, align 4, !tbaa !11
  store i32 %772, ptr %29, align 4, !tbaa !11
  br label %777

773:                                              ; preds = %765
  %774 = landingpad { ptr, i32 }
          cleanup
  %775 = extractvalue { ptr, i32 } %774, 0
  store ptr %775, ptr %38, align 8
  %776 = extractvalue { ptr, i32 } %774, 1
  store i32 %776, ptr %39, align 4
  br label %778

777:                                              ; preds = %770, %761
  store i32 2, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  br label %1404

778:                                              ; preds = %773, %759, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #10
  br label %779

779:                                              ; preds = %778, %729
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #10
  br label %1407

780:                                              ; preds = %711
  %781 = load ptr, ptr %40, align 8, !tbaa !5
  %782 = call i32 @strncmp(ptr noundef %781, ptr noundef @.str.53, i64 noundef 6) #11
  %783 = icmp eq i32 0, %782
  br i1 %783, label %784, label %934

784:                                              ; preds = %780
  %785 = load ptr, ptr %40, align 8, !tbaa !5
  %786 = getelementptr inbounds i8, ptr %785, i64 6
  %787 = load i8, ptr %786, align 1, !tbaa !15
  %788 = sext i8 %787 to i32
  %789 = icmp eq i32 %788, 32
  br i1 %789, label %796, label %790

790:                                              ; preds = %784
  %791 = load ptr, ptr %40, align 8, !tbaa !5
  %792 = getelementptr inbounds i8, ptr %791, i64 6
  %793 = load i8, ptr %792, align 1, !tbaa !15
  %794 = sext i8 %793 to i32
  %795 = icmp eq i32 %794, 9
  br i1 %795, label %796, label %934

796:                                              ; preds = %790, %784
  %797 = load ptr, ptr %17, align 8, !tbaa !5
  %798 = icmp ne ptr %797, null
  br i1 %798, label %799, label %933

799:                                              ; preds = %796
  %800 = load ptr, ptr %40, align 8, !tbaa !5
  %801 = getelementptr inbounds i8, ptr %800, i64 7
  store ptr %801, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %76) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #10
  %802 = load ptr, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %78) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef %802, ptr noundef nonnull align 1 dereferenceable(1) %78)
          to label %803 unwind label %823

803:                                              ; preds = %799
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %77, i8 noundef signext 32, ptr noundef nonnull align 8 dereferenceable(24) %76)
          to label %804 unwind label %827

804:                                              ; preds = %803
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  %805 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  br i1 %805, label %806, label %852

806:                                              ; preds = %804
  %807 = load ptr, ptr %14, align 8, !tbaa !5
  %808 = icmp ne ptr %807, null
  br i1 %808, label %809, label %851

809:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 392, ptr %79) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %79)
          to label %810 unwind label %832

810:                                              ; preds = %809
  %811 = getelementptr inbounds i8, ptr %79, i64 16
  %812 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %811, ptr noundef @.str.54)
          to label %813 unwind label %836

813:                                              ; preds = %810
  %814 = load i64, ptr %36, align 8, !tbaa !13
  %815 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %812, i64 noundef %814)
          to label %816 unwind label %836

816:                                              ; preds = %813
  %817 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %815, ptr noundef @.str.47)
          to label %818 unwind label %836

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

819:                                              ; preds = %818
  %820 = load ptr, ptr %14, align 8, !tbaa !5
  %821 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %820, ptr noundef nonnull align 8 dereferenceable(32) %80)
          to label %822 unwind label %844

822:                                              ; preds = %819
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %79) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %79) #10
  br label %851

823:                                              ; preds = %799
  %824 = landingpad { ptr, i32 }
          cleanup
  %825 = extractvalue { ptr, i32 } %824, 0
  store ptr %825, ptr %38, align 8
  %826 = extractvalue { ptr, i32 } %824, 1
  store i32 %826, ptr %39, align 4
  br label %831

827:                                              ; preds = %803
  %828 = landingpad { ptr, i32 }
          cleanup
  %829 = extractvalue { ptr, i32 } %828, 0
  store ptr %829, ptr %38, align 8
  %830 = extractvalue { ptr, i32 } %828, 1
  store i32 %830, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  br label %831

831:                                              ; preds = %827, %823
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %78) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #10
  br label %932

832:                                              ; preds = %809
  %833 = landingpad { ptr, i32 }
          cleanup
  %834 = extractvalue { ptr, i32 } %833, 0
  store ptr %834, ptr %38, align 8
  %835 = extractvalue { ptr, i32 } %833, 1
  store i32 %835, ptr %39, align 4
  br label %850

836:                                              ; preds = %816, %813, %810
  %837 = landingpad { ptr, i32 }
          cleanup
  %838 = extractvalue { ptr, i32 } %837, 0
  store ptr %838, ptr %38, align 8
  %839 = extractvalue { ptr, i32 } %837, 1
  store i32 %839, ptr %39, align 4
  br label %849

840:                                              ; preds = %818
  %841 = landingpad { ptr, i32 }
          cleanup
  %842 = extractvalue { ptr, i32 } %841, 0
  store ptr %842, ptr %38, align 8
  %843 = extractvalue { ptr, i32 } %841, 1
  store i32 %843, ptr %39, align 4
  br label %848

844:                                              ; preds = %819
  %845 = landingpad { ptr, i32 }
          cleanup
  %846 = extractvalue { ptr, i32 } %845, 0
  store ptr %846, ptr %38, align 8
  %847 = extractvalue { ptr, i32 } %845, 1
  store i32 %847, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  br label %848

848:                                              ; preds = %844, %840
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #10
  br label %849

849:                                              ; preds = %848, %836
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %79) #10
  br label %850

850:                                              ; preds = %849, %832
  call void @llvm.lifetime.end.p0(i64 392, ptr %79) #10
  br label %932

851:                                              ; preds = %822, %806
  br label %931

852:                                              ; preds = %804
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #10
  store i8 0, ptr %81, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  store i64 0, ptr %82, align 8, !tbaa !13
  br label %853

853:                                              ; preds = %909, %852
  %854 = load i64, ptr %82, align 8, !tbaa !13
  %855 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  %856 = icmp ult i64 %854, %855
  br i1 %856, label %858, label %857

857:                                              ; preds = %853
  store i32 10, ptr %41, align 4
  br label %913

858:                                              ; preds = %853
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #10
  %859 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %86) #10
  %860 = load i64, ptr %82, align 8, !tbaa !13
  %861 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %860) #10
  %862 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %861) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %87) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef %862, ptr noundef nonnull align 1 dereferenceable(1) %87)
          to label %863 unwind label %879

863:                                              ; preds = %858
  %864 = load ptr, ptr %13, align 8, !tbaa !5
  %865 = load ptr, ptr %859, align 8, !tbaa !37
  %866 = getelementptr inbounds ptr, ptr %865, i64 2
  %867 = load ptr, ptr %866, align 8
  %868 = invoke noundef zeroext i1 %867(ptr noundef nonnull align 8 dereferenceable(8) %859, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef %864, ptr noundef %28, ptr noundef %83, ptr noundef %84)
          to label %869 unwind label %883

869:                                              ; preds = %863
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  %870 = zext i1 %868 to i8
  store i8 %870, ptr %85, align 1, !tbaa !9
  %871 = load ptr, ptr %14, align 8, !tbaa !5
  %872 = icmp ne ptr %871, null
  br i1 %872, label %873, label %892

873:                                              ; preds = %869
  %874 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  br i1 %874, label %892, label %875

875:                                              ; preds = %873
  %876 = load ptr, ptr %14, align 8, !tbaa !5
  %877 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %876, ptr noundef nonnull align 8 dereferenceable(32) %83)
          to label %878 unwind label %888

878:                                              ; preds = %875
  br label %892

879:                                              ; preds = %858
  %880 = landingpad { ptr, i32 }
          cleanup
  %881 = extractvalue { ptr, i32 } %880, 0
  store ptr %881, ptr %38, align 8
  %882 = extractvalue { ptr, i32 } %880, 1
  store i32 %882, ptr %39, align 4
  br label %887

883:                                              ; preds = %863
  %884 = landingpad { ptr, i32 }
          cleanup
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %38, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #10
  br label %887

887:                                              ; preds = %883, %879
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %87) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %86) #10
  br label %912

888:                                              ; preds = %897, %875
  %889 = landingpad { ptr, i32 }
          cleanup
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %38, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %39, align 4
  br label %912

892:                                              ; preds = %878, %873, %869
  %893 = load ptr, ptr %15, align 8, !tbaa !5
  %894 = icmp ne ptr %893, null
  br i1 %894, label %895, label %901

895:                                              ; preds = %892
  %896 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %84) #10
  br i1 %896, label %901, label %897

897:                                              ; preds = %895
  %898 = load ptr, ptr %15, align 8, !tbaa !5
  %899 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %898, ptr noundef nonnull align 8 dereferenceable(32) %84)
          to label %900 unwind label %888

900:                                              ; preds = %897
  br label %901

901:                                              ; preds = %900, %895, %892
  %902 = load i8, ptr %85, align 1, !tbaa !9, !range !18, !noundef !19
  %903 = trunc i8 %902 to i1
  br i1 %903, label %904, label %905

904:                                              ; preds = %901
  store i8 1, ptr %81, align 1, !tbaa !9
  store i32 10, ptr %41, align 4
  br label %906

905:                                              ; preds = %901
  store i32 0, ptr %41, align 4
  br label %906

906:                                              ; preds = %905, %904
  call void @llvm.lifetime.end.p0(i64 1, 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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  %907 = load i32, ptr %41, align 4
  switch i32 %907, label %913 [
    i32 0, label %908
  ]

908:                                              ; preds = %906
  br label %909

909:                                              ; preds = %908
  %910 = load i64, ptr %82, align 8, !tbaa !13
  %911 = add i64 %910, 1
  store i64 %911, ptr %82, align 8, !tbaa !13
  br label %853, !llvm.loop !39

912:                                              ; preds = %888, %887
  call void @llvm.lifetime.end.p0(i64 1, 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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  br label %930

913:                                              ; preds = %906, %857
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  br label %914

914:                                              ; preds = %913
  %915 = load i8, ptr %81, align 1, !tbaa !9, !range !18, !noundef !19
  %916 = trunc i8 %915 to i1
  br i1 %916, label %929, label %917

917:                                              ; preds = %914
  %918 = load ptr, ptr %14, align 8, !tbaa !5
  %919 = icmp ne ptr %918, null
  br i1 %919, label %920, label %928

920:                                              ; preds = %917
  %921 = load ptr, ptr %14, align 8, !tbaa !5
  %922 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %921, ptr noundef @.str.55)
          to label %923 unwind label %924

923:                                              ; preds = %920
  br label %928

924:                                              ; preds = %920
  %925 = landingpad { ptr, i32 }
          cleanup
  %926 = extractvalue { ptr, i32 } %925, 0
  store ptr %926, ptr %38, align 8
  %927 = extractvalue { ptr, i32 } %925, 1
  store i32 %927, ptr %39, align 4
  br label %930

928:                                              ; preds = %923, %917
  br label %929

929:                                              ; preds = %928, %914
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #10
  br label %931

930:                                              ; preds = %924, %912
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #10
  br label %932

931:                                              ; preds = %929, %851
  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 %76) #10
  br label %933

932:                                              ; preds = %930, %850, %831
  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 %76) #10
  br label %1407

933:                                              ; preds = %931, %796
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

934:                                              ; preds = %790, %780
  %935 = load ptr, ptr %40, align 8, !tbaa !5
  %936 = getelementptr inbounds i8, ptr %935, i64 0
  %937 = load i8, ptr %936, align 1, !tbaa !15
  %938 = sext i8 %937 to i32
  %939 = icmp eq i32 %938, 103
  br i1 %939, label %940, label %1098

940:                                              ; preds = %934
  %941 = load ptr, ptr %40, align 8, !tbaa !5
  %942 = getelementptr inbounds i8, ptr %941, i64 1
  %943 = load i8, ptr %942, align 1, !tbaa !15
  %944 = sext i8 %943 to i32
  %945 = icmp eq i32 %944, 32
  br i1 %945, label %952, label %946

946:                                              ; preds = %940
  %947 = load ptr, ptr %40, align 8, !tbaa !5
  %948 = getelementptr inbounds i8, ptr %947, i64 1
  %949 = load i8, ptr %948, align 1, !tbaa !15
  %950 = sext i8 %949 to i32
  %951 = icmp eq i32 %950, 9
  br i1 %951, label %952, label %1098

952:                                              ; preds = %946, %940
  call void @llvm.lifetime.start.p0(i64 1, ptr %88) #10
  %953 = load i32, ptr %29, align 4, !tbaa !11
  %954 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %955 = trunc i8 %954 to i1
  %956 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %34, ptr noundef nonnull align 8 dereferenceable(72) %26, ptr noundef nonnull align 8 dereferenceable(24) %25, i32 noundef %953, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext %955, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %957 unwind label %966

957:                                              ; preds = %952
  %958 = zext i1 %956 to i8
  store i8 %958, ptr %88, align 1, !tbaa !9
  %959 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %34, i32 0, i32 1
  %960 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %959, i32 0, i32 0
  %961 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %960) #10
  %962 = icmp ugt i64 %961, 0
  br i1 %962, label %963, label %970

963:                                              ; preds = %957
  %964 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %964, ptr noundef nonnull align 8 dereferenceable(224) %34)
          to label %965 unwind label %966

965:                                              ; preds = %963
  br label %970

966:                                              ; preds = %970, %963, %952
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %38, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %39, align 4
  br label %1097

970:                                              ; preds = %965, %957
  call void @llvm.lifetime.start.p0(i64 224, ptr %89) #10
  call void @llvm.memset.p0.i64(ptr align 8 %89, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %89) #10
  %971 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %34, ptr noundef nonnull align 8 dereferenceable(224) %89) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %89) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %89) #10
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %26)
          to label %972 unwind label %966

972:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 24, ptr %90) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #10
  br label %973

973:                                              ; preds = %996, %972
  %974 = load ptr, ptr %40, align 8, !tbaa !5
  %975 = getelementptr inbounds i8, ptr %974, i64 0
  %976 = load i8, ptr %975, align 1, !tbaa !15
  %977 = sext i8 %976 to i32
  %978 = icmp eq i32 %977, 13
  br i1 %978, label %991, label %979

979:                                              ; preds = %973
  %980 = load ptr, ptr %40, align 8, !tbaa !5
  %981 = getelementptr inbounds i8, ptr %980, i64 0
  %982 = load i8, ptr %981, align 1, !tbaa !15
  %983 = sext i8 %982 to i32
  %984 = icmp eq i32 %983, 10
  br i1 %984, label %991, label %985

985:                                              ; preds = %979
  %986 = load ptr, ptr %40, align 8, !tbaa !5
  %987 = getelementptr inbounds i8, ptr %986, i64 0
  %988 = load i8, ptr %987, align 1, !tbaa !15
  %989 = sext i8 %988 to i32
  %990 = icmp eq i32 %989, 0
  br label %991

991:                                              ; preds = %985, %979, %973
  %992 = phi i1 [ true, %979 ], [ true, %973 ], [ %990, %985 ]
  %993 = xor i1 %992, true
  br i1 %993, label %994, label %1010

994:                                              ; preds = %991
  call void @llvm.lifetime.start.p0(i64 32, ptr %91) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %91, ptr noundef %40)
          to label %995 unwind label %1001

995:                                              ; preds = %994
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %90, ptr noundef nonnull align 8 dereferenceable(32) %91)
          to label %996 unwind label %1005

996:                                              ; preds = %995
  %997 = load ptr, ptr %40, align 8, !tbaa !5
  %998 = call i64 @strspn(ptr noundef %997, ptr noundef @.str.12) #11
  %999 = load ptr, ptr %40, align 8, !tbaa !5
  %1000 = getelementptr inbounds i8, ptr %999, i64 %998
  store ptr %1000, ptr %40, align 8, !tbaa !5
  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
  br label %973, !llvm.loop !40

1001:                                             ; preds = %994
  %1002 = landingpad { ptr, i32 }
          cleanup
  %1003 = extractvalue { ptr, i32 } %1002, 0
  store ptr %1003, ptr %38, align 8
  %1004 = extractvalue { ptr, i32 } %1002, 1
  store i32 %1004, ptr %39, align 4
  br label %1009

1005:                                             ; preds = %995
  %1006 = landingpad { ptr, i32 }
          cleanup
  %1007 = extractvalue { ptr, i32 } %1006, 0
  store ptr %1007, ptr %38, align 8
  %1008 = extractvalue { ptr, i32 } %1006, 1
  store i32 %1008, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #10
  br label %1009

1009:                                             ; preds = %1005, %1001
  call void @llvm.lifetime.end.p0(i64 32, ptr %91) #10
  br label %1096

1010:                                             ; preds = %991
  %1011 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %90) #10
  %1012 = icmp ult i64 %1011, 2
  br i1 %1012, label %1013, label %1052

1013:                                             ; preds = %1010
  %1014 = load ptr, ptr %14, align 8, !tbaa !5
  %1015 = icmp ne ptr %1014, null
  br i1 %1015, label %1016, label %1051

1016:                                             ; preds = %1013
  call void @llvm.lifetime.start.p0(i64 392, ptr %92) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92)
          to label %1017 unwind label %1032

1017:                                             ; preds = %1016
  %1018 = getelementptr inbounds i8, ptr %92, i64 16
  %1019 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1018, ptr noundef @.str.56)
          to label %1020 unwind label %1036

1020:                                             ; preds = %1017
  %1021 = load i64, ptr %36, align 8, !tbaa !13
  %1022 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1019, i64 noundef %1021)
          to label %1023 unwind label %1036

1023:                                             ; preds = %1020
  %1024 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1022, ptr noundef @.str.57)
          to label %1025 unwind label %1036

1025:                                             ; preds = %1023
  call void @llvm.lifetime.start.p0(i64 32, ptr %93) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %93, ptr noundef nonnull align 8 dereferenceable(128) %92)
          to label %1026 unwind label %1040

1026:                                             ; preds = %1025
  %1027 = load ptr, ptr %14, align 8, !tbaa !5
  %1028 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1027, ptr noundef nonnull align 8 dereferenceable(32) %93)
          to label %1029 unwind label %1044

1029:                                             ; preds = %1026
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  %1030 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.45)
          to label %1031 unwind label %1036

1031:                                             ; preds = %1029
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %92) #10
  br label %1051

1032:                                             ; preds = %1016
  %1033 = landingpad { ptr, i32 }
          cleanup
  %1034 = extractvalue { ptr, i32 } %1033, 0
  store ptr %1034, ptr %38, align 8
  %1035 = extractvalue { ptr, i32 } %1033, 1
  store i32 %1035, ptr %39, align 4
  br label %1050

1036:                                             ; preds = %1029, %1023, %1020, %1017
  %1037 = landingpad { ptr, i32 }
          cleanup
  %1038 = extractvalue { ptr, i32 } %1037, 0
  store ptr %1038, ptr %38, align 8
  %1039 = extractvalue { ptr, i32 } %1037, 1
  store i32 %1039, ptr %39, align 4
  br label %1049

1040:                                             ; preds = %1025
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %38, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %39, align 4
  br label %1048

1044:                                             ; preds = %1026
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %38, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  br label %1048

1048:                                             ; preds = %1044, %1040
  call void @llvm.lifetime.end.p0(i64 32, ptr %93) #10
  br label %1049

1049:                                             ; preds = %1048, %1036
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %92) #10
  br label %1050

1050:                                             ; preds = %1049, %1032
  call void @llvm.lifetime.end.p0(i64 392, ptr %92) #10
  br label %1096

1051:                                             ; preds = %1031, %1013
  br label %1095

1052:                                             ; preds = %1010
  call void @llvm.lifetime.start.p0(i64 392, ptr %94) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %94)
          to label %1053 unwind label %1063

1053:                                             ; preds = %1052
  %1054 = getelementptr inbounds i8, ptr %94, i64 16
  %1055 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef 1) #10
  %1056 = 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) %1054, ptr noundef nonnull align 8 dereferenceable(32) %1055)
          to label %1057 unwind label %1067

1057:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #10
  store i64 2, ptr %95, align 8, !tbaa !13
  br label %1058

1058:                                             ; preds = %1079, %1057
  %1059 = load i64, ptr %95, align 8, !tbaa !13
  %1060 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %90) #10
  %1061 = icmp ult i64 %1059, %1060
  br i1 %1061, label %1071, label %1062

1062:                                             ; preds = %1058
  store i32 15, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #10
  br label %1086

1063:                                             ; preds = %1052
  %1064 = landingpad { ptr, i32 }
          cleanup
  %1065 = extractvalue { ptr, i32 } %1064, 0
  store ptr %1065, ptr %38, align 8
  %1066 = extractvalue { ptr, i32 } %1064, 1
  store i32 %1066, ptr %39, align 4
  br label %1094

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

1071:                                             ; preds = %1058
  %1072 = getelementptr inbounds i8, ptr %94, i64 16
  %1073 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1072, ptr noundef @.str.58)
          to label %1074 unwind label %1082

1074:                                             ; preds = %1071
  %1075 = load i64, ptr %95, align 8, !tbaa !13
  %1076 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef %1075) #10
  %1077 = 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) %1073, ptr noundef nonnull align 8 dereferenceable(32) %1076)
          to label %1078 unwind label %1082

1078:                                             ; preds = %1074
  br label %1079

1079:                                             ; preds = %1078
  %1080 = load i64, ptr %95, align 8, !tbaa !13
  %1081 = add i64 %1080, 1
  store i64 %1081, ptr %95, align 8, !tbaa !13
  br label %1058, !llvm.loop !41

1082:                                             ; preds = %1074, %1071
  %1083 = landingpad { ptr, i32 }
          cleanup
  %1084 = extractvalue { ptr, i32 } %1083, 0
  store ptr %1084, ptr %38, align 8
  %1085 = extractvalue { ptr, i32 } %1083, 1
  store i32 %1085, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #10
  br label %1093

1086:                                             ; preds = %1062
  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) %94)
          to label %1087 unwind label %1089

1087:                                             ; preds = %1086
  %1088 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %96) #10
  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) %94) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %94) #10
  br label %1095

1089:                                             ; preds = %1086
  %1090 = landingpad { ptr, i32 }
          cleanup
  %1091 = extractvalue { ptr, i32 } %1090, 0
  store ptr %1091, ptr %38, align 8
  %1092 = extractvalue { ptr, i32 } %1090, 1
  store i32 %1092, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %96) #10
  br label %1093

1093:                                             ; preds = %1089, %1082, %1067
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %94) #10
  br label %1094

1094:                                             ; preds = %1093, %1063
  call void @llvm.lifetime.end.p0(i64 392, ptr %94) #10
  br label %1096

1095:                                             ; preds = %1087, %1051
  store i32 2, ptr %41, align 4
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #10
  br label %1404

1096:                                             ; preds = %1094, %1050, %1009
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #10
  br label %1097

1097:                                             ; preds = %1096, %966
  call void @llvm.lifetime.end.p0(i64 1, ptr %88) #10
  br label %1407

1098:                                             ; preds = %946, %934
  %1099 = load ptr, ptr %40, align 8, !tbaa !5
  %1100 = getelementptr inbounds i8, ptr %1099, i64 0
  %1101 = load i8, ptr %1100, align 1, !tbaa !15
  %1102 = sext i8 %1101 to i32
  %1103 = icmp eq i32 %1102, 111
  br i1 %1103, label %1104, label %1171

1104:                                             ; preds = %1098
  %1105 = load ptr, ptr %40, align 8, !tbaa !5
  %1106 = getelementptr inbounds i8, ptr %1105, i64 1
  %1107 = load i8, ptr %1106, align 1, !tbaa !15
  %1108 = sext i8 %1107 to i32
  %1109 = icmp eq i32 %1108, 32
  br i1 %1109, label %1116, label %1110

1110:                                             ; preds = %1104
  %1111 = load ptr, ptr %40, align 8, !tbaa !5
  %1112 = getelementptr inbounds i8, ptr %1111, i64 1
  %1113 = load i8, ptr %1112, align 1, !tbaa !15
  %1114 = sext i8 %1113 to i32
  %1115 = icmp eq i32 %1114, 9
  br i1 %1115, label %1116, label %1171

1116:                                             ; preds = %1110, %1104
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #10
  %1117 = load i32, ptr %29, align 4, !tbaa !11
  %1118 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1119 = trunc i8 %1118 to i1
  %1120 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %34, ptr noundef nonnull align 8 dereferenceable(72) %26, ptr noundef nonnull align 8 dereferenceable(24) %25, i32 noundef %1117, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext %1119, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %1121 unwind label %1140

1121:                                             ; preds = %1116
  %1122 = zext i1 %1120 to i8
  store i8 %1122, ptr %97, align 1, !tbaa !9
  %1123 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %34, i32 0, i32 1
  %1124 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1123, i32 0, i32 0
  %1125 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1124) #10
  %1126 = icmp ugt i64 %1125, 0
  br i1 %1126, label %1137, label %1127

1127:                                             ; preds = %1121
  %1128 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %34, i32 0, i32 2
  %1129 = getelementptr inbounds %"struct.tinyobj::lines_t", ptr %1128, i32 0, i32 0
  %1130 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1129) #10
  %1131 = icmp ugt i64 %1130, 0
  br i1 %1131, label %1137, label %1132

1132:                                             ; preds = %1127
  %1133 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %34, i32 0, i32 3
  %1134 = getelementptr inbounds %"struct.tinyobj::points_t", ptr %1133, i32 0, i32 0
  %1135 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1134) #10
  %1136 = icmp ugt i64 %1135, 0
  br i1 %1136, label %1137, label %1144

1137:                                             ; preds = %1132, %1127, %1121
  %1138 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1138, ptr noundef nonnull align 8 dereferenceable(224) %34)
          to label %1139 unwind label %1140

1139:                                             ; preds = %1137
  br label %1144

1140:                                             ; preds = %1144, %1137, %1116
  %1141 = landingpad { ptr, i32 }
          cleanup
  %1142 = extractvalue { ptr, i32 } %1141, 0
  store ptr %1142, ptr %38, align 8
  %1143 = extractvalue { ptr, i32 } %1141, 1
  store i32 %1143, ptr %39, align 4
  br label %1170

1144:                                             ; preds = %1139, %1132
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %26)
          to label %1145 unwind label %1140

1145:                                             ; preds = %1144
  call void @llvm.lifetime.start.p0(i64 224, ptr %98) #10
  call void @llvm.memset.p0.i64(ptr align 8 %98, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  %1146 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %34, ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %98) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %98) #10
  %1147 = load ptr, ptr %40, align 8, !tbaa !5
  %1148 = getelementptr inbounds i8, ptr %1147, i64 2
  store ptr %1148, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 392, ptr %99) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %99)
          to label %1149 unwind label %1156

1149:                                             ; preds = %1145
  %1150 = getelementptr inbounds i8, ptr %99, i64 16
  %1151 = load ptr, ptr %40, align 8, !tbaa !5
  %1152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1150, ptr noundef %1151)
          to label %1153 unwind label %1160

1153:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(128) %99)
          to label %1154 unwind label %1164

1154:                                             ; preds = %1153
  %1155 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(32) %100) #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
  store i32 2, ptr %41, align 4
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %99) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1404

1156:                                             ; preds = %1145
  %1157 = landingpad { ptr, i32 }
          cleanup
  %1158 = extractvalue { ptr, i32 } %1157, 0
  store ptr %1158, ptr %38, align 8
  %1159 = extractvalue { ptr, i32 } %1157, 1
  store i32 %1159, ptr %39, align 4
  br label %1169

1160:                                             ; preds = %1149
  %1161 = landingpad { ptr, i32 }
          cleanup
  %1162 = extractvalue { ptr, i32 } %1161, 0
  store ptr %1162, ptr %38, align 8
  %1163 = extractvalue { ptr, i32 } %1161, 1
  store i32 %1163, ptr %39, align 4
  br label %1168

1164:                                             ; preds = %1153
  %1165 = landingpad { ptr, i32 }
          cleanup
  %1166 = extractvalue { ptr, i32 } %1165, 0
  store ptr %1166, ptr %38, align 8
  %1167 = extractvalue { ptr, i32 } %1165, 1
  store i32 %1167, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #10
  br label %1168

1168:                                             ; preds = %1164, %1160
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %99) #10
  br label %1169

1169:                                             ; preds = %1168, %1156
  call void @llvm.lifetime.end.p0(i64 392, ptr %99) #10
  br label %1170

1170:                                             ; preds = %1169, %1140
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #10
  br label %1407

1171:                                             ; preds = %1110, %1098
  %1172 = load ptr, ptr %40, align 8, !tbaa !5
  %1173 = getelementptr inbounds i8, ptr %1172, i64 0
  %1174 = load i8, ptr %1173, align 1, !tbaa !15
  %1175 = sext i8 %1174 to i32
  %1176 = icmp eq i32 %1175, 116
  br i1 %1176, label %1177, label %1322

1177:                                             ; preds = %1171
  %1178 = load ptr, ptr %40, align 8, !tbaa !5
  %1179 = getelementptr inbounds i8, ptr %1178, i64 1
  %1180 = load i8, ptr %1179, align 1, !tbaa !15
  %1181 = sext i8 %1180 to i32
  %1182 = icmp eq i32 %1181, 32
  br i1 %1182, label %1189, label %1183

1183:                                             ; preds = %1177
  %1184 = load ptr, ptr %40, align 8, !tbaa !5
  %1185 = getelementptr inbounds i8, ptr %1184, i64 1
  %1186 = load i8, ptr %1185, align 1, !tbaa !15
  %1187 = sext i8 %1186 to i32
  %1188 = icmp eq i32 %1187, 9
  br i1 %1188, label %1189, label %1322

1189:                                             ; preds = %1183, %1177
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #10
  store i32 8192, ptr %101, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 104, ptr %102) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %102) #10
  %1190 = load ptr, ptr %40, align 8, !tbaa !5
  %1191 = getelementptr inbounds i8, ptr %1190, i64 2
  store ptr %1191, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef %40)
          to label %1192 unwind label %1202

1192:                                             ; preds = %1189
  %1193 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 0
  %1194 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1193, ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %104) #10
  %1195 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef %40)
          to label %1196 unwind label %1206

1196:                                             ; preds = %1192
  store { i64, i32 } %1195, ptr %105, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %104, ptr align 8 %105, i64 12, i1 false)
  %1197 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  %1198 = load i32, ptr %1197, align 4, !tbaa !42
  %1199 = icmp slt i32 %1198, 0
  br i1 %1199, label %1200, label %1210

1200:                                             ; preds = %1196
  %1201 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  store i32 0, ptr %1201, align 4, !tbaa !42
  br label %1210

1202:                                             ; preds = %1189
  %1203 = landingpad { ptr, i32 }
          cleanup
  %1204 = extractvalue { ptr, i32 } %1203, 0
  store ptr %1204, ptr %38, align 8
  %1205 = extractvalue { ptr, i32 } %1203, 1
  store i32 %1205, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #10
  br label %1321

1206:                                             ; preds = %1318, %1292, %1266, %1240, %1192
  %1207 = landingpad { ptr, i32 }
          cleanup
  %1208 = extractvalue { ptr, i32 } %1207, 0
  store ptr %1208, ptr %38, align 8
  %1209 = extractvalue { ptr, i32 } %1207, 1
  store i32 %1209, ptr %39, align 4
  br label %1320

1210:                                             ; preds = %1200, %1196
  %1211 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  %1212 = load i32, ptr %1211, align 4, !tbaa !42
  %1213 = icmp sgt i32 %1212, 8192
  br i1 %1213, label %1214, label %1216

1214:                                             ; preds = %1210
  %1215 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  store i32 8192, ptr %1215, align 4, !tbaa !42
  br label %1216

1216:                                             ; preds = %1214, %1210
  %1217 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  %1218 = load i32, ptr %1217, align 4, !tbaa !44
  %1219 = icmp slt i32 %1218, 0
  br i1 %1219, label %1220, label %1222

1220:                                             ; preds = %1216
  %1221 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  store i32 0, ptr %1221, align 4, !tbaa !44
  br label %1222

1222:                                             ; preds = %1220, %1216
  %1223 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  %1224 = load i32, ptr %1223, align 4, !tbaa !44
  %1225 = icmp sgt i32 %1224, 8192
  br i1 %1225, label %1226, label %1228

1226:                                             ; preds = %1222
  %1227 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  store i32 8192, ptr %1227, align 4, !tbaa !44
  br label %1228

1228:                                             ; preds = %1226, %1222
  %1229 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  %1230 = load i32, ptr %1229, align 4, !tbaa !45
  %1231 = icmp slt i32 %1230, 0
  br i1 %1231, label %1232, label %1234

1232:                                             ; preds = %1228
  %1233 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  store i32 0, ptr %1233, align 4, !tbaa !45
  br label %1234

1234:                                             ; preds = %1232, %1228
  %1235 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  %1236 = load i32, ptr %1235, align 4, !tbaa !45
  %1237 = icmp sgt i32 %1236, 8192
  br i1 %1237, label %1238, label %1240

1238:                                             ; preds = %1234
  %1239 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  store i32 8192, ptr %1239, align 4, !tbaa !45
  br label %1240

1240:                                             ; preds = %1238, %1234
  %1241 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 1
  %1242 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  %1243 = load i32, ptr %1242, align 4, !tbaa !42
  %1244 = sext i32 %1243 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1241, i64 noundef %1244)
          to label %1245 unwind label %1206

1245:                                             ; preds = %1240
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #10
  store i64 0, ptr %106, align 8, !tbaa !13
  br label %1246

1246:                                             ; preds = %1259, %1245
  %1247 = load i64, ptr %106, align 8, !tbaa !13
  %1248 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 0
  %1249 = load i32, ptr %1248, align 4, !tbaa !42
  %1250 = sext i32 %1249 to i64
  %1251 = icmp ult i64 %1247, %1250
  br i1 %1251, label %1253, label %1252

1252:                                             ; preds = %1246
  store i32 18, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  br label %1266

1253:                                             ; preds = %1246
  %1254 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %40)
          to label %1255 unwind label %1262

1255:                                             ; preds = %1253
  %1256 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 1
  %1257 = load i64, ptr %106, align 8, !tbaa !13
  %1258 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1256, i64 noundef %1257) #10
  store i32 %1254, ptr %1258, align 4, !tbaa !11
  br label %1259

1259:                                             ; preds = %1255
  %1260 = load i64, ptr %106, align 8, !tbaa !13
  %1261 = add i64 %1260, 1
  store i64 %1261, ptr %106, align 8, !tbaa !13
  br label %1246, !llvm.loop !46

1262:                                             ; preds = %1253
  %1263 = landingpad { ptr, i32 }
          cleanup
  %1264 = extractvalue { ptr, i32 } %1263, 0
  store ptr %1264, ptr %38, align 8
  %1265 = extractvalue { ptr, i32 } %1263, 1
  store i32 %1265, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  br label %1320

1266:                                             ; preds = %1252
  %1267 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 2
  %1268 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  %1269 = load i32, ptr %1268, align 4, !tbaa !44
  %1270 = sext i32 %1269 to i64
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1267, i64 noundef %1270)
          to label %1271 unwind label %1206

1271:                                             ; preds = %1266
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #10
  store i64 0, ptr %107, align 8, !tbaa !13
  br label %1272

1272:                                             ; preds = %1285, %1271
  %1273 = load i64, ptr %107, align 8, !tbaa !13
  %1274 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 1
  %1275 = load i32, ptr %1274, align 4, !tbaa !44
  %1276 = sext i32 %1275 to i64
  %1277 = icmp ult i64 %1273, %1276
  br i1 %1277, label %1279, label %1278

1278:                                             ; preds = %1272
  store i32 21, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #10
  br label %1292

1279:                                             ; preds = %1272
  %1280 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %40, double noundef 0.000000e+00)
          to label %1281 unwind label %1288

1281:                                             ; preds = %1279
  %1282 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 2
  %1283 = load i64, ptr %107, align 8, !tbaa !13
  %1284 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1282, i64 noundef %1283) #10
  store float %1280, ptr %1284, align 4, !tbaa !47
  br label %1285

1285:                                             ; preds = %1281
  %1286 = load i64, ptr %107, align 8, !tbaa !13
  %1287 = add i64 %1286, 1
  store i64 %1287, ptr %107, align 8, !tbaa !13
  br label %1272, !llvm.loop !49

1288:                                             ; preds = %1279
  %1289 = landingpad { ptr, i32 }
          cleanup
  %1290 = extractvalue { ptr, i32 } %1289, 0
  store ptr %1290, ptr %38, align 8
  %1291 = extractvalue { ptr, i32 } %1289, 1
  store i32 %1291, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #10
  br label %1320

1292:                                             ; preds = %1278
  %1293 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 3
  %1294 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  %1295 = load i32, ptr %1294, align 4, !tbaa !45
  %1296 = sext i32 %1295 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %1293, i64 noundef %1296)
          to label %1297 unwind label %1206

1297:                                             ; preds = %1292
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #10
  store i64 0, ptr %108, align 8, !tbaa !13
  br label %1298

1298:                                             ; preds = %1311, %1297
  %1299 = load i64, ptr %108, align 8, !tbaa !13
  %1300 = getelementptr inbounds %"struct.tinyobj::tag_sizes", ptr %104, i32 0, i32 2
  %1301 = load i32, ptr %1300, align 4, !tbaa !45
  %1302 = sext i32 %1301 to i64
  %1303 = icmp ult i64 %1299, %1302
  br i1 %1303, label %1305, label %1304

1304:                                             ; preds = %1298
  store i32 24, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #10
  br label %1318

1305:                                             ; preds = %1298
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef %40)
          to label %1306 unwind label %1314

1306:                                             ; preds = %1305
  %1307 = getelementptr inbounds %"struct.tinyobj::tag_t", ptr %102, i32 0, i32 3
  %1308 = load i64, ptr %108, align 8, !tbaa !13
  %1309 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1307, i64 noundef %1308) #10
  %1310 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1309, ptr noundef nonnull align 8 dereferenceable(32) %109) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #10
  br label %1311

1311:                                             ; preds = %1306
  %1312 = load i64, ptr %108, align 8, !tbaa !13
  %1313 = add i64 %1312, 1
  store i64 %1313, ptr %108, align 8, !tbaa !13
  br label %1298, !llvm.loop !50

1314:                                             ; preds = %1305
  %1315 = landingpad { ptr, i32 }
          cleanup
  %1316 = extractvalue { ptr, i32 } %1315, 0
  store ptr %1316, ptr %38, align 8
  %1317 = extractvalue { ptr, i32 } %1315, 1
  store i32 %1317, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #10
  br label %1320

1318:                                             ; preds = %1304
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(104) %102)
          to label %1319 unwind label %1206

1319:                                             ; preds = %1318
  store i32 2, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %104) #10
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %102) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #10
  br label %1404

1320:                                             ; preds = %1314, %1288, %1262, %1206
  call void @llvm.lifetime.end.p0(i64 12, ptr %104) #10
  br label %1321

1321:                                             ; preds = %1320, %1202
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %102) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #10
  br label %1407

1322:                                             ; preds = %1183, %1171
  %1323 = load ptr, ptr %40, align 8, !tbaa !5
  %1324 = getelementptr inbounds i8, ptr %1323, i64 0
  %1325 = load i8, ptr %1324, align 1, !tbaa !15
  %1326 = sext i8 %1325 to i32
  %1327 = icmp eq i32 %1326, 115
  br i1 %1327, label %1328, label %1403

1328:                                             ; preds = %1322
  %1329 = load ptr, ptr %40, align 8, !tbaa !5
  %1330 = getelementptr inbounds i8, ptr %1329, i64 1
  %1331 = load i8, ptr %1330, align 1, !tbaa !15
  %1332 = sext i8 %1331 to i32
  %1333 = icmp eq i32 %1332, 32
  br i1 %1333, label %1340, label %1334

1334:                                             ; preds = %1328
  %1335 = load ptr, ptr %40, align 8, !tbaa !5
  %1336 = getelementptr inbounds i8, ptr %1335, i64 1
  %1337 = load i8, ptr %1336, align 1, !tbaa !15
  %1338 = sext i8 %1337 to i32
  %1339 = icmp eq i32 %1338, 9
  br i1 %1339, label %1340, label %1403

1340:                                             ; preds = %1334, %1328
  %1341 = load ptr, ptr %40, align 8, !tbaa !5
  %1342 = getelementptr inbounds i8, ptr %1341, i64 2
  store ptr %1342, ptr %40, align 8, !tbaa !5
  %1343 = load ptr, ptr %40, align 8, !tbaa !5
  %1344 = call i64 @strspn(ptr noundef %1343, ptr noundef @.str) #11
  %1345 = load ptr, ptr %40, align 8, !tbaa !5
  %1346 = getelementptr inbounds i8, ptr %1345, i64 %1344
  store ptr %1346, ptr %40, align 8, !tbaa !5
  %1347 = load ptr, ptr %40, align 8, !tbaa !5
  %1348 = getelementptr inbounds i8, ptr %1347, i64 0
  %1349 = load i8, ptr %1348, align 1, !tbaa !15
  %1350 = sext i8 %1349 to i32
  %1351 = icmp eq i32 %1350, 0
  br i1 %1351, label %1352, label %1353

1352:                                             ; preds = %1340
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

1353:                                             ; preds = %1340
  %1354 = load ptr, ptr %40, align 8, !tbaa !5
  %1355 = getelementptr inbounds i8, ptr %1354, i64 0
  %1356 = load i8, ptr %1355, align 1, !tbaa !15
  %1357 = sext i8 %1356 to i32
  %1358 = icmp eq i32 %1357, 13
  br i1 %1358, label %1365, label %1359

1359:                                             ; preds = %1353
  %1360 = load ptr, ptr %40, align 8, !tbaa !5
  %1361 = getelementptr inbounds i8, ptr %1360, i64 1
  %1362 = load i8, ptr %1361, align 1, !tbaa !15
  %1363 = sext i8 %1362 to i32
  %1364 = icmp eq i32 %1363, 10
  br i1 %1364, label %1365, label %1366

1365:                                             ; preds = %1359, %1353
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

1366:                                             ; preds = %1359
  %1367 = load ptr, ptr %40, align 8, !tbaa !5
  %1368 = call i64 @strlen(ptr noundef %1367) #11
  %1369 = icmp uge i64 %1368, 3
  br i1 %1369, label %1370, label %1389

1370:                                             ; preds = %1366
  %1371 = load ptr, ptr %40, align 8, !tbaa !5
  %1372 = getelementptr inbounds i8, ptr %1371, i64 0
  %1373 = load i8, ptr %1372, align 1, !tbaa !15
  %1374 = sext i8 %1373 to i32
  %1375 = icmp eq i32 %1374, 111
  br i1 %1375, label %1376, label %1389

1376:                                             ; preds = %1370
  %1377 = load ptr, ptr %40, align 8, !tbaa !5
  %1378 = getelementptr inbounds i8, ptr %1377, i64 1
  %1379 = load i8, ptr %1378, align 1, !tbaa !15
  %1380 = sext i8 %1379 to i32
  %1381 = icmp eq i32 %1380, 102
  br i1 %1381, label %1382, label %1389

1382:                                             ; preds = %1376
  %1383 = load ptr, ptr %40, align 8, !tbaa !5
  %1384 = getelementptr inbounds i8, ptr %1383, i64 2
  %1385 = load i8, ptr %1384, align 1, !tbaa !15
  %1386 = sext i8 %1385 to i32
  %1387 = icmp eq i32 %1386, 102
  br i1 %1387, label %1388, label %1389

1388:                                             ; preds = %1382
  store i32 0, ptr %30, align 4, !tbaa !11
  br label %1402

1389:                                             ; preds = %1382, %1376, %1370, %1366
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #10
  %1390 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %40)
          to label %1391 unwind label %1395

1391:                                             ; preds = %1389
  store i32 %1390, ptr %110, align 4, !tbaa !11
  %1392 = load i32, ptr %110, align 4, !tbaa !11
  %1393 = icmp slt i32 %1392, 0
  br i1 %1393, label %1394, label %1399

1394:                                             ; preds = %1391
  store i32 0, ptr %30, align 4, !tbaa !11
  br label %1401

1395:                                             ; preds = %1389
  %1396 = landingpad { ptr, i32 }
          cleanup
  %1397 = extractvalue { ptr, i32 } %1396, 0
  store ptr %1397, ptr %38, align 8
  %1398 = extractvalue { ptr, i32 } %1396, 1
  store i32 %1398, ptr %39, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #10
  br label %1407

1399:                                             ; preds = %1391
  %1400 = load i32, ptr %110, align 4, !tbaa !11
  store i32 %1400, ptr %30, align 4, !tbaa !11
  br label %1401

1401:                                             ; preds = %1399, %1394
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #10
  br label %1402

1402:                                             ; preds = %1401, %1388
  store i32 2, ptr %41, align 4
  br label %1404, !llvm.loop !16

1403:                                             ; preds = %1334, %1322
  store i32 0, ptr %41, align 4
  br label %1404

1404:                                             ; preds = %1403, %1402, %1365, %1352, %1319, %1154, %1095, %933, %777, %708, %545, %428, %308, %274, %243, %196, %189
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  %1405 = load i32, ptr %41, align 4
  switch i32 %1405, label %1603 [
    i32 0, label %1406
    i32 2, label %121
  ]

1406:                                             ; preds = %1404
  br label %121, !llvm.loop !16

1407:                                             ; preds = %1395, %1321, %1170, %1097, %932, %779, %710, %546, %429, %309, %275, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %1605

1408:                                             ; preds = %124
  %1409 = load i8, ptr %35, align 1, !tbaa !9, !range !18, !noundef !19
  %1410 = trunc i8 %1409 to i1
  br i1 %1410, label %1415, label %1411

1411:                                             ; preds = %1408
  %1412 = load i8, ptr %19, align 1, !tbaa !9, !range !18, !noundef !19
  %1413 = trunc i8 %1412 to i1
  br i1 %1413, label %1415, label %1414

1414:                                             ; preds = %1411
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  br label %1415

1415:                                             ; preds = %1414, %1411, %1408
  %1416 = load i32, ptr %31, align 4, !tbaa !11
  %1417 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1418 = udiv i64 %1417, 3
  %1419 = trunc i64 %1418 to i32
  %1420 = icmp sge i32 %1416, %1419
  br i1 %1420, label %1421, label %1460

1421:                                             ; preds = %1415
  %1422 = load ptr, ptr %14, align 8, !tbaa !5
  %1423 = icmp ne ptr %1422, null
  br i1 %1423, label %1424, label %1459

1424:                                             ; preds = %1421
  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 %1425 unwind label %1440

1425:                                             ; preds = %1424
  %1426 = getelementptr inbounds i8, ptr %111, i64 16
  %1427 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1426, ptr noundef @.str.59)
          to label %1428 unwind label %1444

1428:                                             ; preds = %1425
  %1429 = load i64, ptr %36, align 8, !tbaa !13
  %1430 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1427, i64 noundef %1429)
          to label %1431 unwind label %1444

1431:                                             ; preds = %1428
  %1432 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1430, ptr noundef @.str.47)
          to label %1433 unwind label %1444

1433:                                             ; preds = %1431
  %1434 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1432, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1435 unwind label %1444

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

1436:                                             ; preds = %1435
  %1437 = load ptr, ptr %14, align 8, !tbaa !5
  %1438 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1437, ptr noundef nonnull align 8 dereferenceable(32) %112)
          to label %1439 unwind label %1452

1439:                                             ; preds = %1436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #10
  call void @_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 %1459

1440:                                             ; preds = %1424
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %38, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %39, align 4
  br label %1458

1444:                                             ; preds = %1433, %1431, %1428, %1425
  %1445 = landingpad { ptr, i32 }
          cleanup
  %1446 = extractvalue { ptr, i32 } %1445, 0
  store ptr %1446, ptr %38, align 8
  %1447 = extractvalue { ptr, i32 } %1445, 1
  store i32 %1447, ptr %39, align 4
  br label %1457

1448:                                             ; preds = %1435
  %1449 = landingpad { ptr, i32 }
          cleanup
  %1450 = extractvalue { ptr, i32 } %1449, 0
  store ptr %1450, ptr %38, align 8
  %1451 = extractvalue { ptr, i32 } %1449, 1
  store i32 %1451, ptr %39, align 4
  br label %1456

1452:                                             ; preds = %1436
  %1453 = landingpad { ptr, i32 }
          cleanup
  %1454 = extractvalue { ptr, i32 } %1453, 0
  store ptr %1454, ptr %38, align 8
  %1455 = extractvalue { ptr, i32 } %1453, 1
  store i32 %1455, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #10
  br label %1456

1456:                                             ; preds = %1452, %1448
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #10
  br label %1457

1457:                                             ; preds = %1456, %1444
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %111) #10
  br label %1458

1458:                                             ; preds = %1457, %1440
  call void @llvm.lifetime.end.p0(i64 392, ptr %111) #10
  br label %1605

1459:                                             ; preds = %1439, %1421
  br label %1460

1460:                                             ; preds = %1459, %1415
  %1461 = load i32, ptr %32, align 4, !tbaa !11
  %1462 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %1463 = udiv i64 %1462, 3
  %1464 = trunc i64 %1463 to i32
  %1465 = icmp sge i32 %1461, %1464
  br i1 %1465, label %1466, label %1505

1466:                                             ; preds = %1460
  %1467 = load ptr, ptr %14, align 8, !tbaa !5
  %1468 = icmp ne ptr %1467, null
  br i1 %1468, label %1469, label %1504

1469:                                             ; preds = %1466
  call void @llvm.lifetime.start.p0(i64 392, ptr %113) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %113)
          to label %1470 unwind label %1485

1470:                                             ; preds = %1469
  %1471 = getelementptr inbounds i8, ptr %113, i64 16
  %1472 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1471, ptr noundef @.str.60)
          to label %1473 unwind label %1489

1473:                                             ; preds = %1470
  %1474 = load i64, ptr %36, align 8, !tbaa !13
  %1475 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1472, i64 noundef %1474)
          to label %1476 unwind label %1489

1476:                                             ; preds = %1473
  %1477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1475, ptr noundef @.str.47)
          to label %1478 unwind label %1489

1478:                                             ; preds = %1476
  %1479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1477, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1480 unwind label %1489

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

1481:                                             ; preds = %1480
  %1482 = load ptr, ptr %14, align 8, !tbaa !5
  %1483 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1482, ptr noundef nonnull align 8 dereferenceable(32) %114)
          to label %1484 unwind label %1497

1484:                                             ; preds = %1481
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %113) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %113) #10
  br label %1504

1485:                                             ; preds = %1469
  %1486 = landingpad { ptr, i32 }
          cleanup
  %1487 = extractvalue { ptr, i32 } %1486, 0
  store ptr %1487, ptr %38, align 8
  %1488 = extractvalue { ptr, i32 } %1486, 1
  store i32 %1488, ptr %39, align 4
  br label %1503

1489:                                             ; preds = %1478, %1476, %1473, %1470
  %1490 = landingpad { ptr, i32 }
          cleanup
  %1491 = extractvalue { ptr, i32 } %1490, 0
  store ptr %1491, ptr %38, align 8
  %1492 = extractvalue { ptr, i32 } %1490, 1
  store i32 %1492, ptr %39, align 4
  br label %1502

1493:                                             ; preds = %1480
  %1494 = landingpad { ptr, i32 }
          cleanup
  %1495 = extractvalue { ptr, i32 } %1494, 0
  store ptr %1495, ptr %38, align 8
  %1496 = extractvalue { ptr, i32 } %1494, 1
  store i32 %1496, ptr %39, align 4
  br label %1501

1497:                                             ; preds = %1481
  %1498 = landingpad { ptr, i32 }
          cleanup
  %1499 = extractvalue { ptr, i32 } %1498, 0
  store ptr %1499, ptr %38, align 8
  %1500 = extractvalue { ptr, i32 } %1498, 1
  store i32 %1500, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #10
  br label %1501

1501:                                             ; preds = %1497, %1493
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #10
  br label %1502

1502:                                             ; preds = %1501, %1489
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %113) #10
  br label %1503

1503:                                             ; preds = %1502, %1485
  call void @llvm.lifetime.end.p0(i64 392, ptr %113) #10
  br label %1605

1504:                                             ; preds = %1484, %1466
  br label %1505

1505:                                             ; preds = %1504, %1460
  %1506 = load i32, ptr %33, align 4, !tbaa !11
  %1507 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1508 = udiv i64 %1507, 2
  %1509 = trunc i64 %1508 to i32
  %1510 = icmp sge i32 %1506, %1509
  br i1 %1510, label %1511, label %1550

1511:                                             ; preds = %1505
  %1512 = load ptr, ptr %14, align 8, !tbaa !5
  %1513 = icmp ne ptr %1512, null
  br i1 %1513, label %1514, label %1549

1514:                                             ; preds = %1511
  call void @llvm.lifetime.start.p0(i64 392, ptr %115) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %115)
          to label %1515 unwind label %1530

1515:                                             ; preds = %1514
  %1516 = getelementptr inbounds i8, ptr %115, i64 16
  %1517 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1516, ptr noundef @.str.61)
          to label %1518 unwind label %1534

1518:                                             ; preds = %1515
  %1519 = load i64, ptr %36, align 8, !tbaa !13
  %1520 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1517, i64 noundef %1519)
          to label %1521 unwind label %1534

1521:                                             ; preds = %1518
  %1522 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1520, ptr noundef @.str.47)
          to label %1523 unwind label %1534

1523:                                             ; preds = %1521
  %1524 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1522, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1525 unwind label %1534

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

1526:                                             ; preds = %1525
  %1527 = load ptr, ptr %14, align 8, !tbaa !5
  %1528 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1527, ptr noundef nonnull align 8 dereferenceable(32) %116)
          to label %1529 unwind label %1542

1529:                                             ; preds = %1526
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %115) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %115) #10
  br label %1549

1530:                                             ; preds = %1514
  %1531 = landingpad { ptr, i32 }
          cleanup
  %1532 = extractvalue { ptr, i32 } %1531, 0
  store ptr %1532, ptr %38, align 8
  %1533 = extractvalue { ptr, i32 } %1531, 1
  store i32 %1533, ptr %39, align 4
  br label %1548

1534:                                             ; preds = %1523, %1521, %1518, %1515
  %1535 = landingpad { ptr, i32 }
          cleanup
  %1536 = extractvalue { ptr, i32 } %1535, 0
  store ptr %1536, ptr %38, align 8
  %1537 = extractvalue { ptr, i32 } %1535, 1
  store i32 %1537, ptr %39, align 4
  br label %1547

1538:                                             ; preds = %1525
  %1539 = landingpad { ptr, i32 }
          cleanup
  %1540 = extractvalue { ptr, i32 } %1539, 0
  store ptr %1540, ptr %38, align 8
  %1541 = extractvalue { ptr, i32 } %1539, 1
  store i32 %1541, ptr %39, align 4
  br label %1546

1542:                                             ; preds = %1526
  %1543 = landingpad { ptr, i32 }
          cleanup
  %1544 = extractvalue { ptr, i32 } %1543, 0
  store ptr %1544, ptr %38, align 8
  %1545 = extractvalue { ptr, i32 } %1543, 1
  store i32 %1545, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #10
  br label %1546

1546:                                             ; preds = %1542, %1538
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #10
  br label %1547

1547:                                             ; preds = %1546, %1534
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %115) #10
  br label %1548

1548:                                             ; preds = %1547, %1530
  call void @llvm.lifetime.end.p0(i64 392, ptr %115) #10
  br label %1605

1549:                                             ; preds = %1529, %1511
  br label %1550

1550:                                             ; preds = %1549, %1505
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #10
  %1551 = load i32, ptr %29, align 4, !tbaa !11
  %1552 = load i8, ptr %18, align 1, !tbaa !9, !range !18, !noundef !19
  %1553 = trunc i8 %1552 to i1
  %1554 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef %34, ptr noundef nonnull align 8 dereferenceable(72) %26, ptr noundef nonnull align 8 dereferenceable(24) %25, i32 noundef %1551, ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext %1553, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %1555 unwind label %1567

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

1559:                                             ; preds = %1555
  %1560 = getelementptr inbounds %"struct.tinyobj::shape_t", ptr %34, i32 0, i32 1
  %1561 = getelementptr inbounds %"struct.tinyobj::mesh_t", ptr %1560, i32 0, i32 0
  %1562 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1561) #10
  %1563 = icmp ne i64 %1562, 0
  br i1 %1563, label %1564, label %1571

1564:                                             ; preds = %1559, %1555
  %1565 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1565, ptr noundef nonnull align 8 dereferenceable(224) %34)
          to label %1566 unwind label %1567

1566:                                             ; preds = %1564
  br label %1571

1567:                                             ; preds = %1571, %1564, %1550
  %1568 = landingpad { ptr, i32 }
          cleanup
  %1569 = extractvalue { ptr, i32 } %1568, 0
  store ptr %1569, ptr %38, align 8
  %1570 = extractvalue { ptr, i32 } %1568, 1
  store i32 %1570, ptr %39, align 4
  br label %1602

1571:                                             ; preds = %1566, %1559
  invoke void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %26)
          to label %1572 unwind label %1567

1572:                                             ; preds = %1571
  %1573 = load ptr, ptr %15, align 8, !tbaa !5
  %1574 = icmp ne ptr %1573, null
  br i1 %1574, label %1575, label %1589

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

1576:                                             ; preds = %1575
  %1577 = load ptr, ptr %15, align 8, !tbaa !5
  %1578 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %1577, ptr noundef nonnull align 8 dereferenceable(32) %118)
          to label %1579 unwind label %1584

1579:                                             ; preds = %1576
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #10
  br label %1589

1580:                                             ; preds = %1575
  %1581 = landingpad { ptr, i32 }
          cleanup
  %1582 = extractvalue { ptr, i32 } %1581, 0
  store ptr %1582, ptr %38, align 8
  %1583 = extractvalue { ptr, i32 } %1581, 1
  store i32 %1583, ptr %39, align 4
  br label %1588

1584:                                             ; preds = %1576
  %1585 = landingpad { ptr, i32 }
          cleanup
  %1586 = extractvalue { ptr, i32 } %1585, 0
  store ptr %1586, ptr %38, align 8
  %1587 = extractvalue { ptr, i32 } %1585, 1
  store i32 %1587, ptr %39, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #10
  br label %1588

1588:                                             ; preds = %1584, %1580
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #10
  br label %1602

1589:                                             ; preds = %1579, %1572
  %1590 = load ptr, ptr %11, align 8, !tbaa !5
  %1591 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1590, i32 0, i32 0
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1591, ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1592 = load ptr, ptr %11, align 8, !tbaa !5
  %1593 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1592, i32 0, i32 1
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1593, ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  %1594 = load ptr, ptr %11, align 8, !tbaa !5
  %1595 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1594, i32 0, i32 2
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1595, ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  %1596 = load ptr, ptr %11, align 8, !tbaa !5
  %1597 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1596, i32 0, i32 3
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1597, ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1598 = load ptr, ptr %11, align 8, !tbaa !5
  %1599 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1598, i32 0, i32 4
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1599, ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %1600 = load ptr, ptr %11, align 8, !tbaa !5
  %1601 = getelementptr inbounds %"struct.tinyobj::attrib_t", ptr %1600, i32 0, i32 5
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %1601, ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  store i1 true, ptr %10, align 1
  store i32 1, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #10
  br label %1603

1602:                                             ; preds = %1588, %1567
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #10
  br label %1605

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

1605:                                             ; preds = %1602, %1548, %1503, %1458, %1407, %147
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %34) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %28) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %26) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %26) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %20) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr %20) #10
  br label %1606

1606:                                             ; preds = %1605
  %1607 = load ptr, ptr %38, align 8
  %1608 = load i32, ptr %39, align 4
  %1609 = insertvalue { ptr, i32 } poison, ptr %1607, 0
  %1610 = insertvalue { ptr, i32 } %1609, i32 %1608, 1
  resume { ptr, i32 } %1610
}

; 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 @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_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 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = !{!23, !12, i64 0}
!23 = !{!"_ZTSN7tinyobj6face_tE", !12, i64 0, !12, i64 4, !24, i64 8}
!24 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!29, !12, i64 0}
!29 = !{!"_ZTSN7tinyobj14vertex_index_tE", !12, i64 0, !12, i64 4, !12, i64 8}
!30 = !{!29, !12, i64 8}
!31 = !{!29, !12, i64 4}
!32 = distinct !{!32, !17}
!33 = !{!34, !12, i64 32}
!34 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !35, i64 0, !12, i64 32}
!35 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !36, i64 0, !14, i64 8, !7, i64 16}
!36 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!37 = !{!38, !38, i64 0}
!38 = !{!"vtable pointer", !8, i64 0}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}
!41 = distinct !{!41, !17}
!42 = !{!43, !12, i64 0}
!43 = !{!"_ZTSN7tinyobj9tag_sizesE", !12, i64 0, !12, i64 4, !12, i64 8}
!44 = !{!43, !12, i64 4}
!45 = !{!43, !12, i64 8}
!46 = distinct !{!46, !17}
!47 = !{!48, !48, i64 0}
!48 = !{!"float", !7, i64 0}
!49 = distinct !{!49, !17}
!50 = distinct !{!50, !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.36" = type { %"struct.std::_Vector_base.37" }
%"struct.std::_Vector_base.37" = 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.41", %"class.std::vector.46", %"class.std::vector.51" }
%"class.std::vector.41" = type { %"struct.std::_Vector_base.42" }
%"struct.std::_Vector_base.42" = 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.46" = type { %"struct.std::_Vector_base.47" }
%"struct.std::_Vector_base.47" = 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.51" = type { %"struct.std::_Vector_base.52" }
%"struct.std::_Vector_base.52" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl" = type { %"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" }
%"struct.std::_Vector_base<tinyobj::__points_t, std::allocator<tinyobj::__points_t>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.3" = type { %"class.std::_Rb_tree.4" }
%"class.std::_Rb_tree.4" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, int>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, int>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.tinyobj::shape_t" = type { %"class.std::__cxx11::basic_string", %"struct.tinyobj::mesh_t", %"struct.tinyobj::lines_t", %"struct.tinyobj::points_t" }
%"struct.tinyobj::mesh_t" = type { %"class.std::vector.56", %"class.std::vector.61", %"class.std::vector.66", %"class.std::vector.71", %"class.std::vector.36" }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = 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.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = 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.71" = type { %"struct.std::_Vector_base.72" }
%"struct.std::_Vector_base.72" = 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.56", %"class.std::vector.66" }
%"struct.tinyobj::points_t" = type { %"class.std::vector.56" }
%"struct.tinyobj::__line_t" = type { %"class.std::vector.76" }
%"class.std::vector.76" = type { %"struct.std::_Vector_base.77" }
%"struct.std::_Vector_base.77" = 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.76" }
%"struct.tinyobj::face_t" = type { i32, i32, %"class.std::vector.76" }
%"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.66", %"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 [120 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [1 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadObjEPNS_8attrib_tEPSt6vectorINS_7shape_tESaIS3_EEPS2_INS_10material_tESaIS7_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESH_PSiPNS_14MaterialReaderEbb = external hidden unnamed_addr constant [161 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.outer.outer:                                     ; preds = %.thread409.thread, %9
  %.0168.ph.ph = phi i64 [ %105, %.thread409.thread ], [ 0, %9 ]
  %.0166.ph.ph = phi i8 [ %.1167.ph, %.thread409.thread ], [ 1, %9 ]
  %.0160.ph.ph = phi i32 [ %.0160.ph, %.thread409.thread ], [ -1, %9 ]
  %.0155.ph.ph = phi i32 [ %.0155.ph, %.thread409.thread ], [ -1, %9 ]
  %.0150.ph.ph = phi i32 [ %.0150.ph, %.thread409.thread ], [ -1, %9 ]
  %.0146.ph.ph = phi i32 [ %.3149.ph, %.thread409.thread ], [ 0, %9 ]
  %.0140.ph.ph = phi i32 [ %.2142.ph, %.thread409.thread ], [ -1, %9 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %.thread409
  %.0168.ph = phi i64 [ %105, %.thread409 ], [ %.0168.ph.ph, %.outer.outer ]
  %.0160.ph = phi i32 [ %.4164, %.thread409 ], [ %.0160.ph.ph, %.outer.outer ]
  %.0155.ph = phi i32 [ %.4159, %.thread409 ], [ %.0155.ph.ph, %.outer.outer ]
  %.0150.ph = phi i32 [ %.4154, %.thread409 ], [ %.0150.ph.ph, %.outer.outer ]
  br label %99

99:                                               ; preds = %.outer, %131
  %.0168 = phi i64 [ %105, %131 ], [ %.0168.ph, %.outer ]
  %100 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %101 unwind label %117

101:                                              ; preds = %99
  %.not281 = icmp eq i32 %100, -1
  br i1 %.not281, label %646, label %102

102:                                              ; preds = %101
  %103 = 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) %20)
          to label %104 unwind label %117

104:                                              ; preds = %102
  %105 = add i64 %.0168, 1
  %106 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  %.not298 = icmp eq i64 %106, 0
  br i1 %.not298, label %119, label %107

107:                                              ; preds = %104
  %108 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  %109 = add i64 %108, -1
  %110 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %20, i64 noundef %109)
  %111 = load i8, ptr %110, align 1, !tbaa !5
  %112 = icmp eq i8 %111, 10
  br i1 %112, label %113, label %119

113:                                              ; preds = %107
  %114 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  %115 = add i64 %114, -1
  %116 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %20, i64 noundef %115, i64 noundef -1)
          to label %119 unwind label %117

117:                                              ; preds = %127, %113, %102, %99
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %764

119:                                              ; preds = %107, %113, %104
  %120 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  %.not299 = icmp eq i64 %120, 0
  br i1 %.not299, label %131, label %121

121:                                              ; preds = %119
  %122 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  %123 = add i64 %122, -1
  %124 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %20, i64 noundef %123)
  %125 = load i8, ptr %124, align 1, !tbaa !5
  %126 = icmp eq i8 %125, 13
  br i1 %126, label %127, label %131

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

131:                                              ; preds = %121, %127, %119
  %132 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  br i1 %132, label %99, label %133, !llvm.loop !8

133:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  %134 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  store ptr %134, ptr %21, align 8, !tbaa !10
  %135 = call i64 @strspn(ptr noundef %134, ptr noundef nonnull @.str) #11
  %136 = getelementptr inbounds i8, ptr %134, i64 %135
  store ptr %136, ptr %21, align 8, !tbaa !10
  %.not300 = icmp eq ptr %134, null
  br i1 %.not300, label %137, label %138

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

138:                                              ; preds = %133
  %139 = load i8, ptr %136, align 1, !tbaa !5
  switch i8 %139, label %.thread399 [
    i8 0, label %.thread409.thread
    i8 35, label %.thread409.thread
    i8 118, label %140
    i8 108, label %181
    i8 112, label %236
    i8 102, label %291
  ]

140:                                              ; preds = %138
  %141 = getelementptr inbounds i8, ptr %136, i64 1
  %142 = load i8, ptr %141, align 1, !tbaa !5
  switch i8 %142, label %.thread399 [
    i8 32, label %143
    i8 9, label %143
    i8 110, label %160
    i8 116, label %171
  ]

143:                                              ; preds = %140, %140
  %144 = getelementptr inbounds i8, ptr %136, i64 2
  store ptr %144, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #10
  %145 = invoke noundef zeroext i1 @_ZN7tinyobjL20parseVertexWithColorEPfS0_S0_S0_S0_S0_PPKcddd(ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef nonnull %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %146 unwind label %157

146:                                              ; preds = %143
  %147 = and i8 %.0166.ph.ph, 1
  %148 = icmp ne i8 %147, 0
  %149 = select i1 %145, i1 %148, i1 false
  %150 = zext i1 %149 to i8
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %151 unwind label %157

151:                                              ; preds = %146
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %152 unwind label %157

152:                                              ; preds = %151
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %153 unwind label %157

153:                                              ; preds = %152
  %brmerge = or i1 %149, %8
  br i1 %brmerge, label %154, label %159

154:                                              ; preds = %153
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %155 unwind label %157

155:                                              ; preds = %154
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %156 unwind label %157

156:                                              ; preds = %155
  invoke void @_ZNSt6vectorIfSaIfEE9push_backERKf(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %159 unwind label %157

157:                                              ; preds = %156, %155, %154, %152, %151, %146, %143
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #10
  br label %645

159:                                              ; preds = %153, %156
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #10
  br label %.thread409.thread

160:                                              ; preds = %140
  %161 = getelementptr inbounds i8, ptr %136, i64 2
  %162 = load i8, ptr %161, align 1, !tbaa !5
  switch i8 %162, label %.thread399 [
    i8 32, label %163
    i8 9, label %163
  ]

163:                                              ; preds = %160, %160
  %164 = getelementptr inbounds i8, ptr %136, i64 3
  store ptr %164, ptr %21, align 8, !tbaa !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
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %28, ptr noundef nonnull %29, ptr noundef nonnull %30, ptr noundef nonnull %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %165 unwind label %169

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

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

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

168:                                              ; preds = %167
  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
  br label %.thread409.thread

169:                                              ; preds = %167, %166, %165, %163
  %170 = landingpad { ptr, i32 }
          cleanup
  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
  br label %645

171:                                              ; preds = %140
  %172 = getelementptr inbounds i8, ptr %136, i64 2
  %173 = load i8, ptr %172, align 1, !tbaa !5
  switch i8 %173, label %.thread399 [
    i8 32, label %174
    i8 9, label %174
  ]

174:                                              ; preds = %171, %171
  %175 = getelementptr inbounds i8, ptr %136, i64 3
  store ptr %175, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #10
  invoke void @_ZN7tinyobjL10parseReal2EPfS0_PPKcdd(ptr noundef nonnull %31, ptr noundef nonnull %32, ptr noundef nonnull %21, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %176 unwind label %179

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

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

178:                                              ; preds = %177
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #10
  br label %.thread409.thread

179:                                              ; preds = %177, %176, %174
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #10
  br label %645

181:                                              ; preds = %138
  %182 = getelementptr inbounds i8, ptr %136, i64 1
  %183 = load i8, ptr %182, align 1, !tbaa !5
  switch i8 %183, label %.thread399 [
    i8 32, label %184
    i8 9, label %184
  ]

184:                                              ; preds = %181, %181
  %185 = getelementptr inbounds i8, ptr %136, i64 2
  store ptr %185, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %33) #10
  call void @_ZN7tinyobj8__line_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  %.pre1171 = load ptr, ptr %21, align 8, !tbaa !10
  br label %186

186:                                              ; preds = %227, %184
  %187 = phi ptr [ %230, %227 ], [ %.pre1171, %184 ]
  %188 = load i8, ptr %187, align 1, !tbaa !5
  switch i8 %188, label %189 [
    i8 13, label %.critedge
    i8 10, label %.critedge
    i8 0, label %.critedge
  ]

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %34) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %34)
  %190 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %191 = udiv i64 %190, 3
  %192 = trunc i64 %191 to i32
  %193 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %194 = udiv i64 %193, 3
  %195 = trunc i64 %194 to i32
  %196 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %197 = lshr i64 %196, 1
  %198 = trunc i64 %197 to i32
  %199 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %21, i32 noundef %192, i32 noundef %195, i32 noundef %198, ptr noundef nonnull %34)
          to label %200 unwind label %213

200:                                              ; preds = %189
  br i1 %199, label %226, label %201

201:                                              ; preds = %200
  br i1 %.not352, label %.thread393, label %202

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

203:                                              ; preds = %202
  %204 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull @.str.46)
          to label %205 unwind label %217

205:                                              ; preds = %203
  %206 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %204, i64 noundef %105)
          to label %207 unwind label %217

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

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

210:                                              ; preds = %209
  %211 = 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) %36)
          to label %212 unwind label %221

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

213:                                              ; preds = %226, %189
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %231

215:                                              ; preds = %202
  %216 = landingpad { ptr, i32 }
          cleanup
  br label %225

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

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

221:                                              ; preds = %210
  %222 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  br label %223

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

224:                                              ; preds = %223, %217
  %.pn369.pn = phi { ptr, i32 } [ %.pn369, %223 ], [ %218, %217 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %35) #10
  br label %225

225:                                              ; preds = %224, %215
  %.pn369.pn.pn = phi { ptr, i32 } [ %.pn369.pn, %224 ], [ %216, %215 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %35) #10
  br label %231

226:                                              ; preds = %200
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 4 dereferenceable(12) %34)
          to label %227 unwind label %213

.thread393:                                       ; preds = %201, %212
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %34) #10
  br label %234

227:                                              ; preds = %226
  %228 = load ptr, ptr %21, align 8, !tbaa !10
  %229 = call i64 @strspn(ptr noundef %228, ptr noundef nonnull @.str.12) #11
  %230 = getelementptr inbounds i8, ptr %228, i64 %229
  store ptr %230, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %34) #10
  br label %186

231:                                              ; preds = %225, %213
  %.pn373 = phi { ptr, i32 } [ %214, %213 ], [ %.pn369.pn.pn, %225 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %34) #10
  br label %235

.critedge:                                        ; preds = %186, %186, %186
  invoke void @_ZNSt6vectorIN7tinyobj8__line_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 8 dereferenceable(24) %33)
          to label %234 unwind label %232, !llvm.loop !8

232:                                              ; preds = %.critedge
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %235

234:                                              ; preds = %.thread393, %.critedge
  %.1240 = phi i32 [ 2, %.critedge ], [ 1, %.thread393 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  br label %.thread409

235:                                              ; preds = %232, %231
  %.pn373.pn = phi { ptr, i32 } [ %.pn373, %231 ], [ %233, %232 ]
  call void @_ZN7tinyobj8__line_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  br label %645

236:                                              ; preds = %138
  %237 = getelementptr inbounds i8, ptr %136, i64 1
  %238 = load i8, ptr %237, align 1, !tbaa !5
  switch i8 %238, label %.thread399 [
    i8 32, label %239
    i8 9, label %239
  ]

239:                                              ; preds = %236, %236
  %240 = getelementptr inbounds i8, ptr %136, i64 2
  store ptr %240, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %37) #10
  call void @_ZN7tinyobj10__points_tC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  %.pre1170 = load ptr, ptr %21, align 8, !tbaa !10
  br label %241

241:                                              ; preds = %282, %239
  %242 = phi ptr [ %285, %282 ], [ %.pre1170, %239 ]
  %243 = load i8, ptr %242, align 1, !tbaa !5
  switch i8 %243, label %244 [
    i8 13, label %.critedge381
    i8 10, label %.critedge381
    i8 0, label %.critedge381
  ]

244:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %38) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %38)
  %245 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %246 = udiv i64 %245, 3
  %247 = trunc i64 %246 to i32
  %248 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %249 = udiv i64 %248, 3
  %250 = trunc i64 %249 to i32
  %251 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %252 = lshr i64 %251, 1
  %253 = trunc i64 %252 to i32
  %254 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %21, i32 noundef %247, i32 noundef %250, i32 noundef %253, ptr noundef nonnull %38)
          to label %255 unwind label %268

255:                                              ; preds = %244
  br i1 %254, label %281, label %256

256:                                              ; preds = %255
  br i1 %.not352, label %.thread397, label %257

257:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %39) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %39)
          to label %258 unwind label %270

258:                                              ; preds = %257
  %259 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull @.str.48)
          to label %260 unwind label %272

260:                                              ; preds = %258
  %261 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %259, i64 noundef %105)
          to label %262 unwind label %272

262:                                              ; preds = %260
  %263 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %261, ptr noundef nonnull @.str.47)
          to label %264 unwind label %272

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

265:                                              ; preds = %264
  %266 = 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) %40)
          to label %267 unwind label %276

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

268:                                              ; preds = %281, %244
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %286

270:                                              ; preds = %257
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %280

272:                                              ; preds = %262, %260, %258
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %279

274:                                              ; preds = %264
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %278

276:                                              ; preds = %265
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #10
  br label %278

278:                                              ; preds = %276, %274
  %.pn361 = phi { ptr, i32 } [ %277, %276 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #10
  br label %279

279:                                              ; preds = %278, %272
  %.pn361.pn = phi { ptr, i32 } [ %.pn361, %278 ], [ %273, %272 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %39) #10
  br label %280

280:                                              ; preds = %279, %270
  %.pn361.pn.pn = phi { ptr, i32 } [ %.pn361.pn, %279 ], [ %271, %270 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %39) #10
  br label %286

281:                                              ; preds = %255
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 4 dereferenceable(12) %38)
          to label %282 unwind label %268

.thread397:                                       ; preds = %256, %267
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %38) #10
  br label %289

282:                                              ; preds = %281
  %283 = load ptr, ptr %21, align 8, !tbaa !10
  %284 = call i64 @strspn(ptr noundef %283, ptr noundef nonnull @.str.12) #11
  %285 = getelementptr inbounds i8, ptr %283, i64 %284
  store ptr %285, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %38) #10
  br label %241

286:                                              ; preds = %280, %268
  %.pn365 = phi { ptr, i32 } [ %269, %268 ], [ %.pn361.pn.pn, %280 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %38) #10
  br label %290

.critedge381:                                     ; preds = %241, %241, %241
  invoke void @_ZNSt6vectorIN7tinyobj10__points_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %85, ptr noundef nonnull align 8 dereferenceable(24) %37)
          to label %289 unwind label %287, !llvm.loop !8

287:                                              ; preds = %.critedge381
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %290

289:                                              ; preds = %.thread397, %.critedge381
  %.3242 = phi i32 [ 2, %.critedge381 ], [ 1, %.thread397 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #10
  br label %.thread409

290:                                              ; preds = %287, %286
  %.pn365.pn = phi { ptr, i32 } [ %.pn365, %286 ], [ %288, %287 ]
  call void @_ZN7tinyobj10__points_tD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #10
  br label %645

291:                                              ; preds = %138
  %292 = getelementptr inbounds i8, ptr %136, i64 1
  %293 = load i8, ptr %292, align 1, !tbaa !5
  switch i8 %293, label %.thread399 [
    i8 32, label %294
    i8 9, label %294
  ]

294:                                              ; preds = %291, %291
  %295 = getelementptr inbounds i8, ptr %136, i64 2
  store ptr %295, ptr %21, align 8, !tbaa !10
  %296 = call i64 @strspn(ptr noundef nonnull %295, ptr noundef nonnull @.str) #11
  %297 = getelementptr inbounds i8, ptr %295, i64 %296
  store ptr %297, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #10
  call void @_ZN7tinyobj6face_tC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41)
  store i32 %.0146.ph.ph, ptr %41, align 8, !tbaa !12
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %81, i64 noundef 3)
          to label %.preheader414.preheader unwind label %324

.preheader414.preheader:                          ; preds = %294
  %.pre = load ptr, ptr %21, align 8, !tbaa !10
  br label %.preheader414

.preheader414:                                    ; preds = %.preheader414.preheader, %343
  %298 = phi ptr [ %349, %343 ], [ %.pre, %.preheader414.preheader ]
  %.1161 = phi i32 [ %344, %343 ], [ %.0160.ph, %.preheader414.preheader ]
  %.1156 = phi i32 [ %345, %343 ], [ %.0155.ph, %.preheader414.preheader ]
  %.1151 = phi i32 [ %346, %343 ], [ %.0150.ph, %.preheader414.preheader ]
  %299 = load i8, ptr %298, align 1, !tbaa !5
  switch i8 %299, label %300 [
    i8 13, label %.critedge384
    i8 10, label %.critedge384
    i8 0, label %.critedge384
  ]

300:                                              ; preds = %.preheader414
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %42) #10
  call void @_ZN7tinyobj14vertex_index_tC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %42)
  %301 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %302 = udiv i64 %301, 3
  %303 = trunc i64 %302 to i32
  %304 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %305 = udiv i64 %304, 3
  %306 = trunc i64 %305 to i32
  %307 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %308 = lshr i64 %307, 1
  %309 = trunc i64 %308 to i32
  %310 = invoke noundef zeroext i1 @_ZN7tinyobjL11parseTripleEPPKciiiPNS_14vertex_index_tE(ptr noundef nonnull %21, i32 noundef %303, i32 noundef %306, i32 noundef %309, ptr noundef nonnull %42)
          to label %311 unwind label %326

311:                                              ; preds = %300
  br i1 %310, label %339, label %312

312:                                              ; preds = %311
  br i1 %.not352, label %.thread401, label %313

313:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %43) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %43)
          to label %314 unwind label %328

314:                                              ; preds = %313
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull @.str.49)
          to label %316 unwind label %330

316:                                              ; preds = %314
  %317 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %315, i64 noundef %105)
          to label %318 unwind label %330

318:                                              ; preds = %316
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef nonnull @.str.47)
          to label %320 unwind label %330

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

321:                                              ; preds = %320
  %322 = 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) %44)
          to label %323 unwind label %334

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

324:                                              ; preds = %.critedge384, %294
  %325 = landingpad { ptr, i32 }
          cleanup
  br label %352

326:                                              ; preds = %339, %300
  %327 = landingpad { ptr, i32 }
          cleanup
  br label %350

328:                                              ; preds = %313
  %329 = landingpad { ptr, i32 }
          cleanup
  br label %338

330:                                              ; preds = %318, %316, %314
  %331 = landingpad { ptr, i32 }
          cleanup
  br label %337

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

334:                                              ; preds = %321
  %335 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #10
  br label %336

336:                                              ; preds = %334, %332
  %.pn353 = phi { ptr, i32 } [ %335, %334 ], [ %333, %332 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #10
  br label %337

337:                                              ; preds = %336, %330
  %.pn353.pn = phi { ptr, i32 } [ %.pn353, %336 ], [ %331, %330 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %43) #10
  br label %338

338:                                              ; preds = %337, %328
  %.pn353.pn.pn = phi { ptr, i32 } [ %.pn353.pn, %337 ], [ %329, %328 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %43) #10
  br label %350

339:                                              ; preds = %311
  %340 = load i32, ptr %42, align 4
  %341 = load i32, ptr %82, align 4
  %342 = load i32, ptr %83, align 4
  invoke void @_ZNSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %81, ptr noundef nonnull align 4 dereferenceable(12) %42)
          to label %343 unwind label %326

.thread401:                                       ; preds = %312, %323
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #10
  br label %351

343:                                              ; preds = %339
  %344 = call i32 @llvm.smax.i32(i32 %.1161, i32 %342)
  %345 = call i32 @llvm.smax.i32(i32 %.1156, i32 %341)
  %346 = call i32 @llvm.smax.i32(i32 %.1151, i32 %340)
  %347 = load ptr, ptr %21, align 8, !tbaa !10
  %348 = call i64 @strspn(ptr noundef %347, ptr noundef nonnull @.str.12) #11
  %349 = getelementptr inbounds i8, ptr %347, i64 %348
  store ptr %349, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #10
  br label %.preheader414

350:                                              ; preds = %338, %326
  %.pn357 = phi { ptr, i32 } [ %327, %326 ], [ %.pn353.pn.pn, %338 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %42) #10
  br label %352

.critedge384:                                     ; preds = %.preheader414, %.preheader414, %.preheader414
  invoke void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %351 unwind label %324, !llvm.loop !8

351:                                              ; preds = %.thread401, %.critedge384
  %.5244 = phi i32 [ 2, %.critedge384 ], [ 1, %.thread401 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  br label %.thread409

352:                                              ; preds = %350, %324
  %.pn357.pn = phi { ptr, i32 } [ %.pn357, %350 ], [ %325, %324 ]
  call void @_ZN7tinyobj6face_tD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  br label %645

.thread399:                                       ; preds = %138, %181, %236, %291, %140, %160, %171
  %353 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %136, ptr noundef nonnull dereferenceable(1) @.str.50, i64 noundef 6) #11
  %354 = icmp eq i32 %353, 0
  br i1 %354, label %355, label %393

355:                                              ; preds = %.thread399
  %356 = getelementptr inbounds i8, ptr %136, i64 6
  store ptr %356, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull %21)
          to label %357 unwind label %366

357:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #10
  %358 = invoke ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(48) %18, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %359 unwind label %368

359:                                              ; preds = %357
  store ptr %358, ptr %47, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #10
  %360 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  store ptr %360, ptr %49, align 8
  call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #10
  %361 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #10
  br i1 %361, label %362, label %370

362:                                              ; preds = %359
  %363 = call noundef ptr @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  %364 = getelementptr inbounds i8, ptr %363, i64 32
  %365 = load i32, ptr %364, align 8, !tbaa !19
  br label %384

366:                                              ; preds = %355
  %367 = landingpad { ptr, i32 }
          cleanup
  br label %392

368:                                              ; preds = %357
  %369 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  br label %391

370:                                              ; preds = %359
  br i1 %.not332, label %384, label %371

371:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #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 %51, ptr noundef nonnull @.str.51, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %372 unwind label %376

372:                                              ; preds = %371
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull @.str.52)
          to label %373 unwind label %378

373:                                              ; preds = %372
  %374 = 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) %50)
          to label %375 unwind label %380

375:                                              ; preds = %373
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #10
  br label %384

376:                                              ; preds = %371
  %377 = landingpad { ptr, i32 }
          cleanup
  br label %383

378:                                              ; preds = %372
  %379 = landingpad { ptr, i32 }
          cleanup
  br label %382

380:                                              ; preds = %373
  %381 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #10
  br label %382

382:                                              ; preds = %380, %378
  %.pn345 = phi { ptr, i32 } [ %381, %380 ], [ %379, %378 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  br label %383

383:                                              ; preds = %382, %376
  %.pn345.pn = phi { ptr, i32 } [ %.pn345, %382 ], [ %377, %376 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #10
  br label %391

384:                                              ; preds = %370, %375, %362
  %.0173 = phi i32 [ %365, %362 ], [ -1, %375 ], [ -1, %370 ]
  %.not348 = icmp eq i32 %.0173, %.0140.ph.ph
  br i1 %.not348, label %390, label %385

385:                                              ; preds = %384
  %386 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %19, ptr noundef nonnull align 8 dereferenceable(72) %16, ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef %.0140.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %387 unwind label %388

387:                                              ; preds = %385
  call void @_ZNSt6vectorIN7tinyobj6face_tESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  br label %390

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

390:                                              ; preds = %387, %384
  %.1141 = phi i32 [ %.0173, %387 ], [ %.0140.ph.ph, %384 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #10
  br label %.thread409.thread

391:                                              ; preds = %388, %383, %368
  %.pn349 = phi { ptr, i32 } [ %389, %388 ], [ %.pn345.pn, %383 ], [ %369, %368 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #10
  br label %392

392:                                              ; preds = %391, %366
  %.pn349.pn = phi { ptr, i32 } [ %.pn349, %391 ], [ %367, %366 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #10
  br label %645

393:                                              ; preds = %.thread399
  %394 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %136, ptr noundef nonnull dereferenceable(1) @.str.53, i64 noundef 6) #11
  %395 = icmp eq i32 %394, 0
  br i1 %395, label %396, label %470

396:                                              ; preds = %393
  %397 = getelementptr inbounds i8, ptr %136, i64 6
  %398 = load i8, ptr %397, align 1, !tbaa !5
  switch i8 %398, label %470 [
    i8 32, label %399
    i8 9, label %399
  ]

399:                                              ; preds = %396, %396
  br i1 %.not327, label %.thread409.thread, label %400, !llvm.loop !8

400:                                              ; preds = %399
  %401 = getelementptr inbounds i8, ptr %136, i64 7
  store ptr %401, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %52) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #10
  %402 = load ptr, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %54) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef %402, ptr noundef nonnull align 1 dereferenceable(1) %54)
          to label %403 unwind label %419

403:                                              ; preds = %400
  invoke void @_ZN7tinyobjL11SplitStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRSt6vectorIS5_SaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %53, i8 noundef signext 32, ptr noundef nonnull align 8 dereferenceable(24) %52)
          to label %404 unwind label %421

404:                                              ; preds = %403
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #10
  %405 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  br i1 %405, label %407, label %.preheader413

.preheader413:                                    ; preds = %404
  %406 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  %.not = icmp eq i64 %406, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

407:                                              ; preds = %404
  br i1 %.not332, label %._crit_edge.thread, label %408

408:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %55) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %55)
          to label %409 unwind label %424

409:                                              ; preds = %408
  %410 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull @.str.54)
          to label %411 unwind label %426

411:                                              ; preds = %409
  %412 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %410, i64 noundef %105)
          to label %413 unwind label %426

413:                                              ; preds = %411
  %414 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %412, ptr noundef nonnull @.str.47)
          to label %415 unwind label %426

415:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(128) %55)
          to label %416 unwind label %428

416:                                              ; preds = %415
  %417 = 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) %56)
          to label %418 unwind label %430

418:                                              ; preds = %416
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %55) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %55) #10
  br label %._crit_edge.thread

419:                                              ; preds = %400
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %423

421:                                              ; preds = %403
  %422 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #10
  br label %423

423:                                              ; preds = %421, %419
  %.pn328 = phi { ptr, i32 } [ %422, %421 ], [ %420, %419 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %54) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #10
  br label %469

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

426:                                              ; preds = %413, %411, %409
  %427 = landingpad { ptr, i32 }
          cleanup
  br label %433

428:                                              ; preds = %415
  %429 = landingpad { ptr, i32 }
          cleanup
  br label %432

430:                                              ; preds = %416
  %431 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  br label %432

432:                                              ; preds = %430, %428
  %.pn339 = phi { ptr, i32 } [ %431, %430 ], [ %429, %428 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #10
  br label %433

433:                                              ; preds = %432, %426
  %.pn339.pn = phi { ptr, i32 } [ %.pn339, %432 ], [ %427, %426 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %55) #10
  br label %434

434:                                              ; preds = %433, %424
  %.pn339.pn.pn = phi { ptr, i32 } [ %.pn339.pn, %433 ], [ %425, %424 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %55) #10
  br label %469

435:                                              ; preds = %463
  %436 = add nuw i64 %.0169784, 1
  %437 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  %438 = icmp ult i64 %436, %437
  br i1 %438, label %.lr.ph, label %._crit_edge, !llvm.loop !24

.lr.ph:                                           ; preds = %.preheader413, %435
  %.0169784 = phi i64 [ %436, %435 ], [ 0, %.preheader413 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #10
  %439 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %52, i64 noundef %.0169784) #10
  %440 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %439) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %60) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef %440, ptr noundef nonnull align 1 dereferenceable(1) %60)
          to label %441 unwind label %451

441:                                              ; preds = %.lr.ph
  %442 = load ptr, ptr %6, align 8, !tbaa !25
  %443 = getelementptr inbounds i8, ptr %442, i64 16
  %444 = load ptr, ptr %443, align 8
  %445 = invoke noundef zeroext i1 %444(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef %2, ptr noundef nonnull %18, ptr noundef nonnull %57, ptr noundef nonnull %58)
          to label %446 unwind label %453

446:                                              ; preds = %441
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #10
  br i1 %.not332, label %458, label %447

447:                                              ; preds = %446
  %448 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br i1 %448, label %458, label %449

449:                                              ; preds = %447
  %450 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %458 unwind label %456

451:                                              ; preds = %.lr.ph
  %452 = landingpad { ptr, i32 }
          cleanup
  br label %455

453:                                              ; preds = %441
  %454 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  br label %455

455:                                              ; preds = %453, %451
  %.pn330 = phi { ptr, i32 } [ %454, %453 ], [ %452, %451 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %60) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #10
  br label %464

456:                                              ; preds = %461, %449
  %457 = landingpad { ptr, i32 }
          cleanup
  br label %464

458:                                              ; preds = %449, %447, %446
  br i1 %.not352, label %463, label %459

459:                                              ; preds = %458
  %460 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %58) #10
  br i1 %460, label %463, label %461

461:                                              ; preds = %459
  %462 = 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) %58)
          to label %463 unwind label %456

463:                                              ; preds = %461, %459, %458
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #10
  br i1 %445, label %._crit_edge.thread, label %435

464:                                              ; preds = %456, %455
  %.pn334 = phi { ptr, i32 } [ %457, %456 ], [ %.pn330, %455 ]
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #10
  br label %469

._crit_edge:                                      ; preds = %435, %.preheader413
  br i1 %.not332, label %._crit_edge.thread, label %465

465:                                              ; preds = %._crit_edge
  %466 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.55)
          to label %._crit_edge.thread unwind label %467

467:                                              ; preds = %465
  %468 = landingpad { ptr, i32 }
          cleanup
  br label %469

._crit_edge.thread:                               ; preds = %463, %._crit_edge, %465, %407, %418
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %52) #10
  br label %.thread409.thread, !llvm.loop !8

469:                                              ; preds = %464, %467, %434, %423
  %.pn339.pn.pn.pn = phi { ptr, i32 } [ %.pn339.pn.pn, %434 ], [ %.pn328, %423 ], [ %468, %467 ], [ %.pn334, %464 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %52) #10
  br label %645

470:                                              ; preds = %396, %393
  switch i8 %139, label %.thread409.thread [
    i8 103, label %471
    i8 111, label %552
    i8 116, label %584
    i8 115, label %622
  ]

471:                                              ; preds = %470
  %472 = getelementptr inbounds i8, ptr %136, i64 1
  %473 = load i8, ptr %472, align 1, !tbaa !5
  switch i8 %473, label %.thread409.thread [
    i8 32, label %474
    i8 9, label %474
  ]

474:                                              ; preds = %471, %471
  %475 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %19, ptr noundef nonnull align 8 dereferenceable(72) %16, ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef %.0140.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %476 unwind label %479

476:                                              ; preds = %474
  %477 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %93) #10
  %.not313 = icmp eq i64 %477, 0
  br i1 %.not313, label %481, label %478

478:                                              ; preds = %476
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %19)
          to label %481 unwind label %479

479:                                              ; preds = %478, %474
  %480 = landingpad { ptr, i32 }
          cleanup
  br label %645

481:                                              ; preds = %478, %476
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %61) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(224) %61, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %61) #10
  %482 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %19, ptr noundef nonnull align 8 dereferenceable(224) %61) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %61) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %61) #10
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %16)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %62) #10
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  br label %483

483:                                              ; preds = %488, %481
  %484 = load ptr, ptr %21, align 8, !tbaa !10
  %485 = load i8, ptr %484, align 1, !tbaa !5
  switch i8 %485, label %486 [
    i8 13, label %.critedge387
    i8 10, label %.critedge387
    i8 0, label %.critedge387
  ]

486:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull %21)
          to label %487 unwind label %492

487:                                              ; preds = %486
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_(ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %488 unwind label %494

488:                                              ; preds = %487
  %489 = load ptr, ptr %21, align 8, !tbaa !10
  %490 = call i64 @strspn(ptr noundef %489, ptr noundef nonnull @.str.12) #11
  %491 = getelementptr inbounds i8, ptr %489, i64 %490
  store ptr %491, ptr %21, align 8, !tbaa !10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #10
  br label %483, !llvm.loop !27

492:                                              ; preds = %486
  %493 = landingpad { ptr, i32 }
          cleanup
  br label %496

494:                                              ; preds = %487
  %495 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  br label %496

496:                                              ; preds = %494, %492
  %.pn323 = phi { ptr, i32 } [ %495, %494 ], [ %493, %492 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #10
  br label %551

.critedge387:                                     ; preds = %483, %483, %483
  %497 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  %498 = icmp ult i64 %497, 2
  br i1 %498, label %499, label %524

499:                                              ; preds = %.critedge387
  br i1 %.not332, label %550, label %500

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

501:                                              ; preds = %500
  %502 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %98, ptr noundef nonnull @.str.56)
          to label %503 unwind label %515

503:                                              ; preds = %501
  %504 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %502, i64 noundef %105)
          to label %505 unwind label %515

505:                                              ; preds = %503
  %506 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %504, ptr noundef nonnull @.str.57)
          to label %507 unwind label %515

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

508:                                              ; preds = %507
  %509 = 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) %65)
          to label %510 unwind label %519

510:                                              ; preds = %508
  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
  %511 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str.45)
          to label %512 unwind label %515

512:                                              ; preds = %510
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %64) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %64) #10
  br label %550

513:                                              ; preds = %500
  %514 = landingpad { ptr, i32 }
          cleanup
  br label %523

515:                                              ; preds = %510, %505, %503, %501
  %516 = landingpad { ptr, i32 }
          cleanup
  br label %522

517:                                              ; preds = %507
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %521

519:                                              ; preds = %508
  %520 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #10
  br label %521

521:                                              ; preds = %519, %517
  %.pn318 = phi { ptr, i32 } [ %520, %519 ], [ %518, %517 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #10
  br label %522

522:                                              ; preds = %521, %515
  %.pn320 = phi { ptr, i32 } [ %516, %515 ], [ %.pn318, %521 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %64) #10
  br label %523

523:                                              ; preds = %522, %513
  %.pn320.pn = phi { ptr, i32 } [ %.pn320, %522 ], [ %514, %513 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %64) #10
  br label %551

524:                                              ; preds = %.critedge387
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %66) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %66)
          to label %525 unwind label %530

525:                                              ; preds = %524
  %526 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef 1) #10
  %527 = 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) %97, ptr noundef nonnull align 8 dereferenceable(32) %526)
          to label %.preheader unwind label %532

.preheader:                                       ; preds = %525
  %528 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  %529 = icmp ugt i64 %528, 2
  br i1 %529, label %.lr.ph797, label %._crit_edge798

._crit_edge798:                                   ; preds = %538, %.preheader
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(128) %66)
          to label %544 unwind label %546

530:                                              ; preds = %524
  %531 = landingpad { ptr, i32 }
          cleanup
  br label %549

532:                                              ; preds = %525
  %533 = landingpad { ptr, i32 }
          cleanup
  br label %548

.lr.ph797:                                        ; preds = %.preheader, %538
  %.0165796 = phi i64 [ %539, %538 ], [ 2, %.preheader ]
  %534 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @.str.58)
          to label %535 unwind label %542

535:                                              ; preds = %.lr.ph797
  %536 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %.0165796) #10
  %537 = 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) %534, ptr noundef nonnull align 8 dereferenceable(32) %536)
          to label %538 unwind label %542

538:                                              ; preds = %535
  %539 = add nuw i64 %.0165796, 1
  %540 = call noundef i64 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  %541 = icmp ult i64 %539, %540
  br i1 %541, label %.lr.ph797, label %._crit_edge798, !llvm.loop !28

542:                                              ; preds = %535, %.lr.ph797
  %543 = landingpad { ptr, i32 }
          cleanup
  br label %548

544:                                              ; preds = %._crit_edge798
  %545 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %67) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %66) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %66) #10
  br label %550

546:                                              ; preds = %._crit_edge798
  %547 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #10
  br label %548

548:                                              ; preds = %546, %542, %532
  %.pn314 = phi { ptr, i32 } [ %543, %542 ], [ %547, %546 ], [ %533, %532 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %66) #10
  br label %549

549:                                              ; preds = %548, %530
  %.pn314.pn = phi { ptr, i32 } [ %.pn314, %548 ], [ %531, %530 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %66) #10
  br label %551

550:                                              ; preds = %499, %512, %544
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %62) #10
  br label %.thread409.thread

551:                                              ; preds = %549, %523, %496
  %.pn323.pn = phi { ptr, i32 } [ %.pn323, %496 ], [ %.pn320.pn, %523 ], [ %.pn314.pn, %549 ]
  call void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %62) #10
  br label %645

552:                                              ; preds = %470
  %553 = getelementptr inbounds i8, ptr %136, i64 1
  %554 = load i8, ptr %553, align 1, !tbaa !5
  switch i8 %554, label %.thread409.thread [
    i8 32, label %555
    i8 9, label %555
  ]

555:                                              ; preds = %552, %552
  %556 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %19, ptr noundef nonnull align 8 dereferenceable(72) %16, ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef %.0140.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %557 unwind label %564

557:                                              ; preds = %555
  %558 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %93) #10
  %.not306 = icmp eq i64 %558, 0
  br i1 %.not306, label %559, label %563

559:                                              ; preds = %557
  %560 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %94) #10
  %.not307 = icmp eq i64 %560, 0
  br i1 %.not307, label %561, label %563

561:                                              ; preds = %559
  %562 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %95) #10
  %.not308 = icmp eq i64 %562, 0
  br i1 %.not308, label %566, label %563

563:                                              ; preds = %561, %559, %557
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %19)
          to label %566 unwind label %564

564:                                              ; preds = %563, %555
  %565 = landingpad { ptr, i32 }
          cleanup
  br label %645

566:                                              ; preds = %563, %561
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %16)
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %68) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(224) %68, i8 0, i64 224, i1 false)
  call void @_ZN7tinyobj7shape_tC2Ev(ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  %567 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZN7tinyobj7shape_taSEOS0_(ptr noundef nonnull align 8 dereferenceable(224) %19, ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %68) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %68) #10
  %568 = load ptr, ptr %21, align 8, !tbaa !10
  %569 = getelementptr inbounds i8, ptr %568, i64 2
  store ptr %569, ptr %21, align 8, !tbaa !10
  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 %570 unwind label %576

570:                                              ; preds = %566
  %571 = load ptr, ptr %21, align 8, !tbaa !10
  %572 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %571)
          to label %573 unwind label %578

573:                                              ; preds = %570
  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 %574 unwind label %580

574:                                              ; preds = %573
  %575 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #10
  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 %.thread409.thread

576:                                              ; preds = %566
  %577 = landingpad { ptr, i32 }
          cleanup
  br label %583

578:                                              ; preds = %570
  %579 = landingpad { ptr, i32 }
          cleanup
  br label %582

580:                                              ; preds = %573
  %581 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #10
  br label %582

582:                                              ; preds = %580, %578
  %.pn309 = phi { ptr, i32 } [ %581, %580 ], [ %579, %578 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %69) #10
  br label %583

583:                                              ; preds = %582, %576
  %.pn309.pn = phi { ptr, i32 } [ %.pn309, %582 ], [ %577, %576 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %69) #10
  br label %645

584:                                              ; preds = %470
  %585 = getelementptr inbounds i8, ptr %136, i64 1
  %586 = load i8, ptr %585, align 1, !tbaa !5
  switch i8 %586, label %.thread409.thread [
    i8 32, label %587
    i8 9, label %587
  ]

587:                                              ; preds = %584, %584
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %71) #10
  call void @_ZN7tinyobj5tag_tC2Ev(ptr noundef nonnull align 8 dereferenceable(104) %71) #10
  %588 = load ptr, ptr %21, align 8, !tbaa !10
  %589 = getelementptr inbounds i8, ptr %588, i64 2
  store ptr %589, ptr %21, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull %21)
          to label %590 unwind label %599

590:                                              ; preds = %587
  %591 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  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
  %592 = invoke { i64, i32 } @_ZN7tinyobjL14parseTagTripleEPPKc(ptr noundef nonnull %21)
          to label %593 unwind label %601

593:                                              ; preds = %590
  %.fca.0.extract = extractvalue { i64, i32 } %592, 0
  %.fca.1.extract = extractvalue { i64, i32 } %592, 1
  %594 = and i64 %.fca.0.extract, 2147483648
  %.not301 = icmp eq i64 %594, 0
  %.sroa.022.0.insert.mask = and i64 %.fca.0.extract, -4294967296
  %spec.select = select i1 %.not301, i64 %.fca.0.extract, i64 %.sroa.022.0.insert.mask
  %.sroa.022.0.extract.trunc24 = trunc i64 %spec.select to i32
  %595 = icmp sgt i32 %.sroa.022.0.extract.trunc24, 8192
  %.sroa.022.0.insert.insert27 = or disjoint i64 %.sroa.022.0.insert.mask, 8192
  %.sroa.022.1 = select i1 %595, i64 %.sroa.022.0.insert.insert27, i64 %spec.select
  %596 = icmp slt i64 %.sroa.022.1, 0
  %.sroa.022.4.insert.mask = and i64 %.sroa.022.1, 4294967295
  %.sroa.022.2 = select i1 %596, i64 %.sroa.022.4.insert.mask, i64 %.sroa.022.1
  %597 = icmp ugt i64 %.sroa.022.2, 35188667056127
  %.sroa.022.4.insert.insert37 = or disjoint i64 %.sroa.022.4.insert.mask, 35184372088832
  %.sroa.022.3 = select i1 %597, i64 %.sroa.022.4.insert.insert37, i64 %.sroa.022.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.022.3, 32
  %598 = ashr exact i64 %sext, 32
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef %598)
          to label %.preheader412 unwind label %601

.preheader412:                                    ; preds = %593
  %.not799 = icmp eq i64 %sext, 0
  br i1 %.not799, label %._crit_edge789, label %.lr.ph788.preheader

.lr.ph788.preheader:                              ; preds = %.preheader412
  %umax = call i64 @llvm.umax.i64(i64 %598, i64 1)
  br label %.lr.ph788

599:                                              ; preds = %587
  %600 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #10
  br label %621

601:                                              ; preds = %._crit_edge795, %._crit_edge792, %._crit_edge789, %593, %590
  %602 = landingpad { ptr, i32 }
          cleanup
  br label %621

._crit_edge789:                                   ; preds = %.lr.ph788, %.preheader412
  %603 = ashr i64 %.sroa.022.3, 32
  invoke void @_ZNSt6vectorIfSaIfEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %603)
          to label %.preheader411 unwind label %601

.preheader411:                                    ; preds = %._crit_edge789
  %.not800 = icmp ult i64 %.sroa.022.3, 4294967296
  br i1 %.not800, label %._crit_edge792, label %.lr.ph791.preheader

.lr.ph791.preheader:                              ; preds = %.preheader411
  %umax1167 = call i64 @llvm.umax.i64(i64 %603, i64 1)
  br label %.lr.ph791

.lr.ph788:                                        ; preds = %.lr.ph788.preheader, %.lr.ph788
  %.0145787 = phi i64 [ %606, %.lr.ph788 ], [ 0, %.lr.ph788.preheader ]
  %604 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %21)
  %605 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef %.0145787) #10
  store i32 %604, ptr %605, align 4, !tbaa !29
  %606 = add nuw i64 %.0145787, 1
  %exitcond.not = icmp eq i64 %606, %umax
  br i1 %exitcond.not, label %._crit_edge789, label %.lr.ph788, !llvm.loop !30

._crit_edge792:                                   ; preds = %609, %.preheader411
  %607 = zext nneg i32 %.sroa.16.1 to i64
  invoke void @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %607)
          to label %.preheader410 unwind label %601

.preheader410:                                    ; preds = %._crit_edge792
  %.not801 = icmp slt i32 %.fca.1.extract, 1
  br i1 %.not801, label %._crit_edge795, label %.lr.ph794

.lr.ph791:                                        ; preds = %.lr.ph791.preheader, %609
  %.0144790 = phi i64 [ %611, %609 ], [ 0, %.lr.ph791.preheader ]
  %608 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %21, double noundef 0.000000e+00)
          to label %609 unwind label %612

609:                                              ; preds = %.lr.ph791
  %610 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %.0144790) #10
  store float %608, ptr %610, align 4, !tbaa !31
  %611 = add nuw i64 %.0144790, 1
  %exitcond1168.not = icmp eq i64 %611, %umax1167
  br i1 %exitcond1168.not, label %._crit_edge792, label %.lr.ph791, !llvm.loop !33

612:                                              ; preds = %.lr.ph791
  %613 = landingpad { ptr, i32 }
          cleanup
  br label %621

._crit_edge795:                                   ; preds = %614, %.preheader410
  invoke void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(104) %71)
          to label %620 unwind label %601

.lr.ph794:                                        ; preds = %.preheader410, %614
  %.0143793 = phi i64 [ %617, %614 ], [ 0, %.preheader410 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #10
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull %21)
          to label %614 unwind label %618

614:                                              ; preds = %.lr.ph794
  %615 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %.0143793) #10
  %616 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %615, ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #10
  %617 = add nuw nsw i64 %.0143793, 1
  %exitcond1169.not = icmp eq i64 %617, %607
  br i1 %exitcond1169.not, label %._crit_edge795, label %.lr.ph794, !llvm.loop !34

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

620:                                              ; preds = %._crit_edge795
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %71) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %71) #10
  br label %.thread409.thread

621:                                              ; preds = %601, %612, %618, %599
  %.pn303.pn = phi { ptr, i32 } [ %600, %599 ], [ %613, %612 ], [ %619, %618 ], [ %602, %601 ]
  call void @_ZN7tinyobj5tag_tD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %71) #10
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %71) #10
  br label %645

622:                                              ; preds = %470
  %623 = getelementptr inbounds i8, ptr %136, i64 1
  %624 = load i8, ptr %623, align 1, !tbaa !5
  switch i8 %624, label %.thread409.thread [
    i8 32, label %625
    i8 9, label %625
  ]

625:                                              ; preds = %622, %622
  %626 = getelementptr inbounds i8, ptr %136, i64 2
  store ptr %626, ptr %21, align 8, !tbaa !10
  %627 = call i64 @strspn(ptr noundef nonnull %626, ptr noundef nonnull @.str) #11
  %628 = getelementptr inbounds i8, ptr %626, i64 %627
  store ptr %628, ptr %21, align 8, !tbaa !10
  %629 = load i8, ptr %628, align 1, !tbaa !5
  switch i8 %629, label %630 [
    i8 0, label %.thread409.thread
    i8 13, label %.thread409.thread
  ], !llvm.loop !8

630:                                              ; preds = %625
  %631 = getelementptr inbounds i8, ptr %628, i64 1
  %632 = load i8, ptr %631, align 1, !tbaa !5
  %633 = icmp eq i8 %632, 10
  br i1 %633, label %.thread409.thread, label %634, !llvm.loop !8

634:                                              ; preds = %630
  %635 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %628) #11
  %636 = icmp ugt i64 %635, 2
  %637 = icmp eq i8 %629, 111
  %or.cond = and i1 %637, %636
  %638 = icmp eq i8 %632, 102
  %or.cond388 = and i1 %638, %or.cond
  br i1 %or.cond388, label %639, label %643

639:                                              ; preds = %634
  %640 = getelementptr inbounds i8, ptr %628, i64 2
  %641 = load i8, ptr %640, align 1, !tbaa !5
  %642 = icmp eq i8 %641, 102
  br i1 %642, label %.thread409.thread, label %643, !llvm.loop !8

643:                                              ; preds = %639, %634
  %644 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %21)
  %. = call i32 @llvm.smax.i32(i32 %644, i32 0)
  br label %.thread409.thread, !llvm.loop !8

.thread409.thread:                                ; preds = %138, %138, %159, %168, %178, %390, %550, %574, %620, %._crit_edge.thread, %399, %625, %625, %630, %639, %643, %622, %584, %552, %471, %470
  %.1167.ph = phi i8 [ %.0166.ph.ph, %470 ], [ %.0166.ph.ph, %471 ], [ %.0166.ph.ph, %552 ], [ %.0166.ph.ph, %584 ], [ %.0166.ph.ph, %622 ], [ %.0166.ph.ph, %643 ], [ %.0166.ph.ph, %639 ], [ %.0166.ph.ph, %630 ], [ %.0166.ph.ph, %625 ], [ %.0166.ph.ph, %625 ], [ %.0166.ph.ph, %399 ], [ %.0166.ph.ph, %._crit_edge.thread ], [ %.0166.ph.ph, %620 ], [ %.0166.ph.ph, %574 ], [ %.0166.ph.ph, %550 ], [ %.0166.ph.ph, %390 ], [ %.0166.ph.ph, %178 ], [ %.0166.ph.ph, %168 ], [ %150, %159 ], [ %.0166.ph.ph, %138 ], [ %.0166.ph.ph, %138 ]
  %.3149.ph = phi i32 [ %.0146.ph.ph, %470 ], [ %.0146.ph.ph, %471 ], [ %.0146.ph.ph, %552 ], [ %.0146.ph.ph, %584 ], [ %.0146.ph.ph, %622 ], [ %., %643 ], [ 0, %639 ], [ %.0146.ph.ph, %630 ], [ %.0146.ph.ph, %625 ], [ %.0146.ph.ph, %625 ], [ %.0146.ph.ph, %399 ], [ %.0146.ph.ph, %._crit_edge.thread ], [ %.0146.ph.ph, %620 ], [ %.0146.ph.ph, %574 ], [ %.0146.ph.ph, %550 ], [ %.0146.ph.ph, %390 ], [ %.0146.ph.ph, %178 ], [ %.0146.ph.ph, %168 ], [ %.0146.ph.ph, %159 ], [ %.0146.ph.ph, %138 ], [ %.0146.ph.ph, %138 ]
  %.2142.ph = phi i32 [ %.0140.ph.ph, %470 ], [ %.0140.ph.ph, %471 ], [ %.0140.ph.ph, %552 ], [ %.0140.ph.ph, %584 ], [ %.0140.ph.ph, %622 ], [ %.0140.ph.ph, %643 ], [ %.0140.ph.ph, %639 ], [ %.0140.ph.ph, %630 ], [ %.0140.ph.ph, %625 ], [ %.0140.ph.ph, %625 ], [ %.0140.ph.ph, %399 ], [ %.0140.ph.ph, %._crit_edge.thread ], [ %.0140.ph.ph, %620 ], [ %.0140.ph.ph, %574 ], [ %.0140.ph.ph, %550 ], [ %.1141, %390 ], [ %.0140.ph.ph, %178 ], [ %.0140.ph.ph, %168 ], [ %.0140.ph.ph, %159 ], [ %.0140.ph.ph, %138 ], [ %.0140.ph.ph, %138 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %.outer.outer, !llvm.loop !8

.thread409:                                       ; preds = %351, %289, %234
  %.7246 = phi i32 [ %.1240, %234 ], [ %.3242, %289 ], [ %.5244, %351 ]
  %.4164 = phi i32 [ %.0160.ph, %234 ], [ %.0160.ph, %289 ], [ %.1161, %351 ]
  %.4159 = phi i32 [ %.0155.ph, %234 ], [ %.0155.ph, %289 ], [ %.1156, %351 ]
  %.4154 = phi i32 [ %.0150.ph, %234 ], [ %.0150.ph, %289 ], [ %.1151, %351 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  %cond = icmp eq i32 %.7246, 2
  br i1 %cond, label %.outer, label %.loopexit, !llvm.loop !8

645:                                              ; preds = %564, %583, %479, %551, %621, %469, %392, %352, %290, %235, %179, %169, %157
  %.pn376 = phi { ptr, i32 } [ %158, %157 ], [ %170, %169 ], [ %180, %179 ], [ %.pn373.pn, %235 ], [ %.pn365.pn, %290 ], [ %.pn357.pn, %352 ], [ %.pn349.pn, %392 ], [ %.pn339.pn.pn.pn, %469 ], [ %.pn303.pn, %621 ], [ %.pn323.pn, %551 ], [ %480, %479 ], [ %.pn309.pn, %583 ], [ %565, %564 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %764

646:                                              ; preds = %101
  %647 = trunc nuw i8 %.0166.ph.ph to i1
  %brmerge389 = or i1 %647, %8
  br i1 %brmerge389, label %649, label %648

648:                                              ; preds = %646
  call void @_ZNSt6vectorIfSaIfEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  br label %649

649:                                              ; preds = %646, %648
  %650 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %651 = udiv i64 %650, 3
  %652 = trunc i64 %651 to i32
  %653 = icmp sge i32 %.0150.ph, %652
  %654 = icmp ne ptr %3, null
  %or.cond6 = and i1 %654, %653
  br i1 %or.cond6, label %655, label %680

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

656:                                              ; preds = %655
  %657 = getelementptr inbounds i8, ptr %74, i64 16
  %658 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %657, ptr noundef nonnull @.str.59)
          to label %659 unwind label %671

659:                                              ; preds = %656
  %660 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %658, i64 noundef %.0168)
          to label %661 unwind label %671

661:                                              ; preds = %659
  %662 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %660, ptr noundef nonnull @.str.47)
          to label %663 unwind label %671

663:                                              ; preds = %661
  %664 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %662, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %665 unwind label %671

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

666:                                              ; preds = %665
  %667 = 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) %75)
          to label %668 unwind label %675

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

669:                                              ; preds = %655
  %670 = landingpad { ptr, i32 }
          cleanup
  br label %679

671:                                              ; preds = %663, %661, %659, %656
  %672 = landingpad { ptr, i32 }
          cleanup
  br label %678

673:                                              ; preds = %665
  %674 = landingpad { ptr, i32 }
          cleanup
  br label %677

675:                                              ; preds = %666
  %676 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %677

677:                                              ; preds = %675, %673
  %.pn = phi { ptr, i32 } [ %676, %675 ], [ %674, %673 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #10
  br label %678

678:                                              ; preds = %677, %671
  %.pn.pn = phi { ptr, i32 } [ %.pn, %677 ], [ %672, %671 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %74) #10
  br label %679

679:                                              ; preds = %678, %669
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %678 ], [ %670, %669 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %74) #10
  br label %764

680:                                              ; preds = %668, %649
  %681 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %682 = udiv i64 %681, 3
  %683 = trunc i64 %682 to i32
  %684 = icmp sge i32 %.0155.ph, %683
  %or.cond8 = and i1 %654, %684
  br i1 %or.cond8, label %685, label %710

685:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %76) #10
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76)
          to label %686 unwind label %699

686:                                              ; preds = %685
  %687 = getelementptr inbounds i8, ptr %76, i64 16
  %688 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %687, ptr noundef nonnull @.str.60)
          to label %689 unwind label %701

689:                                              ; preds = %686
  %690 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %688, i64 noundef %.0168)
          to label %691 unwind label %701

691:                                              ; preds = %689
  %692 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %690, ptr noundef nonnull @.str.47)
          to label %693 unwind label %701

693:                                              ; preds = %691
  %694 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %692, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %695 unwind label %701

695:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #10
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 8 dereferenceable(128) %76)
          to label %696 unwind label %703

696:                                              ; preds = %695
  %697 = 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) %77)
          to label %698 unwind label %705

698:                                              ; preds = %696
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %76) #10
  br label %710

699:                                              ; preds = %685
  %700 = landingpad { ptr, i32 }
          cleanup
  br label %709

701:                                              ; preds = %693, %691, %689, %686
  %702 = landingpad { ptr, i32 }
          cleanup
  br label %708

703:                                              ; preds = %695
  %704 = landingpad { ptr, i32 }
          cleanup
  br label %707

705:                                              ; preds = %696
  %706 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #10
  br label %707

707:                                              ; preds = %705, %703
  %.pn285 = phi { ptr, i32 } [ %706, %705 ], [ %704, %703 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #10
  br label %708

708:                                              ; preds = %707, %701
  %.pn285.pn = phi { ptr, i32 } [ %.pn285, %707 ], [ %702, %701 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %76) #10
  br label %709

709:                                              ; preds = %708, %699
  %.pn285.pn.pn = phi { ptr, i32 } [ %.pn285.pn, %708 ], [ %700, %699 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %76) #10
  br label %764

710:                                              ; preds = %698, %680
  %711 = call noundef i64 @_ZNKSt6vectorIfSaIfEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %712 = lshr i64 %711, 1
  %713 = trunc i64 %712 to i32
  %714 = icmp sge i32 %.0160.ph, %713
  %or.cond10 = and i1 %654, %714
  br i1 %or.cond10, label %715, label %740

715:                                              ; preds = %710
  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 %716 unwind label %729

716:                                              ; preds = %715
  %717 = getelementptr inbounds i8, ptr %78, i64 16
  %718 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %717, ptr noundef nonnull @.str.61)
          to label %719 unwind label %731

719:                                              ; preds = %716
  %720 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %718, i64 noundef %.0168)
          to label %721 unwind label %731

721:                                              ; preds = %719
  %722 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %720, ptr noundef nonnull @.str.47)
          to label %723 unwind label %731

723:                                              ; preds = %721
  %724 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %722, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %725 unwind label %731

725:                                              ; preds = %723
  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 %726 unwind label %733

726:                                              ; preds = %725
  %727 = 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 %728 unwind label %735

728:                                              ; preds = %726
  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
  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 %740

729:                                              ; preds = %715
  %730 = landingpad { ptr, i32 }
          cleanup
  br label %739

731:                                              ; preds = %723, %721, %719, %716
  %732 = landingpad { ptr, i32 }
          cleanup
  br label %738

733:                                              ; preds = %725
  %734 = landingpad { ptr, i32 }
          cleanup
  br label %737

735:                                              ; preds = %726
  %736 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #10
  br label %737

737:                                              ; preds = %735, %733
  %.pn289 = phi { ptr, i32 } [ %736, %735 ], [ %734, %733 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #10
  br label %738

738:                                              ; preds = %737, %731
  %.pn289.pn = phi { ptr, i32 } [ %.pn289, %737 ], [ %732, %731 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %78) #10
  br label %739

739:                                              ; preds = %738, %729
  %.pn289.pn.pn = phi { ptr, i32 } [ %.pn289.pn, %738 ], [ %730, %729 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %78) #10
  br label %764

740:                                              ; preds = %728, %710
  %741 = invoke noundef zeroext i1 @_ZN7tinyobjL19exportGroupsToShapeEPNS_7shape_tERKNS_9PrimGroupERKSt6vectorINS_5tag_tESaIS6_EEiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbRKS5_IfSaIfEE(ptr noundef nonnull %19, ptr noundef nonnull align 8 dereferenceable(72) %16, ptr noundef nonnull align 8 dereferenceable(24) %15, i32 noundef %.0140.ph.ph, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext %7, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %742 unwind label %746

742:                                              ; preds = %740
  br i1 %741, label %745, label %743

743:                                              ; preds = %742
  %744 = call noundef i64 @_ZNKSt6vectorIN7tinyobj7index_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %93) #10
  %.not293 = icmp eq i64 %744, 0
  br i1 %.not293, label %748, label %745

745:                                              ; preds = %743, %742
  invoke void @_ZNSt6vectorIN7tinyobj7shape_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(224) %19)
          to label %748 unwind label %746

746:                                              ; preds = %745, %740
  %747 = landingpad { ptr, i32 }
          cleanup
  br label %764

748:                                              ; preds = %745, %743
  call void @_ZN7tinyobj9PrimGroup5clearEv(ptr noundef nonnull align 8 dereferenceable(72) %16)
  br i1 %.not352, label %758, label %749

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

750:                                              ; preds = %749
  %751 = 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) %80)
          to label %752 unwind label %755

752:                                              ; preds = %750
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #10
  br label %758

753:                                              ; preds = %749
  %754 = landingpad { ptr, i32 }
          cleanup
  br label %757

755:                                              ; preds = %750
  %756 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #10
  br label %757

757:                                              ; preds = %755, %753
  %.pn295 = phi { ptr, i32 } [ %756, %755 ], [ %754, %753 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %80) #10
  br label %764

758:                                              ; preds = %752, %748
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %759 = getelementptr inbounds i8, ptr %0, i64 24
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %759, ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %760 = getelementptr inbounds i8, ptr %0, i64 48
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %760, ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  %761 = getelementptr inbounds i8, ptr %0, i64 72
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %761, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %762 = getelementptr inbounds i8, ptr %0, i64 96
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %762, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %763 = getelementptr inbounds i8, ptr %0, i64 120
  call void @_ZNSt6vectorIfSaIfEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %763, ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  br label %.loopexit

.loopexit:                                        ; preds = %.thread409, %758
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %19) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %19) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %16) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %10) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %10) #10
  ret i1 %.not281

764:                                              ; preds = %746, %757, %739, %709, %679, %645, %117
  %.pn376.pn = phi { ptr, i32 } [ %.pn376, %645 ], [ %118, %117 ], [ %.pn289.pn.pn, %739 ], [ %.pn285.pn.pn, %709 ], [ %.pn.pn.pn, %679 ], [ %.pn295, %757 ], [ %747, %746 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #10
  call void @_ZN7tinyobj7shape_tD2Ev(ptr noundef nonnull align 8 dereferenceable(224) %19) #10
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %19) #10
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %18) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #10
  call void @_ZN7tinyobj9PrimGroupD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %16) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %16) #10
  call void @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %10) #10
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %10) #10
  resume { ptr, i32 } %.pn376.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 @_ZNSt6vectorIN7tinyobj5tag_tESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #9

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !11, i64 0}
!11 = !{!"any pointer", !6, i64 0}
!12 = !{!13, !14, i64 0}
!13 = !{!"_ZTSN7tinyobj6face_tE", !14, i64 0, !14, i64 4, !15, i64 8}
!14 = !{!"int", !6, i64 0}
!15 = !{!"_ZTSSt6vectorIN7tinyobj14vertex_index_tESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN7tinyobj14vertex_index_tESaIS1_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!19 = !{!20, !14, i64 32}
!20 = !{!"_ZTSSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiE", !21, i64 0, !14, i64 32}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !22, i64 0, !23, i64 8, !6, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!23 = !{!"long", !6, i64 0}
!24 = distinct !{!24, !9}
!25 = !{!26, !26, i64 0}
!26 = !{!"vtable pointer", !7, i64 0}
!27 = distinct !{!27, !9}
!28 = distinct !{!28, !9}
!29 = !{!14, !14, i64 0}
!30 = distinct !{!30, !9}
!31 = !{!32, !32, i64 0}
!32 = !{!"float", !6, i64 0}
!33 = distinct !{!33, !9}
!34 = distinct !{!34, !9}


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