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

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

%"struct.tinyobj::material_t" = type { %"class.std::__cxx11::basic_string", [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], float, float, float, i32, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", float, float, float, float, float, float, float, float, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", i32, %"class.std::map" }
%"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] }
%"struct.tinyobj::texture_option_t" = type { i32, float, float, float, [3 x float], [3 x float], [3 x float], i32, i8, i8, i8, i8, float, %"class.std::__cxx11::basic_string" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::__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 }
%"struct.std::pair.8" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"struct.std::pair" = type <{ %"struct.std::_Rb_tree_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::allocator" = type { i8 }
%"struct.std::pair.18" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%"struct.std::pair.14" = type <{ %"struct.std::_Rb_tree_iterator.16", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator.16" = type { ptr }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [98 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_ = external hidden unnamed_addr constant [125 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #0 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.tinyobj::material_t", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %18 = alloca i64, align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"struct.std::pair.8", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"struct.std::pair", align 8
  %26 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca ptr, align 8
  %44 = alloca i64, align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"class.std::allocator", align 1
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator", align 1
  %49 = alloca %"struct.std::pair.18", align 8
  %50 = alloca %"struct.std::pair.14", align 8
  %51 = alloca %"struct.std::pair.8", align 8
  %52 = alloca i32, align 4
  %53 = alloca %"struct.std::pair", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1864, ptr %11) #8
  call void @_ZN7tinyobj10material_tC2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %11) #8
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef %11)
          to label %55 unwind label %75

55:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #8
  store i8 0, ptr %14, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #8
  store i8 0, ptr %15, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #8
  store i8 0, ptr %16, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 392, ptr %17) #8
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %17)
          to label %56 unwind label %79

56:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store i64 0, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %57

57:                                               ; preds = %1244, %1242, %127, %56
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %58)
          to label %60 unwind label %83

60:                                               ; preds = %57
  %61 = icmp ne i32 %59, -1
  br i1 %61, label %62, label %1246

62:                                               ; preds = %60
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %63, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %65 unwind label %83

65:                                               ; preds = %62
  %66 = load i64, ptr %18, align 8, !tbaa !11
  %67 = add i64 %66, 1
  store i64 %67, ptr %18, align 8, !tbaa !11
  %68 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %69 = icmp ugt i64 %68, 0
  br i1 %69, label %70, label %91

70:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #8
  %71 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16find_last_not_ofEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @.str, i64 noundef -1) #8
  %72 = add i64 %71, 1
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(32) %19, i64 noundef 0, i64 noundef %72)
          to label %73 unwind label %87

73:                                               ; preds = %70
  %74 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  br label %91

75:                                               ; preds = %5
  %76 = landingpad { ptr, i32 }
          cleanup
  %77 = extractvalue { ptr, i32 } %76, 0
  store ptr %77, ptr %12, align 8
  %78 = extractvalue { ptr, i32 } %76, 1
  store i32 %78, ptr %13, align 4
  br label %1283

79:                                               ; preds = %55
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %12, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %13, align 4
  br label %1282

83:                                               ; preds = %1254, %119, %111, %102, %94, %62, %57
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %12, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %13, align 4
  br label %1281

87:                                               ; preds = %70
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %12, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  br label %1281

91:                                               ; preds = %73, %65
  %92 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %93 = icmp ugt i64 %92, 0
  br i1 %93, label %94, label %108

94:                                               ; preds = %91
  %95 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %96 = sub i64 %95, 1
  %97 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %19, i64 noundef %96)
          to label %98 unwind label %83

98:                                               ; preds = %94
  %99 = load i8, ptr %97, align 1, !tbaa !13
  %100 = sext i8 %99 to i32
  %101 = icmp eq i32 %100, 10
  br i1 %101, label %102, label %107

102:                                              ; preds = %98
  %103 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %104 = sub i64 %103, 1
  %105 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %19, i64 noundef %104, i64 noundef -1)
          to label %106 unwind label %83

106:                                              ; preds = %102
  br label %107

107:                                              ; preds = %106, %98
  br label %108

108:                                              ; preds = %107, %91
  %109 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %110 = icmp ugt i64 %109, 0
  br i1 %110, label %111, label %125

111:                                              ; preds = %108
  %112 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %113 = sub i64 %112, 1
  %114 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %19, i64 noundef %113)
          to label %115 unwind label %83

115:                                              ; preds = %111
  %116 = load i8, ptr %114, align 1, !tbaa !13
  %117 = sext i8 %116 to i32
  %118 = icmp eq i32 %117, 13
  br i1 %118, label %119, label %124

119:                                              ; preds = %115
  %120 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %121 = sub i64 %120, 1
  %122 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %19, i64 noundef %121, i64 noundef -1)
          to label %123 unwind label %83

123:                                              ; preds = %119
  br label %124

124:                                              ; preds = %123, %115
  br label %125

125:                                              ; preds = %124, %108
  %126 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br i1 %126, label %127, label %128

127:                                              ; preds = %125
  br label %57, !llvm.loop !14

128:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %129 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  store ptr %129, ptr %21, align 8, !tbaa !5
  %130 = load ptr, ptr %21, align 8, !tbaa !5
  %131 = call i64 @strspn(ptr noundef %130, ptr noundef @.str) #9
  %132 = load ptr, ptr %21, align 8, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %132, i64 %131
  store ptr %133, ptr %21, align 8, !tbaa !5
  %134 = load ptr, ptr %21, align 8, !tbaa !5
  %135 = icmp ne ptr %134, null
  br i1 %135, label %136, label %137

136:                                              ; preds = %128
  br label %139

137:                                              ; preds = %128
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.16, i32 noundef 1999, ptr noundef @__PRETTY_FUNCTION__._ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_) #10
  unreachable

138:                                              ; No predecessors!
  br label %139

139:                                              ; preds = %138, %136
  %140 = load ptr, ptr %21, align 8, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %140, i64 0
  %142 = load i8, ptr %141, align 1, !tbaa !13
  %143 = sext i8 %142 to i32
  %144 = icmp eq i32 %143, 0
  br i1 %144, label %145, label %146

145:                                              ; preds = %139
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

146:                                              ; preds = %139
  %147 = load ptr, ptr %21, align 8, !tbaa !5
  %148 = getelementptr inbounds i8, ptr %147, i64 0
  %149 = load i8, ptr %148, align 1, !tbaa !13
  %150 = sext i8 %149 to i32
  %151 = icmp eq i32 %150, 35
  br i1 %151, label %152, label %153

152:                                              ; preds = %146
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

153:                                              ; preds = %146
  %154 = load ptr, ptr %21, align 8, !tbaa !5
  %155 = call i32 @strncmp(ptr noundef %154, ptr noundef @.str.17, i64 noundef 6) #9
  %156 = icmp eq i32 0, %155
  br i1 %156, label %157, label %226

157:                                              ; preds = %153
  %158 = load ptr, ptr %21, align 8, !tbaa !5
  %159 = getelementptr inbounds i8, ptr %158, i64 6
  %160 = load i8, ptr %159, align 1, !tbaa !13
  %161 = sext i8 %160 to i32
  %162 = icmp eq i32 %161, 32
  br i1 %162, label %169, label %163

163:                                              ; preds = %157
  %164 = load ptr, ptr %21, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %164, i64 6
  %166 = load i8, ptr %165, align 1, !tbaa !13
  %167 = sext i8 %166 to i32
  %168 = icmp eq i32 %167, 9
  br i1 %168, label %169, label %226

169:                                              ; preds = %163, %157
  %170 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  %171 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %170) #8
  br i1 %171, label %200, label %172

172:                                              ; preds = %169
  %173 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %23) #8
  %174 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %175 = load ptr, ptr %7, align 8, !tbaa !5
  %176 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %175) #8
  %177 = trunc i64 %176 to i32
  store i32 %177, ptr %24, align 4, !tbaa !16
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36) %23, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %178 unwind label %187

178:                                              ; preds = %172
  %179 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %173, ptr noundef nonnull align 8 dereferenceable(36) %23)
          to label %180 unwind label %191

180:                                              ; preds = %178
  %181 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 0
  %182 = extractvalue { ptr, i8 } %179, 0
  store ptr %182, ptr %181, align 8
  %183 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 1
  %184 = extractvalue { ptr, i8 } %179, 1
  store i8 %184, ptr %183, align 8
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %23) #8
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj10material_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %185, ptr noundef nonnull align 8 dereferenceable(1864) %11)
          to label %186 unwind label %196

186:                                              ; preds = %180
  br label %200

187:                                              ; preds = %172
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %12, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %13, align 4
  br label %195

191:                                              ; preds = %178
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %12, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %13, align 4
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %23) #8
  br label %195

195:                                              ; preds = %191, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %23) #8
  br label %1245

196:                                              ; preds = %1183, %1159, %1135, %1111, %1087, %1063, %1039, %1017, %1011, %987, %963, %939, %915, %891, %857, %833, %811, %789, %767, %745, %715, %685, %655, %625, %622, %620, %617, %615, %612, %609, %576, %574, %571, %569, %566, %563, %555, %531, %509, %438, %200, %180
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %12, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %13, align 4
  br label %1245

200:                                              ; preds = %186, %169
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef %11)
          to label %201 unwind label %196

201:                                              ; preds = %200
  store i8 0, ptr %14, align 1, !tbaa !9
  store i8 0, ptr %15, align 1, !tbaa !9
  %202 = load ptr, ptr %21, align 8, !tbaa !5
  %203 = getelementptr inbounds i8, ptr %202, i64 7
  store ptr %203, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 392, ptr %26) #8
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %26)
          to label %204 unwind label %212

204:                                              ; preds = %201
  %205 = getelementptr inbounds i8, ptr %26, i64 16
  %206 = load ptr, ptr %21, align 8, !tbaa !5
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %205, ptr noundef %206)
          to label %208 unwind label %216

208:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(128) %26)
          to label %209 unwind label %220

209:                                              ; preds = %208
  %210 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  %211 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %26) #8
  call void @llvm.lifetime.end.p0(i64 392, ptr %26) #8
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

212:                                              ; preds = %201
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %12, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %13, align 4
  br label %225

216:                                              ; preds = %204
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %12, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %13, align 4
  br label %224

220:                                              ; preds = %208
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %12, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  br label %224

224:                                              ; preds = %220, %216
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %26) #8
  br label %225

225:                                              ; preds = %224, %212
  call void @llvm.lifetime.end.p0(i64 392, ptr %26) #8
  br label %1245

226:                                              ; preds = %163, %153
  %227 = load ptr, ptr %21, align 8, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %227, i64 0
  %229 = load i8, ptr %228, align 1, !tbaa !13
  %230 = sext i8 %229 to i32
  %231 = icmp eq i32 %230, 75
  br i1 %231, label %232, label %267

232:                                              ; preds = %226
  %233 = load ptr, ptr %21, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %233, i64 1
  %235 = load i8, ptr %234, align 1, !tbaa !13
  %236 = sext i8 %235 to i32
  %237 = icmp eq i32 %236, 97
  br i1 %237, label %238, label %267

238:                                              ; preds = %232
  %239 = load ptr, ptr %21, align 8, !tbaa !5
  %240 = getelementptr inbounds i8, ptr %239, i64 2
  %241 = load i8, ptr %240, align 1, !tbaa !13
  %242 = sext i8 %241 to i32
  %243 = icmp eq i32 %242, 32
  br i1 %243, label %250, label %244

244:                                              ; preds = %238
  %245 = load ptr, ptr %21, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %245, i64 2
  %247 = load i8, ptr %246, align 1, !tbaa !13
  %248 = sext i8 %247 to i32
  %249 = icmp eq i32 %248, 9
  br i1 %249, label %250, label %267

250:                                              ; preds = %244, %238
  %251 = load ptr, ptr %21, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %251, i64 2
  store ptr %252, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %28, ptr noundef %29, ptr noundef %30, ptr noundef %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %253 unwind label %263

253:                                              ; preds = %250
  %254 = load float, ptr %28, align 4, !tbaa !18
  %255 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 1
  %256 = getelementptr inbounds [3 x float], ptr %255, i64 0, i64 0
  store float %254, ptr %256, align 8, !tbaa !18
  %257 = load float, ptr %29, align 4, !tbaa !18
  %258 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 1
  %259 = getelementptr inbounds [3 x float], ptr %258, i64 0, i64 1
  store float %257, ptr %259, align 4, !tbaa !18
  %260 = load float, ptr %30, align 4, !tbaa !18
  %261 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 1
  %262 = getelementptr inbounds [3 x float], ptr %261, i64 0, i64 2
  store float %260, ptr %262, align 8, !tbaa !18
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %1242

263:                                              ; preds = %250
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %12, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %1245

267:                                              ; preds = %244, %232, %226
  %268 = load ptr, ptr %21, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i64 0
  %270 = load i8, ptr %269, align 1, !tbaa !13
  %271 = sext i8 %270 to i32
  %272 = icmp eq i32 %271, 75
  br i1 %272, label %273, label %308

273:                                              ; preds = %267
  %274 = load ptr, ptr %21, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i64 1
  %276 = load i8, ptr %275, align 1, !tbaa !13
  %277 = sext i8 %276 to i32
  %278 = icmp eq i32 %277, 100
  br i1 %278, label %279, label %308

279:                                              ; preds = %273
  %280 = load ptr, ptr %21, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 2
  %282 = load i8, ptr %281, align 1, !tbaa !13
  %283 = sext i8 %282 to i32
  %284 = icmp eq i32 %283, 32
  br i1 %284, label %291, label %285

285:                                              ; preds = %279
  %286 = load ptr, ptr %21, align 8, !tbaa !5
  %287 = getelementptr inbounds i8, ptr %286, i64 2
  %288 = load i8, ptr %287, align 1, !tbaa !13
  %289 = sext i8 %288 to i32
  %290 = icmp eq i32 %289, 9
  br i1 %290, label %291, label %308

291:                                              ; preds = %285, %279
  %292 = load ptr, ptr %21, align 8, !tbaa !5
  %293 = getelementptr inbounds i8, ptr %292, i64 2
  store ptr %293, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %294 unwind label %304

294:                                              ; preds = %291
  %295 = load float, ptr %31, align 4, !tbaa !18
  %296 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %297 = getelementptr inbounds [3 x float], ptr %296, i64 0, i64 0
  store float %295, ptr %297, align 4, !tbaa !18
  %298 = load float, ptr %32, align 4, !tbaa !18
  %299 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %300 = getelementptr inbounds [3 x float], ptr %299, i64 0, i64 1
  store float %298, ptr %300, align 4, !tbaa !18
  %301 = load float, ptr %33, align 4, !tbaa !18
  %302 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %303 = getelementptr inbounds [3 x float], ptr %302, i64 0, i64 2
  store float %301, ptr %303, align 4, !tbaa !18
  store i8 1, ptr %16, align 1, !tbaa !9
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %1242

304:                                              ; preds = %291
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %12, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %1245

308:                                              ; preds = %285, %273, %267
  %309 = load ptr, ptr %21, align 8, !tbaa !5
  %310 = getelementptr inbounds i8, ptr %309, i64 0
  %311 = load i8, ptr %310, align 1, !tbaa !13
  %312 = sext i8 %311 to i32
  %313 = icmp eq i32 %312, 75
  br i1 %313, label %314, label %349

314:                                              ; preds = %308
  %315 = load ptr, ptr %21, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i64 1
  %317 = load i8, ptr %316, align 1, !tbaa !13
  %318 = sext i8 %317 to i32
  %319 = icmp eq i32 %318, 115
  br i1 %319, label %320, label %349

320:                                              ; preds = %314
  %321 = load ptr, ptr %21, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 2
  %323 = load i8, ptr %322, align 1, !tbaa !13
  %324 = sext i8 %323 to i32
  %325 = icmp eq i32 %324, 32
  br i1 %325, label %332, label %326

326:                                              ; preds = %320
  %327 = load ptr, ptr %21, align 8, !tbaa !5
  %328 = getelementptr inbounds i8, ptr %327, i64 2
  %329 = load i8, ptr %328, align 1, !tbaa !13
  %330 = sext i8 %329 to i32
  %331 = icmp eq i32 %330, 9
  br i1 %331, label %332, label %349

332:                                              ; preds = %326, %320
  %333 = load ptr, ptr %21, align 8, !tbaa !5
  %334 = getelementptr inbounds i8, ptr %333, i64 2
  store ptr %334, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %34, ptr noundef %35, ptr noundef %36, ptr noundef %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %335 unwind label %345

335:                                              ; preds = %332
  %336 = load float, ptr %34, align 4, !tbaa !18
  %337 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 3
  %338 = getelementptr inbounds [3 x float], ptr %337, i64 0, i64 0
  store float %336, ptr %338, align 8, !tbaa !18
  %339 = load float, ptr %35, align 4, !tbaa !18
  %340 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 3
  %341 = getelementptr inbounds [3 x float], ptr %340, i64 0, i64 1
  store float %339, ptr %341, align 4, !tbaa !18
  %342 = load float, ptr %36, align 4, !tbaa !18
  %343 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 3
  %344 = getelementptr inbounds [3 x float], ptr %343, i64 0, i64 2
  store float %342, ptr %344, align 8, !tbaa !18
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %1242

345:                                              ; preds = %332
  %346 = landingpad { ptr, i32 }
          cleanup
  %347 = extractvalue { ptr, i32 } %346, 0
  store ptr %347, ptr %12, align 8
  %348 = extractvalue { ptr, i32 } %346, 1
  store i32 %348, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %1245

349:                                              ; preds = %326, %314, %308
  %350 = load ptr, ptr %21, align 8, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %350, i64 0
  %352 = load i8, ptr %351, align 1, !tbaa !13
  %353 = sext i8 %352 to i32
  %354 = icmp eq i32 %353, 75
  br i1 %354, label %355, label %373

355:                                              ; preds = %349
  %356 = load ptr, ptr %21, align 8, !tbaa !5
  %357 = getelementptr inbounds i8, ptr %356, i64 1
  %358 = load i8, ptr %357, align 1, !tbaa !13
  %359 = sext i8 %358 to i32
  %360 = icmp eq i32 %359, 116
  br i1 %360, label %361, label %373

361:                                              ; preds = %355
  %362 = load ptr, ptr %21, align 8, !tbaa !5
  %363 = getelementptr inbounds i8, ptr %362, i64 2
  %364 = load i8, ptr %363, align 1, !tbaa !13
  %365 = sext i8 %364 to i32
  %366 = icmp eq i32 %365, 32
  br i1 %366, label %397, label %367

367:                                              ; preds = %361
  %368 = load ptr, ptr %21, align 8, !tbaa !5
  %369 = getelementptr inbounds i8, ptr %368, i64 2
  %370 = load i8, ptr %369, align 1, !tbaa !13
  %371 = sext i8 %370 to i32
  %372 = icmp eq i32 %371, 9
  br i1 %372, label %397, label %373

373:                                              ; preds = %367, %355, %349
  %374 = load ptr, ptr %21, align 8, !tbaa !5
  %375 = getelementptr inbounds i8, ptr %374, i64 0
  %376 = load i8, ptr %375, align 1, !tbaa !13
  %377 = sext i8 %376 to i32
  %378 = icmp eq i32 %377, 84
  br i1 %378, label %379, label %414

379:                                              ; preds = %373
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  %381 = getelementptr inbounds i8, ptr %380, i64 1
  %382 = load i8, ptr %381, align 1, !tbaa !13
  %383 = sext i8 %382 to i32
  %384 = icmp eq i32 %383, 102
  br i1 %384, label %385, label %414

385:                                              ; preds = %379
  %386 = load ptr, ptr %21, align 8, !tbaa !5
  %387 = getelementptr inbounds i8, ptr %386, i64 2
  %388 = load i8, ptr %387, align 1, !tbaa !13
  %389 = sext i8 %388 to i32
  %390 = icmp eq i32 %389, 32
  br i1 %390, label %397, label %391

391:                                              ; preds = %385
  %392 = load ptr, ptr %21, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i64 2
  %394 = load i8, ptr %393, align 1, !tbaa !13
  %395 = sext i8 %394 to i32
  %396 = icmp eq i32 %395, 9
  br i1 %396, label %397, label %414

397:                                              ; preds = %391, %385, %367, %361
  %398 = load ptr, ptr %21, align 8, !tbaa !5
  %399 = getelementptr inbounds i8, ptr %398, i64 2
  store ptr %399, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %37, ptr noundef %38, ptr noundef %39, ptr noundef %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %400 unwind label %410

400:                                              ; preds = %397
  %401 = load float, ptr %37, align 4, !tbaa !18
  %402 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 4
  %403 = getelementptr inbounds [3 x float], ptr %402, i64 0, i64 0
  store float %401, ptr %403, align 4, !tbaa !18
  %404 = load float, ptr %38, align 4, !tbaa !18
  %405 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 4
  %406 = getelementptr inbounds [3 x float], ptr %405, i64 0, i64 1
  store float %404, ptr %406, align 4, !tbaa !18
  %407 = load float, ptr %39, align 4, !tbaa !18
  %408 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 4
  %409 = getelementptr inbounds [3 x float], ptr %408, i64 0, i64 2
  store float %407, ptr %409, align 4, !tbaa !18
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %1242

410:                                              ; preds = %397
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %12, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %1245

414:                                              ; preds = %391, %379, %373
  %415 = load ptr, ptr %21, align 8, !tbaa !5
  %416 = getelementptr inbounds i8, ptr %415, i64 0
  %417 = load i8, ptr %416, align 1, !tbaa !13
  %418 = sext i8 %417 to i32
  %419 = icmp eq i32 %418, 78
  br i1 %419, label %420, label %444

420:                                              ; preds = %414
  %421 = load ptr, ptr %21, align 8, !tbaa !5
  %422 = getelementptr inbounds i8, ptr %421, i64 1
  %423 = load i8, ptr %422, align 1, !tbaa !13
  %424 = sext i8 %423 to i32
  %425 = icmp eq i32 %424, 105
  br i1 %425, label %426, label %444

426:                                              ; preds = %420
  %427 = load ptr, ptr %21, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i64 2
  %429 = load i8, ptr %428, align 1, !tbaa !13
  %430 = sext i8 %429 to i32
  %431 = icmp eq i32 %430, 32
  br i1 %431, label %438, label %432

432:                                              ; preds = %426
  %433 = load ptr, ptr %21, align 8, !tbaa !5
  %434 = getelementptr inbounds i8, ptr %433, i64 2
  %435 = load i8, ptr %434, align 1, !tbaa !13
  %436 = sext i8 %435 to i32
  %437 = icmp eq i32 %436, 9
  br i1 %437, label %438, label %444

438:                                              ; preds = %432, %426
  %439 = load ptr, ptr %21, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i64 2
  store ptr %440, ptr %21, align 8, !tbaa !5
  %441 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %442 unwind label %196

442:                                              ; preds = %438
  %443 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 7
  store float %441, ptr %443, align 8, !tbaa !20
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

444:                                              ; preds = %432, %420, %414
  %445 = load ptr, ptr %21, align 8, !tbaa !5
  %446 = getelementptr inbounds i8, ptr %445, i64 0
  %447 = load i8, ptr %446, align 1, !tbaa !13
  %448 = sext i8 %447 to i32
  %449 = icmp eq i32 %448, 75
  br i1 %449, label %450, label %485

450:                                              ; preds = %444
  %451 = load ptr, ptr %21, align 8, !tbaa !5
  %452 = getelementptr inbounds i8, ptr %451, i64 1
  %453 = load i8, ptr %452, align 1, !tbaa !13
  %454 = sext i8 %453 to i32
  %455 = icmp eq i32 %454, 101
  br i1 %455, label %456, label %485

456:                                              ; preds = %450
  %457 = load ptr, ptr %21, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 2
  %459 = load i8, ptr %458, align 1, !tbaa !13
  %460 = sext i8 %459 to i32
  %461 = icmp eq i32 %460, 32
  br i1 %461, label %468, label %462

462:                                              ; preds = %456
  %463 = load ptr, ptr %21, align 8, !tbaa !5
  %464 = getelementptr inbounds i8, ptr %463, i64 2
  %465 = load i8, ptr %464, align 1, !tbaa !13
  %466 = sext i8 %465 to i32
  %467 = icmp eq i32 %466, 9
  br i1 %467, label %468, label %485

468:                                              ; preds = %462, %456
  %469 = load ptr, ptr %21, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 2
  store ptr %470, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %40, ptr noundef %41, ptr noundef %42, ptr noundef %21, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %471 unwind label %481

471:                                              ; preds = %468
  %472 = load float, ptr %40, align 4, !tbaa !18
  %473 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 5
  %474 = getelementptr inbounds [3 x float], ptr %473, i64 0, i64 0
  store float %472, ptr %474, align 8, !tbaa !18
  %475 = load float, ptr %41, align 4, !tbaa !18
  %476 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 5
  %477 = getelementptr inbounds [3 x float], ptr %476, i64 0, i64 1
  store float %475, ptr %477, align 4, !tbaa !18
  %478 = load float, ptr %42, align 4, !tbaa !18
  %479 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 5
  %480 = getelementptr inbounds [3 x float], ptr %479, i64 0, i64 2
  store float %478, ptr %480, align 8, !tbaa !18
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %1242

481:                                              ; preds = %468
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %12, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %1245

485:                                              ; preds = %462, %450, %444
  %486 = load ptr, ptr %21, align 8, !tbaa !5
  %487 = getelementptr inbounds i8, ptr %486, i64 0
  %488 = load i8, ptr %487, align 1, !tbaa !13
  %489 = sext i8 %488 to i32
  %490 = icmp eq i32 %489, 78
  br i1 %490, label %491, label %515

491:                                              ; preds = %485
  %492 = load ptr, ptr %21, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 1
  %494 = load i8, ptr %493, align 1, !tbaa !13
  %495 = sext i8 %494 to i32
  %496 = icmp eq i32 %495, 115
  br i1 %496, label %497, label %515

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

503:                                              ; preds = %497
  %504 = load ptr, ptr %21, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 2
  %506 = load i8, ptr %505, align 1, !tbaa !13
  %507 = sext i8 %506 to i32
  %508 = icmp eq i32 %507, 9
  br i1 %508, label %509, label %515

509:                                              ; preds = %503, %497
  %510 = load ptr, ptr %21, align 8, !tbaa !5
  %511 = getelementptr inbounds i8, ptr %510, i64 2
  store ptr %511, ptr %21, align 8, !tbaa !5
  %512 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %513 unwind label %196

513:                                              ; preds = %509
  %514 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 6
  store float %512, ptr %514, align 4, !tbaa !34
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

515:                                              ; preds = %503, %491, %485
  %516 = load ptr, ptr %21, align 8, !tbaa !5
  %517 = call i32 @strncmp(ptr noundef %516, ptr noundef @.str.18, i64 noundef 5) #9
  %518 = icmp eq i32 0, %517
  br i1 %518, label %519, label %537

519:                                              ; preds = %515
  %520 = load ptr, ptr %21, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %520, i64 5
  %522 = load i8, ptr %521, align 1, !tbaa !13
  %523 = sext i8 %522 to i32
  %524 = icmp eq i32 %523, 32
  br i1 %524, label %531, label %525

525:                                              ; preds = %519
  %526 = load ptr, ptr %21, align 8, !tbaa !5
  %527 = getelementptr inbounds i8, ptr %526, i64 5
  %528 = load i8, ptr %527, align 1, !tbaa !13
  %529 = sext i8 %528 to i32
  %530 = icmp eq i32 %529, 9
  br i1 %530, label %531, label %537

531:                                              ; preds = %525, %519
  %532 = load ptr, ptr %21, align 8, !tbaa !5
  %533 = getelementptr inbounds i8, ptr %532, i64 6
  store ptr %533, ptr %21, align 8, !tbaa !5
  %534 = invoke noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef %21)
          to label %535 unwind label %196

535:                                              ; preds = %531
  %536 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 9
  store i32 %534, ptr %536, align 8, !tbaa !35
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

537:                                              ; preds = %525, %515
  %538 = load ptr, ptr %21, align 8, !tbaa !5
  %539 = getelementptr inbounds i8, ptr %538, i64 0
  %540 = load i8, ptr %539, align 1, !tbaa !13
  %541 = sext i8 %540 to i32
  %542 = icmp eq i32 %541, 100
  br i1 %542, label %543, label %580

543:                                              ; preds = %537
  %544 = load ptr, ptr %21, align 8, !tbaa !5
  %545 = getelementptr inbounds i8, ptr %544, i64 1
  %546 = load i8, ptr %545, align 1, !tbaa !13
  %547 = sext i8 %546 to i32
  %548 = icmp eq i32 %547, 32
  br i1 %548, label %555, label %549

549:                                              ; preds = %543
  %550 = load ptr, ptr %21, align 8, !tbaa !5
  %551 = getelementptr inbounds i8, ptr %550, i64 1
  %552 = load i8, ptr %551, align 1, !tbaa !13
  %553 = sext i8 %552 to i32
  %554 = icmp eq i32 %553, 9
  br i1 %554, label %555, label %580

555:                                              ; preds = %549, %543
  %556 = load ptr, ptr %21, align 8, !tbaa !5
  %557 = getelementptr inbounds i8, ptr %556, i64 1
  store ptr %557, ptr %21, align 8, !tbaa !5
  %558 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %559 unwind label %196

559:                                              ; preds = %555
  %560 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 8
  store float %558, ptr %560, align 4, !tbaa !36
  %561 = load i8, ptr %15, align 1, !tbaa !9, !range !37, !noundef !38
  %562 = trunc i8 %561 to i1
  br i1 %562, label %563, label %579

563:                                              ; preds = %559
  %564 = getelementptr inbounds i8, ptr %17, i64 16
  %565 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %564, ptr noundef @.str.19)
          to label %566 unwind label %196

566:                                              ; preds = %563
  %567 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  %568 = 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) %565, ptr noundef nonnull align 8 dereferenceable(32) %567)
          to label %569 unwind label %196

569:                                              ; preds = %566
  %570 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %568, ptr noundef @.str.20)
          to label %571 unwind label %196

571:                                              ; preds = %569
  %572 = load i64, ptr %18, align 8, !tbaa !11
  %573 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %570, i64 noundef %572)
          to label %574 unwind label %196

574:                                              ; preds = %571
  %575 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %573, ptr noundef @.str.21)
          to label %576 unwind label %196

576:                                              ; preds = %574
  %577 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %575, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %578 unwind label %196

578:                                              ; preds = %576
  br label %579

579:                                              ; preds = %578, %559
  store i8 1, ptr %14, align 1, !tbaa !9
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

580:                                              ; preds = %549, %537
  %581 = load ptr, ptr %21, align 8, !tbaa !5
  %582 = getelementptr inbounds i8, ptr %581, i64 0
  %583 = load i8, ptr %582, align 1, !tbaa !13
  %584 = sext i8 %583 to i32
  %585 = icmp eq i32 %584, 84
  br i1 %585, label %586, label %631

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

592:                                              ; preds = %586
  %593 = load ptr, ptr %21, align 8, !tbaa !5
  %594 = getelementptr inbounds i8, ptr %593, i64 2
  %595 = load i8, ptr %594, align 1, !tbaa !13
  %596 = sext i8 %595 to i32
  %597 = icmp eq i32 %596, 32
  br i1 %597, label %604, label %598

598:                                              ; preds = %592
  %599 = load ptr, ptr %21, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i64 2
  %601 = load i8, ptr %600, align 1, !tbaa !13
  %602 = sext i8 %601 to i32
  %603 = icmp eq i32 %602, 9
  br i1 %603, label %604, label %631

604:                                              ; preds = %598, %592
  %605 = load ptr, ptr %21, align 8, !tbaa !5
  %606 = getelementptr inbounds i8, ptr %605, i64 2
  store ptr %606, ptr %21, align 8, !tbaa !5
  %607 = load i8, ptr %14, align 1, !tbaa !9, !range !37, !noundef !38
  %608 = trunc i8 %607 to i1
  br i1 %608, label %609, label %625

609:                                              ; preds = %604
  %610 = getelementptr inbounds i8, ptr %17, i64 16
  %611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %610, ptr noundef @.str.19)
          to label %612 unwind label %196

612:                                              ; preds = %609
  %613 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  %614 = 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) %611, ptr noundef nonnull align 8 dereferenceable(32) %613)
          to label %615 unwind label %196

615:                                              ; preds = %612
  %616 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %614, ptr noundef @.str.20)
          to label %617 unwind label %196

617:                                              ; preds = %615
  %618 = load i64, ptr %18, align 8, !tbaa !11
  %619 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %616, i64 noundef %618)
          to label %620 unwind label %196

620:                                              ; preds = %617
  %621 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %619, ptr noundef @.str.21)
          to label %622 unwind label %196

622:                                              ; preds = %620
  %623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %621, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %624 unwind label %196

624:                                              ; preds = %622
  br label %630

625:                                              ; preds = %604
  %626 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %627 unwind label %196

627:                                              ; preds = %625
  %628 = fsub float 1.000000e+00, %626
  %629 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 8
  store float %628, ptr %629, align 4, !tbaa !36
  br label %630

630:                                              ; preds = %627, %624
  store i8 1, ptr %15, align 1, !tbaa !9
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

631:                                              ; preds = %598, %586, %580
  %632 = load ptr, ptr %21, align 8, !tbaa !5
  %633 = getelementptr inbounds i8, ptr %632, i64 0
  %634 = load i8, ptr %633, align 1, !tbaa !13
  %635 = sext i8 %634 to i32
  %636 = icmp eq i32 %635, 80
  br i1 %636, label %637, label %661

637:                                              ; preds = %631
  %638 = load ptr, ptr %21, align 8, !tbaa !5
  %639 = getelementptr inbounds i8, ptr %638, i64 1
  %640 = load i8, ptr %639, align 1, !tbaa !13
  %641 = sext i8 %640 to i32
  %642 = icmp eq i32 %641, 114
  br i1 %642, label %643, label %661

643:                                              ; preds = %637
  %644 = load ptr, ptr %21, align 8, !tbaa !5
  %645 = getelementptr inbounds i8, ptr %644, i64 2
  %646 = load i8, ptr %645, align 1, !tbaa !13
  %647 = sext i8 %646 to i32
  %648 = icmp eq i32 %647, 32
  br i1 %648, label %655, label %649

649:                                              ; preds = %643
  %650 = load ptr, ptr %21, align 8, !tbaa !5
  %651 = getelementptr inbounds i8, ptr %650, i64 2
  %652 = load i8, ptr %651, align 1, !tbaa !13
  %653 = sext i8 %652 to i32
  %654 = icmp eq i32 %653, 9
  br i1 %654, label %655, label %661

655:                                              ; preds = %649, %643
  %656 = load ptr, ptr %21, align 8, !tbaa !5
  %657 = getelementptr inbounds i8, ptr %656, i64 2
  store ptr %657, ptr %21, align 8, !tbaa !5
  %658 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %659 unwind label %196

659:                                              ; preds = %655
  %660 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 27
  store float %658, ptr %660, align 8, !tbaa !39
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

661:                                              ; preds = %649, %637, %631
  %662 = load ptr, ptr %21, align 8, !tbaa !5
  %663 = getelementptr inbounds i8, ptr %662, i64 0
  %664 = load i8, ptr %663, align 1, !tbaa !13
  %665 = sext i8 %664 to i32
  %666 = icmp eq i32 %665, 80
  br i1 %666, label %667, label %691

667:                                              ; preds = %661
  %668 = load ptr, ptr %21, align 8, !tbaa !5
  %669 = getelementptr inbounds i8, ptr %668, i64 1
  %670 = load i8, ptr %669, align 1, !tbaa !13
  %671 = sext i8 %670 to i32
  %672 = icmp eq i32 %671, 109
  br i1 %672, label %673, label %691

673:                                              ; preds = %667
  %674 = load ptr, ptr %21, align 8, !tbaa !5
  %675 = getelementptr inbounds i8, ptr %674, i64 2
  %676 = load i8, ptr %675, align 1, !tbaa !13
  %677 = sext i8 %676 to i32
  %678 = icmp eq i32 %677, 32
  br i1 %678, label %685, label %679

679:                                              ; preds = %673
  %680 = load ptr, ptr %21, align 8, !tbaa !5
  %681 = getelementptr inbounds i8, ptr %680, i64 2
  %682 = load i8, ptr %681, align 1, !tbaa !13
  %683 = sext i8 %682 to i32
  %684 = icmp eq i32 %683, 9
  br i1 %684, label %685, label %691

685:                                              ; preds = %679, %673
  %686 = load ptr, ptr %21, align 8, !tbaa !5
  %687 = getelementptr inbounds i8, ptr %686, i64 2
  store ptr %687, ptr %21, align 8, !tbaa !5
  %688 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %689 unwind label %196

689:                                              ; preds = %685
  %690 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 28
  store float %688, ptr %690, align 4, !tbaa !40
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

691:                                              ; preds = %679, %667, %661
  %692 = load ptr, ptr %21, align 8, !tbaa !5
  %693 = getelementptr inbounds i8, ptr %692, i64 0
  %694 = load i8, ptr %693, align 1, !tbaa !13
  %695 = sext i8 %694 to i32
  %696 = icmp eq i32 %695, 80
  br i1 %696, label %697, label %721

697:                                              ; preds = %691
  %698 = load ptr, ptr %21, align 8, !tbaa !5
  %699 = getelementptr inbounds i8, ptr %698, i64 1
  %700 = load i8, ptr %699, align 1, !tbaa !13
  %701 = sext i8 %700 to i32
  %702 = icmp eq i32 %701, 115
  br i1 %702, label %703, label %721

703:                                              ; preds = %697
  %704 = load ptr, ptr %21, align 8, !tbaa !5
  %705 = getelementptr inbounds i8, ptr %704, i64 2
  %706 = load i8, ptr %705, align 1, !tbaa !13
  %707 = sext i8 %706 to i32
  %708 = icmp eq i32 %707, 32
  br i1 %708, label %715, label %709

709:                                              ; preds = %703
  %710 = load ptr, ptr %21, align 8, !tbaa !5
  %711 = getelementptr inbounds i8, ptr %710, i64 2
  %712 = load i8, ptr %711, align 1, !tbaa !13
  %713 = sext i8 %712 to i32
  %714 = icmp eq i32 %713, 9
  br i1 %714, label %715, label %721

715:                                              ; preds = %709, %703
  %716 = load ptr, ptr %21, align 8, !tbaa !5
  %717 = getelementptr inbounds i8, ptr %716, i64 2
  store ptr %717, ptr %21, align 8, !tbaa !5
  %718 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %719 unwind label %196

719:                                              ; preds = %715
  %720 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 29
  store float %718, ptr %720, align 8, !tbaa !41
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

721:                                              ; preds = %709, %697, %691
  %722 = load ptr, ptr %21, align 8, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %722, i64 0
  %724 = load i8, ptr %723, align 1, !tbaa !13
  %725 = sext i8 %724 to i32
  %726 = icmp eq i32 %725, 80
  br i1 %726, label %727, label %751

727:                                              ; preds = %721
  %728 = load ptr, ptr %21, align 8, !tbaa !5
  %729 = getelementptr inbounds i8, ptr %728, i64 1
  %730 = load i8, ptr %729, align 1, !tbaa !13
  %731 = sext i8 %730 to i32
  %732 = icmp eq i32 %731, 99
  br i1 %732, label %733, label %751

733:                                              ; preds = %727
  %734 = load ptr, ptr %21, align 8, !tbaa !5
  %735 = getelementptr inbounds i8, ptr %734, i64 2
  %736 = load i8, ptr %735, align 1, !tbaa !13
  %737 = sext i8 %736 to i32
  %738 = icmp eq i32 %737, 32
  br i1 %738, label %745, label %739

739:                                              ; preds = %733
  %740 = load ptr, ptr %21, align 8, !tbaa !5
  %741 = getelementptr inbounds i8, ptr %740, i64 2
  %742 = load i8, ptr %741, align 1, !tbaa !13
  %743 = sext i8 %742 to i32
  %744 = icmp eq i32 %743, 9
  br i1 %744, label %745, label %751

745:                                              ; preds = %739, %733
  %746 = load ptr, ptr %21, align 8, !tbaa !5
  %747 = getelementptr inbounds i8, ptr %746, i64 2
  store ptr %747, ptr %21, align 8, !tbaa !5
  %748 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %749 unwind label %196

749:                                              ; preds = %745
  %750 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 30
  store float %748, ptr %750, align 4, !tbaa !42
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

751:                                              ; preds = %739, %727, %721
  %752 = load ptr, ptr %21, align 8, !tbaa !5
  %753 = call i32 @strncmp(ptr noundef %752, ptr noundef @.str.22, i64 noundef 3) #9
  %754 = icmp eq i32 0, %753
  br i1 %754, label %755, label %773

755:                                              ; preds = %751
  %756 = load ptr, ptr %21, align 8, !tbaa !5
  %757 = getelementptr inbounds i8, ptr %756, i64 3
  %758 = load i8, ptr %757, align 1, !tbaa !13
  %759 = sext i8 %758 to i32
  %760 = icmp eq i32 %759, 32
  br i1 %760, label %767, label %761

761:                                              ; preds = %755
  %762 = load ptr, ptr %21, align 8, !tbaa !5
  %763 = getelementptr inbounds i8, ptr %762, i64 3
  %764 = load i8, ptr %763, align 1, !tbaa !13
  %765 = sext i8 %764 to i32
  %766 = icmp eq i32 %765, 9
  br i1 %766, label %767, label %773

767:                                              ; preds = %761, %755
  %768 = load ptr, ptr %21, align 8, !tbaa !5
  %769 = getelementptr inbounds i8, ptr %768, i64 4
  store ptr %769, ptr %21, align 8, !tbaa !5
  %770 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %771 unwind label %196

771:                                              ; preds = %767
  %772 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 31
  store float %770, ptr %772, align 8, !tbaa !43
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

773:                                              ; preds = %761, %751
  %774 = load ptr, ptr %21, align 8, !tbaa !5
  %775 = call i32 @strncmp(ptr noundef %774, ptr noundef @.str.23, i64 noundef 5) #9
  %776 = icmp eq i32 0, %775
  br i1 %776, label %777, label %795

777:                                              ; preds = %773
  %778 = load ptr, ptr %21, align 8, !tbaa !5
  %779 = getelementptr inbounds i8, ptr %778, i64 5
  %780 = load i8, ptr %779, align 1, !tbaa !13
  %781 = sext i8 %780 to i32
  %782 = icmp eq i32 %781, 32
  br i1 %782, label %789, label %783

783:                                              ; preds = %777
  %784 = load ptr, ptr %21, align 8, !tbaa !5
  %785 = getelementptr inbounds i8, ptr %784, i64 5
  %786 = load i8, ptr %785, align 1, !tbaa !13
  %787 = sext i8 %786 to i32
  %788 = icmp eq i32 %787, 9
  br i1 %788, label %789, label %795

789:                                              ; preds = %783, %777
  %790 = load ptr, ptr %21, align 8, !tbaa !5
  %791 = getelementptr inbounds i8, ptr %790, i64 6
  store ptr %791, ptr %21, align 8, !tbaa !5
  %792 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %793 unwind label %196

793:                                              ; preds = %789
  %794 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 32
  store float %792, ptr %794, align 4, !tbaa !44
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

795:                                              ; preds = %783, %773
  %796 = load ptr, ptr %21, align 8, !tbaa !5
  %797 = call i32 @strncmp(ptr noundef %796, ptr noundef @.str.24, i64 noundef 6) #9
  %798 = icmp eq i32 0, %797
  br i1 %798, label %799, label %817

799:                                              ; preds = %795
  %800 = load ptr, ptr %21, align 8, !tbaa !5
  %801 = getelementptr inbounds i8, ptr %800, i64 6
  %802 = load i8, ptr %801, align 1, !tbaa !13
  %803 = sext i8 %802 to i32
  %804 = icmp eq i32 %803, 32
  br i1 %804, label %811, label %805

805:                                              ; preds = %799
  %806 = load ptr, ptr %21, align 8, !tbaa !5
  %807 = getelementptr inbounds i8, ptr %806, i64 6
  %808 = load i8, ptr %807, align 1, !tbaa !13
  %809 = sext i8 %808 to i32
  %810 = icmp eq i32 %809, 9
  br i1 %810, label %811, label %817

811:                                              ; preds = %805, %799
  %812 = load ptr, ptr %21, align 8, !tbaa !5
  %813 = getelementptr inbounds i8, ptr %812, i64 7
  store ptr %813, ptr %21, align 8, !tbaa !5
  %814 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %815 unwind label %196

815:                                              ; preds = %811
  %816 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 33
  store float %814, ptr %816, align 8, !tbaa !45
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

817:                                              ; preds = %805, %795
  %818 = load ptr, ptr %21, align 8, !tbaa !5
  %819 = call i32 @strncmp(ptr noundef %818, ptr noundef @.str.25, i64 noundef 6) #9
  %820 = icmp eq i32 0, %819
  br i1 %820, label %821, label %841

821:                                              ; preds = %817
  %822 = load ptr, ptr %21, align 8, !tbaa !5
  %823 = getelementptr inbounds i8, ptr %822, i64 6
  %824 = load i8, ptr %823, align 1, !tbaa !13
  %825 = sext i8 %824 to i32
  %826 = icmp eq i32 %825, 32
  br i1 %826, label %833, label %827

827:                                              ; preds = %821
  %828 = load ptr, ptr %21, align 8, !tbaa !5
  %829 = getelementptr inbounds i8, ptr %828, i64 6
  %830 = load i8, ptr %829, align 1, !tbaa !13
  %831 = sext i8 %830 to i32
  %832 = icmp eq i32 %831, 9
  br i1 %832, label %833, label %841

833:                                              ; preds = %827, %821
  %834 = load ptr, ptr %21, align 8, !tbaa !5
  %835 = getelementptr inbounds i8, ptr %834, i64 7
  store ptr %835, ptr %21, align 8, !tbaa !5
  %836 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 11
  %837 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 19
  %838 = load ptr, ptr %21, align 8, !tbaa !5
  %839 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %836, ptr noundef %837, ptr noundef %838)
          to label %840 unwind label %196

840:                                              ; preds = %833
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

841:                                              ; preds = %827, %817
  %842 = load ptr, ptr %21, align 8, !tbaa !5
  %843 = call i32 @strncmp(ptr noundef %842, ptr noundef @.str.26, i64 noundef 6) #9
  %844 = icmp eq i32 0, %843
  br i1 %844, label %845, label %875

845:                                              ; preds = %841
  %846 = load ptr, ptr %21, align 8, !tbaa !5
  %847 = getelementptr inbounds i8, ptr %846, i64 6
  %848 = load i8, ptr %847, align 1, !tbaa !13
  %849 = sext i8 %848 to i32
  %850 = icmp eq i32 %849, 32
  br i1 %850, label %857, label %851

851:                                              ; preds = %845
  %852 = load ptr, ptr %21, align 8, !tbaa !5
  %853 = getelementptr inbounds i8, ptr %852, i64 6
  %854 = load i8, ptr %853, align 1, !tbaa !13
  %855 = sext i8 %854 to i32
  %856 = icmp eq i32 %855, 9
  br i1 %856, label %857, label %875

857:                                              ; preds = %851, %845
  %858 = load ptr, ptr %21, align 8, !tbaa !5
  %859 = getelementptr inbounds i8, ptr %858, i64 7
  store ptr %859, ptr %21, align 8, !tbaa !5
  %860 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 12
  %861 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 20
  %862 = load ptr, ptr %21, align 8, !tbaa !5
  %863 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %860, ptr noundef %861, ptr noundef %862)
          to label %864 unwind label %196

864:                                              ; preds = %857
  %865 = load i8, ptr %16, align 1, !tbaa !9, !range !37, !noundef !38
  %866 = trunc i8 %865 to i1
  br i1 %866, label %874, label %867

867:                                              ; preds = %864
  %868 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %869 = getelementptr inbounds [3 x float], ptr %868, i64 0, i64 0
  store float 0x3FE3333340000000, ptr %869, align 4, !tbaa !18
  %870 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %871 = getelementptr inbounds [3 x float], ptr %870, i64 0, i64 1
  store float 0x3FE3333340000000, ptr %871, align 4, !tbaa !18
  %872 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 2
  %873 = getelementptr inbounds [3 x float], ptr %872, i64 0, i64 2
  store float 0x3FE3333340000000, ptr %873, align 4, !tbaa !18
  br label %874

874:                                              ; preds = %867, %864
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

875:                                              ; preds = %851, %841
  %876 = load ptr, ptr %21, align 8, !tbaa !5
  %877 = call i32 @strncmp(ptr noundef %876, ptr noundef @.str.27, i64 noundef 6) #9
  %878 = icmp eq i32 0, %877
  br i1 %878, label %879, label %899

879:                                              ; preds = %875
  %880 = load ptr, ptr %21, align 8, !tbaa !5
  %881 = getelementptr inbounds i8, ptr %880, i64 6
  %882 = load i8, ptr %881, align 1, !tbaa !13
  %883 = sext i8 %882 to i32
  %884 = icmp eq i32 %883, 32
  br i1 %884, label %891, label %885

885:                                              ; preds = %879
  %886 = load ptr, ptr %21, align 8, !tbaa !5
  %887 = getelementptr inbounds i8, ptr %886, i64 6
  %888 = load i8, ptr %887, align 1, !tbaa !13
  %889 = sext i8 %888 to i32
  %890 = icmp eq i32 %889, 9
  br i1 %890, label %891, label %899

891:                                              ; preds = %885, %879
  %892 = load ptr, ptr %21, align 8, !tbaa !5
  %893 = getelementptr inbounds i8, ptr %892, i64 7
  store ptr %893, ptr %21, align 8, !tbaa !5
  %894 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 13
  %895 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 21
  %896 = load ptr, ptr %21, align 8, !tbaa !5
  %897 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %894, ptr noundef %895, ptr noundef %896)
          to label %898 unwind label %196

898:                                              ; preds = %891
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

899:                                              ; preds = %885, %875
  %900 = load ptr, ptr %21, align 8, !tbaa !5
  %901 = call i32 @strncmp(ptr noundef %900, ptr noundef @.str.28, i64 noundef 6) #9
  %902 = icmp eq i32 0, %901
  br i1 %902, label %903, label %923

903:                                              ; preds = %899
  %904 = load ptr, ptr %21, align 8, !tbaa !5
  %905 = getelementptr inbounds i8, ptr %904, i64 6
  %906 = load i8, ptr %905, align 1, !tbaa !13
  %907 = sext i8 %906 to i32
  %908 = icmp eq i32 %907, 32
  br i1 %908, label %915, label %909

909:                                              ; preds = %903
  %910 = load ptr, ptr %21, align 8, !tbaa !5
  %911 = getelementptr inbounds i8, ptr %910, i64 6
  %912 = load i8, ptr %911, align 1, !tbaa !13
  %913 = sext i8 %912 to i32
  %914 = icmp eq i32 %913, 9
  br i1 %914, label %915, label %923

915:                                              ; preds = %909, %903
  %916 = load ptr, ptr %21, align 8, !tbaa !5
  %917 = getelementptr inbounds i8, ptr %916, i64 7
  store ptr %917, ptr %21, align 8, !tbaa !5
  %918 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 14
  %919 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 22
  %920 = load ptr, ptr %21, align 8, !tbaa !5
  %921 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %918, ptr noundef %919, ptr noundef %920)
          to label %922 unwind label %196

922:                                              ; preds = %915
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

923:                                              ; preds = %909, %899
  %924 = load ptr, ptr %21, align 8, !tbaa !5
  %925 = call i32 @strncmp(ptr noundef %924, ptr noundef @.str.29, i64 noundef 8) #9
  %926 = icmp eq i32 0, %925
  br i1 %926, label %927, label %947

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

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

939:                                              ; preds = %933, %927
  %940 = load ptr, ptr %21, align 8, !tbaa !5
  %941 = getelementptr inbounds i8, ptr %940, i64 9
  store ptr %941, ptr %21, align 8, !tbaa !5
  %942 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 15
  %943 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 23
  %944 = load ptr, ptr %21, align 8, !tbaa !5
  %945 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %942, ptr noundef %943, ptr noundef %944)
          to label %946 unwind label %196

946:                                              ; preds = %939
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

947:                                              ; preds = %933, %923
  %948 = load ptr, ptr %21, align 8, !tbaa !5
  %949 = call i32 @strncmp(ptr noundef %948, ptr noundef @.str.30, i64 noundef 8) #9
  %950 = icmp eq i32 0, %949
  br i1 %950, label %951, label %971

951:                                              ; preds = %947
  %952 = load ptr, ptr %21, align 8, !tbaa !5
  %953 = getelementptr inbounds i8, ptr %952, i64 8
  %954 = load i8, ptr %953, align 1, !tbaa !13
  %955 = sext i8 %954 to i32
  %956 = icmp eq i32 %955, 32
  br i1 %956, label %963, label %957

957:                                              ; preds = %951
  %958 = load ptr, ptr %21, align 8, !tbaa !5
  %959 = getelementptr inbounds i8, ptr %958, i64 8
  %960 = load i8, ptr %959, align 1, !tbaa !13
  %961 = sext i8 %960 to i32
  %962 = icmp eq i32 %961, 9
  br i1 %962, label %963, label %971

963:                                              ; preds = %957, %951
  %964 = load ptr, ptr %21, align 8, !tbaa !5
  %965 = getelementptr inbounds i8, ptr %964, i64 9
  store ptr %965, ptr %21, align 8, !tbaa !5
  %966 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 15
  %967 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 23
  %968 = load ptr, ptr %21, align 8, !tbaa !5
  %969 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %966, ptr noundef %967, ptr noundef %968)
          to label %970 unwind label %196

970:                                              ; preds = %963
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

971:                                              ; preds = %957, %947
  %972 = load ptr, ptr %21, align 8, !tbaa !5
  %973 = call i32 @strncmp(ptr noundef %972, ptr noundef @.str.31, i64 noundef 4) #9
  %974 = icmp eq i32 0, %973
  br i1 %974, label %975, label %995

975:                                              ; preds = %971
  %976 = load ptr, ptr %21, align 8, !tbaa !5
  %977 = getelementptr inbounds i8, ptr %976, i64 4
  %978 = load i8, ptr %977, align 1, !tbaa !13
  %979 = sext i8 %978 to i32
  %980 = icmp eq i32 %979, 32
  br i1 %980, label %987, label %981

981:                                              ; preds = %975
  %982 = load ptr, ptr %21, align 8, !tbaa !5
  %983 = getelementptr inbounds i8, ptr %982, i64 4
  %984 = load i8, ptr %983, align 1, !tbaa !13
  %985 = sext i8 %984 to i32
  %986 = icmp eq i32 %985, 9
  br i1 %986, label %987, label %995

987:                                              ; preds = %981, %975
  %988 = load ptr, ptr %21, align 8, !tbaa !5
  %989 = getelementptr inbounds i8, ptr %988, i64 5
  store ptr %989, ptr %21, align 8, !tbaa !5
  %990 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 15
  %991 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 23
  %992 = load ptr, ptr %21, align 8, !tbaa !5
  %993 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %990, ptr noundef %991, ptr noundef %992)
          to label %994 unwind label %196

994:                                              ; preds = %987
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

995:                                              ; preds = %981, %971
  %996 = load ptr, ptr %21, align 8, !tbaa !5
  %997 = call i32 @strncmp(ptr noundef %996, ptr noundef @.str.32, i64 noundef 5) #9
  %998 = icmp eq i32 0, %997
  br i1 %998, label %999, label %1023

999:                                              ; preds = %995
  %1000 = load ptr, ptr %21, align 8, !tbaa !5
  %1001 = getelementptr inbounds i8, ptr %1000, i64 5
  %1002 = load i8, ptr %1001, align 1, !tbaa !13
  %1003 = sext i8 %1002 to i32
  %1004 = icmp eq i32 %1003, 32
  br i1 %1004, label %1011, label %1005

1005:                                             ; preds = %999
  %1006 = load ptr, ptr %21, align 8, !tbaa !5
  %1007 = getelementptr inbounds i8, ptr %1006, i64 5
  %1008 = load i8, ptr %1007, align 1, !tbaa !13
  %1009 = sext i8 %1008 to i32
  %1010 = icmp eq i32 %1009, 9
  br i1 %1010, label %1011, label %1023

1011:                                             ; preds = %1005, %999
  %1012 = load ptr, ptr %21, align 8, !tbaa !5
  %1013 = getelementptr inbounds i8, ptr %1012, i64 6
  store ptr %1013, ptr %21, align 8, !tbaa !5
  %1014 = load ptr, ptr %21, align 8, !tbaa !5
  %1015 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 17
  %1016 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %1015, ptr noundef %1014)
          to label %1017 unwind label %196

1017:                                             ; preds = %1011
  %1018 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 17
  %1019 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 25
  %1020 = load ptr, ptr %21, align 8, !tbaa !5
  %1021 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1018, ptr noundef %1019, ptr noundef %1020)
          to label %1022 unwind label %196

1022:                                             ; preds = %1017
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1023:                                             ; preds = %1005, %995
  %1024 = load ptr, ptr %21, align 8, !tbaa !5
  %1025 = call i32 @strncmp(ptr noundef %1024, ptr noundef @.str.33, i64 noundef 4) #9
  %1026 = icmp eq i32 0, %1025
  br i1 %1026, label %1027, label %1047

1027:                                             ; preds = %1023
  %1028 = load ptr, ptr %21, align 8, !tbaa !5
  %1029 = getelementptr inbounds i8, ptr %1028, i64 4
  %1030 = load i8, ptr %1029, align 1, !tbaa !13
  %1031 = sext i8 %1030 to i32
  %1032 = icmp eq i32 %1031, 32
  br i1 %1032, label %1039, label %1033

1033:                                             ; preds = %1027
  %1034 = load ptr, ptr %21, align 8, !tbaa !5
  %1035 = getelementptr inbounds i8, ptr %1034, i64 4
  %1036 = load i8, ptr %1035, align 1, !tbaa !13
  %1037 = sext i8 %1036 to i32
  %1038 = icmp eq i32 %1037, 9
  br i1 %1038, label %1039, label %1047

1039:                                             ; preds = %1033, %1027
  %1040 = load ptr, ptr %21, align 8, !tbaa !5
  %1041 = getelementptr inbounds i8, ptr %1040, i64 5
  store ptr %1041, ptr %21, align 8, !tbaa !5
  %1042 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 16
  %1043 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 24
  %1044 = load ptr, ptr %21, align 8, !tbaa !5
  %1045 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1042, ptr noundef %1043, ptr noundef %1044)
          to label %1046 unwind label %196

1046:                                             ; preds = %1039
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1047:                                             ; preds = %1033, %1023
  %1048 = load ptr, ptr %21, align 8, !tbaa !5
  %1049 = call i32 @strncmp(ptr noundef %1048, ptr noundef @.str.34, i64 noundef 4) #9
  %1050 = icmp eq i32 0, %1049
  br i1 %1050, label %1051, label %1071

1051:                                             ; preds = %1047
  %1052 = load ptr, ptr %21, align 8, !tbaa !5
  %1053 = getelementptr inbounds i8, ptr %1052, i64 4
  %1054 = load i8, ptr %1053, align 1, !tbaa !13
  %1055 = sext i8 %1054 to i32
  %1056 = icmp eq i32 %1055, 32
  br i1 %1056, label %1063, label %1057

1057:                                             ; preds = %1051
  %1058 = load ptr, ptr %21, align 8, !tbaa !5
  %1059 = getelementptr inbounds i8, ptr %1058, i64 4
  %1060 = load i8, ptr %1059, align 1, !tbaa !13
  %1061 = sext i8 %1060 to i32
  %1062 = icmp eq i32 %1061, 9
  br i1 %1062, label %1063, label %1071

1063:                                             ; preds = %1057, %1051
  %1064 = load ptr, ptr %21, align 8, !tbaa !5
  %1065 = getelementptr inbounds i8, ptr %1064, i64 5
  store ptr %1065, ptr %21, align 8, !tbaa !5
  %1066 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 18
  %1067 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 26
  %1068 = load ptr, ptr %21, align 8, !tbaa !5
  %1069 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1066, ptr noundef %1067, ptr noundef %1068)
          to label %1070 unwind label %196

1070:                                             ; preds = %1063
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1071:                                             ; preds = %1057, %1047
  %1072 = load ptr, ptr %21, align 8, !tbaa !5
  %1073 = call i32 @strncmp(ptr noundef %1072, ptr noundef @.str.35, i64 noundef 6) #9
  %1074 = icmp eq i32 0, %1073
  br i1 %1074, label %1075, label %1095

1075:                                             ; preds = %1071
  %1076 = load ptr, ptr %21, align 8, !tbaa !5
  %1077 = getelementptr inbounds i8, ptr %1076, i64 6
  %1078 = load i8, ptr %1077, align 1, !tbaa !13
  %1079 = sext i8 %1078 to i32
  %1080 = icmp eq i32 %1079, 32
  br i1 %1080, label %1087, label %1081

1081:                                             ; preds = %1075
  %1082 = load ptr, ptr %21, align 8, !tbaa !5
  %1083 = getelementptr inbounds i8, ptr %1082, i64 6
  %1084 = load i8, ptr %1083, align 1, !tbaa !13
  %1085 = sext i8 %1084 to i32
  %1086 = icmp eq i32 %1085, 9
  br i1 %1086, label %1087, label %1095

1087:                                             ; preds = %1081, %1075
  %1088 = load ptr, ptr %21, align 8, !tbaa !5
  %1089 = getelementptr inbounds i8, ptr %1088, i64 7
  store ptr %1089, ptr %21, align 8, !tbaa !5
  %1090 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 35
  %1091 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 40
  %1092 = load ptr, ptr %21, align 8, !tbaa !5
  %1093 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1090, ptr noundef %1091, ptr noundef %1092)
          to label %1094 unwind label %196

1094:                                             ; preds = %1087
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1095:                                             ; preds = %1081, %1071
  %1096 = load ptr, ptr %21, align 8, !tbaa !5
  %1097 = call i32 @strncmp(ptr noundef %1096, ptr noundef @.str.36, i64 noundef 6) #9
  %1098 = icmp eq i32 0, %1097
  br i1 %1098, label %1099, label %1119

1099:                                             ; preds = %1095
  %1100 = load ptr, ptr %21, align 8, !tbaa !5
  %1101 = getelementptr inbounds i8, ptr %1100, i64 6
  %1102 = load i8, ptr %1101, align 1, !tbaa !13
  %1103 = sext i8 %1102 to i32
  %1104 = icmp eq i32 %1103, 32
  br i1 %1104, label %1111, label %1105

1105:                                             ; preds = %1099
  %1106 = load ptr, ptr %21, align 8, !tbaa !5
  %1107 = getelementptr inbounds i8, ptr %1106, i64 6
  %1108 = load i8, ptr %1107, align 1, !tbaa !13
  %1109 = sext i8 %1108 to i32
  %1110 = icmp eq i32 %1109, 9
  br i1 %1110, label %1111, label %1119

1111:                                             ; preds = %1105, %1099
  %1112 = load ptr, ptr %21, align 8, !tbaa !5
  %1113 = getelementptr inbounds i8, ptr %1112, i64 7
  store ptr %1113, ptr %21, align 8, !tbaa !5
  %1114 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 36
  %1115 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 41
  %1116 = load ptr, ptr %21, align 8, !tbaa !5
  %1117 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1114, ptr noundef %1115, ptr noundef %1116)
          to label %1118 unwind label %196

1118:                                             ; preds = %1111
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1119:                                             ; preds = %1105, %1095
  %1120 = load ptr, ptr %21, align 8, !tbaa !5
  %1121 = call i32 @strncmp(ptr noundef %1120, ptr noundef @.str.37, i64 noundef 6) #9
  %1122 = icmp eq i32 0, %1121
  br i1 %1122, label %1123, label %1143

1123:                                             ; preds = %1119
  %1124 = load ptr, ptr %21, align 8, !tbaa !5
  %1125 = getelementptr inbounds i8, ptr %1124, i64 6
  %1126 = load i8, ptr %1125, align 1, !tbaa !13
  %1127 = sext i8 %1126 to i32
  %1128 = icmp eq i32 %1127, 32
  br i1 %1128, label %1135, label %1129

1129:                                             ; preds = %1123
  %1130 = load ptr, ptr %21, align 8, !tbaa !5
  %1131 = getelementptr inbounds i8, ptr %1130, i64 6
  %1132 = load i8, ptr %1131, align 1, !tbaa !13
  %1133 = sext i8 %1132 to i32
  %1134 = icmp eq i32 %1133, 9
  br i1 %1134, label %1135, label %1143

1135:                                             ; preds = %1129, %1123
  %1136 = load ptr, ptr %21, align 8, !tbaa !5
  %1137 = getelementptr inbounds i8, ptr %1136, i64 7
  store ptr %1137, ptr %21, align 8, !tbaa !5
  %1138 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 37
  %1139 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 42
  %1140 = load ptr, ptr %21, align 8, !tbaa !5
  %1141 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1138, ptr noundef %1139, ptr noundef %1140)
          to label %1142 unwind label %196

1142:                                             ; preds = %1135
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1143:                                             ; preds = %1129, %1119
  %1144 = load ptr, ptr %21, align 8, !tbaa !5
  %1145 = call i32 @strncmp(ptr noundef %1144, ptr noundef @.str.38, i64 noundef 6) #9
  %1146 = icmp eq i32 0, %1145
  br i1 %1146, label %1147, label %1167

1147:                                             ; preds = %1143
  %1148 = load ptr, ptr %21, align 8, !tbaa !5
  %1149 = getelementptr inbounds i8, ptr %1148, i64 6
  %1150 = load i8, ptr %1149, align 1, !tbaa !13
  %1151 = sext i8 %1150 to i32
  %1152 = icmp eq i32 %1151, 32
  br i1 %1152, label %1159, label %1153

1153:                                             ; preds = %1147
  %1154 = load ptr, ptr %21, align 8, !tbaa !5
  %1155 = getelementptr inbounds i8, ptr %1154, i64 6
  %1156 = load i8, ptr %1155, align 1, !tbaa !13
  %1157 = sext i8 %1156 to i32
  %1158 = icmp eq i32 %1157, 9
  br i1 %1158, label %1159, label %1167

1159:                                             ; preds = %1153, %1147
  %1160 = load ptr, ptr %21, align 8, !tbaa !5
  %1161 = getelementptr inbounds i8, ptr %1160, i64 7
  store ptr %1161, ptr %21, align 8, !tbaa !5
  %1162 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 38
  %1163 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 43
  %1164 = load ptr, ptr %21, align 8, !tbaa !5
  %1165 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1162, ptr noundef %1163, ptr noundef %1164)
          to label %1166 unwind label %196

1166:                                             ; preds = %1159
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1167:                                             ; preds = %1153, %1143
  %1168 = load ptr, ptr %21, align 8, !tbaa !5
  %1169 = call i32 @strncmp(ptr noundef %1168, ptr noundef @.str.39, i64 noundef 4) #9
  %1170 = icmp eq i32 0, %1169
  br i1 %1170, label %1171, label %1191

1171:                                             ; preds = %1167
  %1172 = load ptr, ptr %21, align 8, !tbaa !5
  %1173 = getelementptr inbounds i8, ptr %1172, i64 4
  %1174 = load i8, ptr %1173, align 1, !tbaa !13
  %1175 = sext i8 %1174 to i32
  %1176 = icmp eq i32 %1175, 32
  br i1 %1176, label %1183, label %1177

1177:                                             ; preds = %1171
  %1178 = load ptr, ptr %21, align 8, !tbaa !5
  %1179 = getelementptr inbounds i8, ptr %1178, i64 4
  %1180 = load i8, ptr %1179, align 1, !tbaa !13
  %1181 = sext i8 %1180 to i32
  %1182 = icmp eq i32 %1181, 9
  br i1 %1182, label %1183, label %1191

1183:                                             ; preds = %1177, %1171
  %1184 = load ptr, ptr %21, align 8, !tbaa !5
  %1185 = getelementptr inbounds i8, ptr %1184, i64 5
  store ptr %1185, ptr %21, align 8, !tbaa !5
  %1186 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 39
  %1187 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 44
  %1188 = load ptr, ptr %21, align 8, !tbaa !5
  %1189 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1186, ptr noundef %1187, ptr noundef %1188)
          to label %1190 unwind label %196

1190:                                             ; preds = %1183
  store i32 2, ptr %22, align 4
  br label %1242, !llvm.loop !14

1191:                                             ; preds = %1177, %1167
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %1192 = load ptr, ptr %21, align 8, !tbaa !5
  %1193 = call noundef ptr @strchr(ptr noundef %1192, i32 noundef 32) #9
  store ptr %1193, ptr %43, align 8, !tbaa !5
  %1194 = load ptr, ptr %43, align 8, !tbaa !5
  %1195 = icmp ne ptr %1194, null
  br i1 %1195, label %1199, label %1196

1196:                                             ; preds = %1191
  %1197 = load ptr, ptr %21, align 8, !tbaa !5
  %1198 = call noundef ptr @strchr(ptr noundef %1197, i32 noundef 9) #9
  store ptr %1198, ptr %43, align 8, !tbaa !5
  br label %1199

1199:                                             ; preds = %1196, %1191
  %1200 = load ptr, ptr %43, align 8, !tbaa !5
  %1201 = icmp ne ptr %1200, null
  br i1 %1201, label %1202, label %1241

1202:                                             ; preds = %1199
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %1203 = load ptr, ptr %43, align 8, !tbaa !5
  %1204 = load ptr, ptr %21, align 8, !tbaa !5
  %1205 = ptrtoint ptr %1203 to i64
  %1206 = ptrtoint ptr %1204 to i64
  %1207 = sub i64 %1205, %1206
  store i64 %1207, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #8
  %1208 = load ptr, ptr %21, align 8, !tbaa !5
  %1209 = load i64, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef %1208, i64 noundef %1209, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %1210 unwind label %1222

1210:                                             ; preds = %1202
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %1211 = load ptr, ptr %43, align 8, !tbaa !5
  %1212 = getelementptr inbounds i8, ptr %1211, i64 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef %1212, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %1213 unwind label %1226

1213:                                             ; preds = %1210
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #8
  %1214 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 46
  call void @llvm.lifetime.start.p0(i64 64, ptr %49) #8
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(64) %49, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %1215 unwind label %1230

1215:                                             ; preds = %1213
  %1216 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE6insertIS8_IS5_S5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %1214, ptr noundef nonnull align 8 dereferenceable(64) %49)
          to label %1217 unwind label %1234

1217:                                             ; preds = %1215
  %1218 = getelementptr inbounds { ptr, i8 }, ptr %50, i32 0, i32 0
  %1219 = extractvalue { ptr, i8 } %1216, 0
  store ptr %1219, ptr %1218, align 8
  %1220 = getelementptr inbounds { ptr, i8 }, ptr %50, i32 0, i32 1
  %1221 = extractvalue { ptr, i8 } %1216, 1
  store i8 %1221, ptr %1220, align 8
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %49) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %1241

1222:                                             ; preds = %1202
  %1223 = landingpad { ptr, i32 }
          cleanup
  %1224 = extractvalue { ptr, i32 } %1223, 0
  store ptr %1224, ptr %12, align 8
  %1225 = extractvalue { ptr, i32 } %1223, 1
  store i32 %1225, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %46) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  br label %1240

1226:                                             ; preds = %1210
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %12, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #8
  br label %1239

1230:                                             ; preds = %1213
  %1231 = landingpad { ptr, i32 }
          cleanup
  %1232 = extractvalue { ptr, i32 } %1231, 0
  store ptr %1232, ptr %12, align 8
  %1233 = extractvalue { ptr, i32 } %1231, 1
  store i32 %1233, ptr %13, align 4
  br label %1238

1234:                                             ; preds = %1215
  %1235 = landingpad { ptr, i32 }
          cleanup
  %1236 = extractvalue { ptr, i32 } %1235, 0
  store ptr %1236, ptr %12, align 8
  %1237 = extractvalue { ptr, i32 } %1235, 1
  store i32 %1237, ptr %13, align 4
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %49) #8
  br label %1238

1238:                                             ; preds = %1234, %1230
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %1239

1239:                                             ; preds = %1238, %1226
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %1240

1240:                                             ; preds = %1239, %1222
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %1245

1241:                                             ; preds = %1217, %1199
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  store i32 0, ptr %22, align 4
  br label %1242

1242:                                             ; preds = %1241, %1190, %1166, %1142, %1118, %1094, %1070, %1046, %1022, %994, %970, %946, %922, %898, %874, %840, %815, %793, %771, %749, %719, %689, %659, %630, %579, %535, %513, %471, %442, %400, %335, %294, %253, %209, %152, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  %1243 = load i32, ptr %22, align 4
  switch i32 %1243, label %1289 [
    i32 0, label %1244
    i32 2, label %57
  ]

1244:                                             ; preds = %1242
  br label %57, !llvm.loop !14

1245:                                             ; preds = %1240, %481, %410, %345, %304, %263, %225, %196, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %1281

1246:                                             ; preds = %60
  %1247 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %51) #8
  %1248 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %1249 = load ptr, ptr %7, align 8, !tbaa !5
  %1250 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1249) #8
  %1251 = trunc i64 %1250 to i32
  store i32 %1251, ptr %52, align 4, !tbaa !16
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36) %51, ptr noundef nonnull align 8 dereferenceable(32) %1248, ptr noundef nonnull align 4 dereferenceable(4) %52)
          to label %1252 unwind label %1267

1252:                                             ; preds = %1246
  %1253 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %1247, ptr noundef nonnull align 8 dereferenceable(36) %51)
          to label %1254 unwind label %1271

1254:                                             ; preds = %1252
  %1255 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 0
  %1256 = extractvalue { ptr, i8 } %1253, 0
  store ptr %1256, ptr %1255, align 8
  %1257 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 1
  %1258 = extractvalue { ptr, i8 } %1253, 1
  store i8 %1258, ptr %1257, align 8
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %51) #8
  %1259 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj10material_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1259, ptr noundef nonnull align 8 dereferenceable(1864) %11)
          to label %1260 unwind label %83

1260:                                             ; preds = %1254
  %1261 = load ptr, ptr %9, align 8, !tbaa !5
  %1262 = icmp ne ptr %1261, null
  br i1 %1262, label %1263, label %1280

1263:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #8
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(128) %17)
          to label %1264 unwind label %1276

1264:                                             ; preds = %1263
  %1265 = load ptr, ptr %9, align 8, !tbaa !5
  %1266 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1265, ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  br label %1280

1267:                                             ; preds = %1246
  %1268 = landingpad { ptr, i32 }
          cleanup
  %1269 = extractvalue { ptr, i32 } %1268, 0
  store ptr %1269, ptr %12, align 8
  %1270 = extractvalue { ptr, i32 } %1268, 1
  store i32 %1270, ptr %13, align 4
  br label %1275

1271:                                             ; preds = %1252
  %1272 = landingpad { ptr, i32 }
          cleanup
  %1273 = extractvalue { ptr, i32 } %1272, 0
  store ptr %1273, ptr %12, align 8
  %1274 = extractvalue { ptr, i32 } %1272, 1
  store i32 %1274, ptr %13, align 4
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %51) #8
  br label %1275

1275:                                             ; preds = %1271, %1267
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %51) #8
  br label %1281

1276:                                             ; preds = %1263
  %1277 = landingpad { ptr, i32 }
          cleanup
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %12, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  br label %1281

1280:                                             ; preds = %1264, %1260
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %17) #8
  call void @llvm.lifetime.end.p0(i64 392, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  call void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %11) #8
  call void @llvm.lifetime.end.p0(i64 1864, ptr %11) #8
  ret void

1281:                                             ; preds = %1276, %1275, %1245, %87, %83
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %17) #8
  br label %1282

1282:                                             ; preds = %1281, %79
  call void @llvm.lifetime.end.p0(i64 392, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #8
  br label %1283

1283:                                             ; preds = %1282, %75
  call void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %11) #8
  call void @llvm.lifetime.end.p0(i64 1864, ptr %11) #8
  br label %1284

1284:                                             ; preds = %1283
  %1285 = load ptr, ptr %12, align 8
  %1286 = load i32, ptr %13, align 4
  %1287 = insertvalue { ptr, i32 } poison, ptr %1285, 0
  %1288 = insertvalue { ptr, i32 } %1287, i32 %1286, 1
  resume { ptr, i32 } %1288

1289:                                             ; preds = %1242
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj10material_tC2Ev(ptr noundef nonnull align 8 dereferenceable(1864)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef) #0

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #0 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)) #0

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(36)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #2 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)) #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #0 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) #0 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)) #4

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

; Function Attrs: nounwind willreturn memory(read)
declare noundef ptr @strchr(ptr noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE6insertIS8_IS5_S5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(64)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864)) unnamed_addr #5 align 2

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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 = !{!"long", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!17, !17, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = !{!21, !19, i64 96}
!21 = !{!"_ZTSN7tinyobj10material_tE", !22, i64 0, !7, i64 32, !7, i64 44, !7, i64 56, !7, i64 68, !7, i64 80, !19, i64 92, !19, i64 96, !19, i64 100, !17, i64 104, !17, i64 108, !22, i64 112, !22, i64 144, !22, i64 176, !22, i64 208, !22, i64 240, !22, i64 272, !22, i64 304, !22, i64 336, !24, i64 368, !24, i64 464, !24, i64 560, !24, i64 656, !24, i64 752, !24, i64 848, !24, i64 944, !24, i64 1040, !19, i64 1136, !19, i64 1140, !19, i64 1144, !19, i64 1148, !19, i64 1152, !19, i64 1156, !19, i64 1160, !19, i64 1164, !22, i64 1168, !22, i64 1200, !22, i64 1232, !22, i64 1264, !22, i64 1296, !24, i64 1328, !24, i64 1424, !24, i64 1520, !24, i64 1616, !24, i64 1712, !17, i64 1808, !26, i64 1816}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !23, i64 0, !12, i64 8, !7, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!24 = !{!"_ZTSN7tinyobj16texture_option_tE", !25, i64 0, !19, i64 4, !19, i64 8, !19, i64 12, !7, i64 16, !7, i64 28, !7, i64 40, !17, i64 52, !10, i64 56, !7, i64 57, !10, i64 58, !10, i64 59, !19, i64 60, !22, i64 64}
!25 = !{!"_ZTSN7tinyobj14texture_type_tE", !7, i64 0}
!26 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE", !27, i64 0}
!27 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE", !28, i64 0}
!28 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !29, i64 0, !31, i64 8}
!29 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !30, i64 0}
!30 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!31 = !{!"_ZTSSt15_Rb_tree_header", !32, i64 0, !12, i64 32}
!32 = !{!"_ZTSSt18_Rb_tree_node_base", !33, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!33 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!34 = !{!21, !19, i64 92}
!35 = !{!21, !17, i64 104}
!36 = !{!21, !19, i64 100}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!21, !19, i64 1136}
!40 = !{!21, !19, i64 1140}
!41 = !{!21, !19, i64 1144}
!42 = !{!21, !19, i64 1148}
!43 = !{!21, !19, i64 1152}
!44 = !{!21, !19, i64 1156}
!45 = !{!21, !19, i64 1160}


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

%"struct.tinyobj::material_t" = type { %"class.std::__cxx11::basic_string", [3 x float], [3 x float], [3 x float], [3 x float], [3 x float], float, float, float, i32, i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", float, float, float, float, float, float, float, float, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", %"struct.tinyobj::texture_option_t", i32, %"class.std::map" }
%"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] }
%"struct.tinyobj::texture_option_t" = type { i32, float, float, float, [3 x float], [3 x float], [3 x float], i32, i8, i8, i8, i8, float, %"class.std::__cxx11::basic_string" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::__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 }
%"struct.std::pair.8" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.std::allocator" = type { i8 }
%"struct.std::pair.18" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [98 x i8], align 1
@__PRETTY_FUNCTION__._ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_ = external hidden unnamed_addr constant [125 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare 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 #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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 #0 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr nocapture noundef readnone %4) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"struct.tinyobj::material_t", align 8
  %7 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.std::pair.8", align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_stringstream", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %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 %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator", align 1
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca %"struct.std::pair.18", align 8
  %35 = alloca %"struct.std::pair.8", align 8
  %36 = alloca i32, align 4
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 1864, ptr nonnull %6) #8
  call void @_ZN7tinyobj10material_tC2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %6) #8
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef nonnull %6)
          to label %38 unwind label %108

38:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %7) #8
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %7)
          to label %39 unwind label %110

39:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %40 = getelementptr inbounds i8, ptr %13, i64 16
  %41 = getelementptr inbounds i8, ptr %6, i64 96
  %42 = getelementptr inbounds i8, ptr %6, i64 92
  %43 = getelementptr inbounds i8, ptr %6, i64 32
  %44 = getelementptr inbounds i8, ptr %6, i64 36
  %45 = getelementptr inbounds i8, ptr %6, i64 40
  %46 = getelementptr inbounds i8, ptr %6, i64 44
  %47 = getelementptr inbounds i8, ptr %6, i64 48
  %48 = getelementptr inbounds i8, ptr %6, i64 52
  %49 = getelementptr inbounds i8, ptr %6, i64 56
  %50 = getelementptr inbounds i8, ptr %6, i64 60
  %51 = getelementptr inbounds i8, ptr %6, i64 64
  %52 = getelementptr inbounds i8, ptr %6, i64 68
  %53 = getelementptr inbounds i8, ptr %6, i64 72
  %54 = getelementptr inbounds i8, ptr %6, i64 76
  %55 = getelementptr inbounds i8, ptr %6, i64 80
  %56 = getelementptr inbounds i8, ptr %6, i64 84
  %57 = getelementptr inbounds i8, ptr %6, i64 88
  %58 = getelementptr inbounds i8, ptr %6, i64 104
  %59 = getelementptr inbounds i8, ptr %6, i64 100
  %60 = getelementptr inbounds i8, ptr %7, i64 16
  %61 = getelementptr inbounds i8, ptr %6, i64 1136
  %62 = getelementptr inbounds i8, ptr %6, i64 1140
  %63 = getelementptr inbounds i8, ptr %6, i64 1144
  %64 = getelementptr inbounds i8, ptr %6, i64 1148
  %65 = getelementptr inbounds i8, ptr %6, i64 1152
  %66 = getelementptr inbounds i8, ptr %6, i64 1156
  %67 = getelementptr inbounds i8, ptr %6, i64 1160
  %68 = getelementptr inbounds i8, ptr %6, i64 112
  %69 = getelementptr inbounds i8, ptr %6, i64 368
  %70 = getelementptr inbounds i8, ptr %6, i64 144
  %71 = getelementptr inbounds i8, ptr %6, i64 464
  %72 = getelementptr inbounds i8, ptr %6, i64 176
  %73 = getelementptr inbounds i8, ptr %6, i64 560
  %74 = getelementptr inbounds i8, ptr %6, i64 208
  %75 = getelementptr inbounds i8, ptr %6, i64 656
  %76 = getelementptr inbounds i8, ptr %6, i64 240
  %77 = getelementptr inbounds i8, ptr %6, i64 752
  %78 = getelementptr inbounds i8, ptr %6, i64 304
  %79 = getelementptr inbounds i8, ptr %6, i64 944
  %80 = getelementptr inbounds i8, ptr %6, i64 272
  %81 = getelementptr inbounds i8, ptr %6, i64 848
  %82 = getelementptr inbounds i8, ptr %6, i64 336
  %83 = getelementptr inbounds i8, ptr %6, i64 1040
  %84 = getelementptr inbounds i8, ptr %6, i64 1168
  %85 = getelementptr inbounds i8, ptr %6, i64 1328
  %86 = getelementptr inbounds i8, ptr %6, i64 1200
  %87 = getelementptr inbounds i8, ptr %6, i64 1424
  %88 = getelementptr inbounds i8, ptr %6, i64 1232
  %89 = getelementptr inbounds i8, ptr %6, i64 1520
  %90 = getelementptr inbounds i8, ptr %6, i64 1264
  %91 = getelementptr inbounds i8, ptr %6, i64 1616
  %92 = getelementptr inbounds i8, ptr %6, i64 1296
  %93 = getelementptr inbounds i8, ptr %6, i64 1712
  %94 = getelementptr inbounds i8, ptr %6, i64 1816
  br label %.outer

.outer:                                           ; preds = %512, %39
  %.044.ph = phi i64 [ %101, %512 ], [ 0, %39 ]
  %.041.ph = phi i1 [ %.142, %512 ], [ false, %39 ]
  %.039.ph = phi i1 [ %.140, %512 ], [ false, %39 ]
  %.037.ph = phi i1 [ %.138, %512 ], [ false, %39 ]
  br label %95

95:                                               ; preds = %.outer, %138
  %.044 = phi i64 [ %101, %138 ], [ %.044.ph, %.outer ]
  %96 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %97 unwind label %.loopexit

97:                                               ; preds = %95
  %.not = icmp eq i32 %96, -1
  br i1 %.not, label %514, label %98

98:                                               ; preds = %97
  %99 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN7tinyobjL11safeGetlineERSiRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %100 unwind label %.loopexit

100:                                              ; preds = %98
  %101 = add i64 %.044, 1
  %102 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not85 = icmp eq i64 %102, 0
  br i1 %.not85, label %114, label %103

103:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  %104 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16find_last_not_ofEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str, i64 noundef -1) #8
  %105 = add i64 %104, 1
  invoke void @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6substrEmm(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(32) %8, i64 noundef 0, i64 noundef %105)
          to label %106 unwind label %112

106:                                              ; preds = %103
  %107 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %114

108:                                              ; preds = %5
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %534

110:                                              ; preds = %38
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %533

.loopexit:                                        ; preds = %95, %98, %122, %134
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %532

.loopexit.split-lp:                               ; preds = %519
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %532

112:                                              ; preds = %103
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %532

114:                                              ; preds = %106, %100
  %115 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not86 = icmp eq i64 %115, 0
  br i1 %.not86, label %126, label %116

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

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

126:                                              ; preds = %116, %122, %114
  %127 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not87 = icmp eq i64 %127, 0
  br i1 %.not87, label %138, label %128

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

134:                                              ; preds = %128
  %135 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %136 = add i64 %135, -1
  %137 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5eraseEmm(ptr noundef nonnull align 8 dereferenceable(32) %8, i64 noundef %136, i64 noundef -1)
          to label %138 unwind label %.loopexit

138:                                              ; preds = %128, %134, %126
  %139 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br i1 %139, label %95, label %140, !llvm.loop !8

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

144:                                              ; preds = %140
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.16, i32 noundef 1999, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7tinyobj7LoadMtlEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS6_ESaISt4pairIKS6_iEEEPSt6vectorINS_10material_tESaISG_EEPSiPS6_SL_) #10
  unreachable

145:                                              ; preds = %140
  %146 = load i8, ptr %143, align 1, !tbaa !5
  switch i8 %146, label %147 [
    i8 0, label %512
    i8 35, label %512
  ], !llvm.loop !8

147:                                              ; preds = %145
  %148 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.17, i64 noundef 6) #9
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %150, label %186

150:                                              ; preds = %147
  %151 = getelementptr inbounds i8, ptr %143, i64 6
  %152 = load i8, ptr %151, align 1, !tbaa !5
  switch i8 %152, label %186 [
    i8 32, label %153
    i8 9, label %153
  ]

153:                                              ; preds = %150, %150
  %154 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  br i1 %154, label %168, label %155

155:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %156 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %157 = trunc i64 %156 to i32
  store i32 %157, ptr %12, align 4, !tbaa !12
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36) %11, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %158 unwind label %161

158:                                              ; preds = %155
  %159 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 8 dereferenceable(36) %11)
          to label %160 unwind label %163

160:                                              ; preds = %158
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #8
  invoke void @_ZNSt6vectorIN7tinyobj10material_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(1864) %6)
          to label %168 unwind label %166

161:                                              ; preds = %155
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %165

163:                                              ; preds = %158
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %11) #8
  br label %165

165:                                              ; preds = %163, %161
  %.pn95 = phi { ptr, i32 } [ %164, %163 ], [ %162, %161 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #8
  br label %513

166:                                              ; preds = %.invoke144, %.invoke143, %.invoke142, %.invoke141, %.invoke140, %.invoke139, %.invoke, %425, %422, %371, %353, %343, %333, %325, %319, %313, %307, %295, %277, %260, %244, %168, %160
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %513

168:                                              ; preds = %160, %153
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef nonnull %6)
          to label %169 unwind label %166

169:                                              ; preds = %168
  %170 = load ptr, ptr %10, align 8, !tbaa !10
  %171 = getelementptr inbounds i8, ptr %170, i64 7
  store ptr %171, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 392, ptr nonnull %13) #8
  invoke void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128) %13)
          to label %172 unwind label %178

172:                                              ; preds = %169
  %173 = load ptr, ptr %10, align 8, !tbaa !10
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef %173)
          to label %175 unwind label %180

175:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(128) %13)
          to label %176 unwind label %182

176:                                              ; preds = %175
  %177 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %13) #8
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %13) #8
  br label %512, !llvm.loop !8

178:                                              ; preds = %169
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %185

180:                                              ; preds = %172
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %184

182:                                              ; preds = %175
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  br label %184

184:                                              ; preds = %182, %180
  %.pn97 = phi { ptr, i32 } [ %183, %182 ], [ %181, %180 ]
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %13) #8
  br label %185

185:                                              ; preds = %184, %178
  %.pn97.pn = phi { ptr, i32 } [ %.pn97, %184 ], [ %179, %178 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %13) #8
  br label %513

186:                                              ; preds = %150, %147
  switch i8 %146, label %.thread113 [
    i8 75, label %187
    i8 84, label %223
    i8 78, label %238
  ]

187:                                              ; preds = %186
  %188 = getelementptr inbounds i8, ptr %143, i64 1
  %189 = load i8, ptr %188, align 1, !tbaa !5
  switch i8 %189, label %.thread113 [
    i8 97, label %190
    i8 100, label %200
    i8 115, label %210
    i8 116, label %220
    i8 101, label %247
  ]

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

193:                                              ; preds = %190, %190
  store ptr %191, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %194 unwind label %198

194:                                              ; preds = %193
  %195 = load float, ptr %15, align 4, !tbaa !14
  store float %195, ptr %43, align 8, !tbaa !14
  %196 = load float, ptr %16, align 4, !tbaa !14
  store float %196, ptr %44, align 4, !tbaa !14
  %197 = load float, ptr %17, align 4, !tbaa !14
  store float %197, ptr %45, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  br label %512

198:                                              ; preds = %193
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  br label %513

200:                                              ; preds = %187
  %201 = getelementptr inbounds i8, ptr %143, i64 2
  %202 = load i8, ptr %201, align 1, !tbaa !5
  switch i8 %202, label %.thread113 [
    i8 32, label %203
    i8 9, label %203
  ]

203:                                              ; preds = %200, %200
  store ptr %201, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %204 unwind label %208

204:                                              ; preds = %203
  %205 = load float, ptr %18, align 4, !tbaa !14
  store float %205, ptr %46, align 4, !tbaa !14
  %206 = load float, ptr %19, align 4, !tbaa !14
  store float %206, ptr %47, align 8, !tbaa !14
  %207 = load float, ptr %20, align 4, !tbaa !14
  store float %207, ptr %48, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  br label %512

208:                                              ; preds = %203
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  br label %513

210:                                              ; preds = %187
  %211 = getelementptr inbounds i8, ptr %143, i64 2
  %212 = load i8, ptr %211, align 1, !tbaa !5
  switch i8 %212, label %.thread113 [
    i8 32, label %213
    i8 9, label %213
  ]

213:                                              ; preds = %210, %210
  store ptr %211, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %21, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %214 unwind label %218

214:                                              ; preds = %213
  %215 = load float, ptr %21, align 4, !tbaa !14
  store float %215, ptr %49, align 8, !tbaa !14
  %216 = load float, ptr %22, align 4, !tbaa !14
  store float %216, ptr %50, align 4, !tbaa !14
  %217 = load float, ptr %23, align 4, !tbaa !14
  store float %217, ptr %51, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  br label %512

218:                                              ; preds = %213
  %219 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  br label %513

220:                                              ; preds = %187
  %221 = getelementptr inbounds i8, ptr %143, i64 2
  %222 = load i8, ptr %221, align 1, !tbaa !5
  switch i8 %222, label %.thread113 [
    i8 32, label %230
    i8 9, label %230
  ]

223:                                              ; preds = %186
  %224 = getelementptr inbounds i8, ptr %143, i64 1
  %225 = load i8, ptr %224, align 1, !tbaa !5
  %226 = icmp eq i8 %225, 102
  br i1 %226, label %227, label %.thread113

227:                                              ; preds = %223
  %228 = getelementptr inbounds i8, ptr %143, i64 2
  %229 = load i8, ptr %228, align 1, !tbaa !5
  switch i8 %229, label %.thread113 [
    i8 32, label %230
    i8 9, label %230
  ]

230:                                              ; preds = %227, %227, %220, %220
  %231 = getelementptr inbounds i8, ptr %143, i64 2
  store ptr %231, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %26, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %232 unwind label %236

232:                                              ; preds = %230
  %233 = load float, ptr %24, align 4, !tbaa !14
  store float %233, ptr %52, align 4, !tbaa !14
  %234 = load float, ptr %25, align 4, !tbaa !14
  store float %234, ptr %53, align 8, !tbaa !14
  %235 = load float, ptr %26, align 4, !tbaa !14
  store float %235, ptr %54, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  br label %512

236:                                              ; preds = %230
  %237 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  br label %513

238:                                              ; preds = %186
  %239 = getelementptr inbounds i8, ptr %143, i64 1
  %240 = load i8, ptr %239, align 1, !tbaa !5
  switch i8 %240, label %.thread113 [
    i8 105, label %241
    i8 115, label %257
  ]

241:                                              ; preds = %238
  %242 = getelementptr inbounds i8, ptr %143, i64 2
  %243 = load i8, ptr %242, align 1, !tbaa !5
  switch i8 %243, label %.thread113 [
    i8 32, label %244
    i8 9, label %244
  ]

244:                                              ; preds = %241, %241
  store ptr %242, ptr %10, align 8, !tbaa !10
  %245 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %246 unwind label %166

246:                                              ; preds = %244
  store float %245, ptr %41, align 8, !tbaa !16
  br label %512, !llvm.loop !8

247:                                              ; preds = %187
  %248 = getelementptr inbounds i8, ptr %143, i64 2
  %249 = load i8, ptr %248, align 1, !tbaa !5
  switch i8 %249, label %.thread113 [
    i8 32, label %250
    i8 9, label %250
  ]

250:                                              ; preds = %247, %247
  store ptr %248, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %29, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %251 unwind label %255

251:                                              ; preds = %250
  %252 = load float, ptr %27, align 4, !tbaa !14
  store float %252, ptr %55, align 8, !tbaa !14
  %253 = load float, ptr %28, align 4, !tbaa !14
  store float %253, ptr %56, align 4, !tbaa !14
  %254 = load float, ptr %29, align 4, !tbaa !14
  store float %254, ptr %57, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #8
  br label %512

255:                                              ; preds = %250
  %256 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #8
  br label %513

257:                                              ; preds = %238
  %258 = getelementptr inbounds i8, ptr %143, i64 2
  %259 = load i8, ptr %258, align 1, !tbaa !5
  switch i8 %259, label %.thread113 [
    i8 32, label %260
    i8 9, label %260
  ]

260:                                              ; preds = %257, %257
  store ptr %258, ptr %10, align 8, !tbaa !10
  %261 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %262 unwind label %166

262:                                              ; preds = %260
  store float %261, ptr %42, align 4, !tbaa !32
  br label %512, !llvm.loop !8

.thread113:                                       ; preds = %238, %187, %210, %200, %190, %241, %220, %247, %186, %223, %227, %257
  %263 = phi i1 [ false, %257 ], [ true, %227 ], [ true, %223 ], [ false, %186 ], [ false, %247 ], [ false, %220 ], [ false, %241 ], [ false, %190 ], [ false, %200 ], [ false, %210 ], [ false, %187 ], [ false, %238 ]
  %264 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.18, i64 noundef 5) #9
  %265 = icmp eq i32 %264, 0
  br i1 %265, label %266, label %272

266:                                              ; preds = %.thread113
  %267 = getelementptr inbounds i8, ptr %143, i64 5
  %268 = load i8, ptr %267, align 1, !tbaa !5
  switch i8 %268, label %272 [
    i8 32, label %269
    i8 9, label %269
  ]

269:                                              ; preds = %266, %266
  %270 = getelementptr inbounds i8, ptr %143, i64 6
  store ptr %270, ptr %10, align 8, !tbaa !10
  %271 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %10)
  store i32 %271, ptr %58, align 8, !tbaa !33
  br label %512, !llvm.loop !8

272:                                              ; preds = %266, %.thread113
  %273 = icmp eq i8 %146, 100
  br i1 %273, label %274, label %280

274:                                              ; preds = %272
  %275 = getelementptr inbounds i8, ptr %143, i64 1
  %276 = load i8, ptr %275, align 1, !tbaa !5
  switch i8 %276, label %280 [
    i8 32, label %277
    i8 9, label %277
  ]

277:                                              ; preds = %274, %274
  store ptr %275, ptr %10, align 8, !tbaa !10
  %278 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %279 unwind label %166

279:                                              ; preds = %277
  store float %278, ptr %59, align 4, !tbaa !34
  br i1 %.039.ph, label %.invoke144, label %512, !llvm.loop !8

280:                                              ; preds = %274, %272
  br i1 %263, label %281, label %299

281:                                              ; preds = %280
  %282 = getelementptr inbounds i8, ptr %143, i64 1
  %283 = load i8, ptr %282, align 1, !tbaa !5
  %284 = icmp eq i8 %283, 114
  br i1 %284, label %285, label %299

285:                                              ; preds = %281
  %286 = getelementptr inbounds i8, ptr %143, i64 2
  %287 = load i8, ptr %286, align 1, !tbaa !5
  switch i8 %287, label %299 [
    i8 32, label %288
    i8 9, label %288
  ]

288:                                              ; preds = %285, %285
  store ptr %286, ptr %10, align 8, !tbaa !10
  br i1 %.037.ph, label %.invoke144, label %295

.invoke144:                                       ; preds = %288, %279
  %289 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull @.str.19)
          to label %.invoke143 unwind label %166

.invoke143:                                       ; preds = %.invoke144
  %290 = 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) %289, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %.invoke142 unwind label %166

.invoke142:                                       ; preds = %.invoke143
  %291 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull @.str.20)
          to label %.invoke141 unwind label %166

.invoke141:                                       ; preds = %.invoke142
  %292 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %291, i64 noundef %101)
          to label %.invoke140 unwind label %166

.invoke140:                                       ; preds = %.invoke141
  %293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %292, ptr noundef nonnull @.str.21)
          to label %.invoke139 unwind label %166

.invoke139:                                       ; preds = %.invoke140
  %294 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %293, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %512 unwind label %166, !llvm.loop !8

295:                                              ; preds = %288
  %296 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %297 unwind label %166

297:                                              ; preds = %295
  %298 = fsub float 1.000000e+00, %296
  store float %298, ptr %59, align 4, !tbaa !34
  br label %512, !llvm.loop !8

299:                                              ; preds = %285, %281, %280
  %300 = icmp eq i8 %146, 80
  br i1 %300, label %301, label %.thread137

301:                                              ; preds = %299
  %302 = getelementptr inbounds i8, ptr %143, i64 1
  %303 = load i8, ptr %302, align 1, !tbaa !5
  switch i8 %303, label %.thread137 [
    i8 114, label %304
    i8 109, label %310
    i8 115, label %316
    i8 99, label %322
  ]

304:                                              ; preds = %301
  %305 = getelementptr inbounds i8, ptr %143, i64 2
  %306 = load i8, ptr %305, align 1, !tbaa !5
  switch i8 %306, label %.thread137 [
    i8 32, label %307
    i8 9, label %307
  ]

307:                                              ; preds = %304, %304
  store ptr %305, ptr %10, align 8, !tbaa !10
  %308 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %309 unwind label %166

309:                                              ; preds = %307
  store float %308, ptr %61, align 8, !tbaa !35
  br label %512, !llvm.loop !8

310:                                              ; preds = %301
  %311 = getelementptr inbounds i8, ptr %143, i64 2
  %312 = load i8, ptr %311, align 1, !tbaa !5
  switch i8 %312, label %.thread137 [
    i8 32, label %313
    i8 9, label %313
  ]

313:                                              ; preds = %310, %310
  store ptr %311, ptr %10, align 8, !tbaa !10
  %314 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %315 unwind label %166

315:                                              ; preds = %313
  store float %314, ptr %62, align 4, !tbaa !36
  br label %512, !llvm.loop !8

316:                                              ; preds = %301
  %317 = getelementptr inbounds i8, ptr %143, i64 2
  %318 = load i8, ptr %317, align 1, !tbaa !5
  switch i8 %318, label %.thread137 [
    i8 32, label %319
    i8 9, label %319
  ]

319:                                              ; preds = %316, %316
  store ptr %317, ptr %10, align 8, !tbaa !10
  %320 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %321 unwind label %166

321:                                              ; preds = %319
  store float %320, ptr %63, align 8, !tbaa !37
  br label %512, !llvm.loop !8

322:                                              ; preds = %301
  %323 = getelementptr inbounds i8, ptr %143, i64 2
  %324 = load i8, ptr %323, align 1, !tbaa !5
  switch i8 %324, label %.thread137 [
    i8 32, label %325
    i8 9, label %325
  ]

325:                                              ; preds = %322, %322
  store ptr %323, ptr %10, align 8, !tbaa !10
  %326 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %327 unwind label %166

327:                                              ; preds = %325
  store float %326, ptr %64, align 4, !tbaa !38
  br label %512, !llvm.loop !8

.thread137:                                       ; preds = %301, %304, %310, %316, %299, %322
  %328 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.22, i64 noundef 3) #9
  %329 = icmp eq i32 %328, 0
  br i1 %329, label %330, label %337

330:                                              ; preds = %.thread137
  %331 = getelementptr inbounds i8, ptr %143, i64 3
  %332 = load i8, ptr %331, align 1, !tbaa !5
  switch i8 %332, label %337 [
    i8 32, label %333
    i8 9, label %333
  ]

333:                                              ; preds = %330, %330
  %334 = getelementptr inbounds i8, ptr %143, i64 4
  store ptr %334, ptr %10, align 8, !tbaa !10
  %335 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %336 unwind label %166

336:                                              ; preds = %333
  store float %335, ptr %65, align 8, !tbaa !39
  br label %512, !llvm.loop !8

337:                                              ; preds = %330, %.thread137
  %338 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 5) #9
  %339 = icmp eq i32 %338, 0
  br i1 %339, label %340, label %347

340:                                              ; preds = %337
  %341 = getelementptr inbounds i8, ptr %143, i64 5
  %342 = load i8, ptr %341, align 1, !tbaa !5
  switch i8 %342, label %347 [
    i8 32, label %343
    i8 9, label %343
  ]

343:                                              ; preds = %340, %340
  %344 = getelementptr inbounds i8, ptr %143, i64 6
  store ptr %344, ptr %10, align 8, !tbaa !10
  %345 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %346 unwind label %166

346:                                              ; preds = %343
  store float %345, ptr %66, align 4, !tbaa !40
  br label %512, !llvm.loop !8

347:                                              ; preds = %340, %337
  %348 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.24, i64 noundef 6) #9
  %349 = icmp eq i32 %348, 0
  br i1 %349, label %350, label %357

350:                                              ; preds = %347
  %351 = getelementptr inbounds i8, ptr %143, i64 6
  %352 = load i8, ptr %351, align 1, !tbaa !5
  switch i8 %352, label %357 [
    i8 32, label %353
    i8 9, label %353
  ]

353:                                              ; preds = %350, %350
  %354 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %354, ptr %10, align 8, !tbaa !10
  %355 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %356 unwind label %166

356:                                              ; preds = %353
  store float %355, ptr %67, align 8, !tbaa !41
  br label %512, !llvm.loop !8

357:                                              ; preds = %350, %347
  %358 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.25, i64 noundef 6) #9
  %359 = icmp eq i32 %358, 0
  br i1 %359, label %360, label %365

360:                                              ; preds = %357
  %361 = getelementptr inbounds i8, ptr %143, i64 6
  %362 = load i8, ptr %361, align 1, !tbaa !5
  switch i8 %362, label %365 [
    i8 32, label %363
    i8 9, label %363
  ]

363:                                              ; preds = %360, %360
  %364 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %364, ptr %10, align 8, !tbaa !10
  br label %.invoke

365:                                              ; preds = %360, %357
  %366 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.26, i64 noundef 6) #9
  %367 = icmp eq i32 %366, 0
  br i1 %367, label %368, label %376

368:                                              ; preds = %365
  %369 = getelementptr inbounds i8, ptr %143, i64 6
  %370 = load i8, ptr %369, align 1, !tbaa !5
  switch i8 %370, label %376 [
    i8 32, label %371
    i8 9, label %371
  ]

371:                                              ; preds = %368, %368
  %372 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %372, ptr %10, align 8, !tbaa !10
  %373 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %70, ptr noundef nonnull %71, ptr noundef nonnull %372)
          to label %374 unwind label %166

374:                                              ; preds = %371
  br i1 %.041.ph, label %512, label %375, !llvm.loop !8

375:                                              ; preds = %374
  store <2 x float> <float 0x3FE3333340000000, float 0x3FE3333340000000>, ptr %46, align 4, !tbaa !14
  store float 0x3FE3333340000000, ptr %48, align 4, !tbaa !14
  br label %512, !llvm.loop !8

376:                                              ; preds = %368, %365
  %377 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 6) #9
  %378 = icmp eq i32 %377, 0
  br i1 %378, label %379, label %384

379:                                              ; preds = %376
  %380 = getelementptr inbounds i8, ptr %143, i64 6
  %381 = load i8, ptr %380, align 1, !tbaa !5
  switch i8 %381, label %384 [
    i8 32, label %382
    i8 9, label %382
  ]

382:                                              ; preds = %379, %379
  %383 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %383, ptr %10, align 8, !tbaa !10
  br label %.invoke

384:                                              ; preds = %379, %376
  %385 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.28, i64 noundef 6) #9
  %386 = icmp eq i32 %385, 0
  br i1 %386, label %387, label %392

387:                                              ; preds = %384
  %388 = getelementptr inbounds i8, ptr %143, i64 6
  %389 = load i8, ptr %388, align 1, !tbaa !5
  switch i8 %389, label %392 [
    i8 32, label %390
    i8 9, label %390
  ]

390:                                              ; preds = %387, %387
  %391 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %391, ptr %10, align 8, !tbaa !10
  br label %.invoke

392:                                              ; preds = %387, %384
  %393 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.29, i64 noundef 8) #9
  %394 = icmp eq i32 %393, 0
  br i1 %394, label %395, label %400

395:                                              ; preds = %392
  %396 = getelementptr inbounds i8, ptr %143, i64 8
  %397 = load i8, ptr %396, align 1, !tbaa !5
  switch i8 %397, label %400 [
    i8 32, label %398
    i8 9, label %398
  ]

398:                                              ; preds = %395, %395
  %399 = getelementptr inbounds i8, ptr %143, i64 9
  store ptr %399, ptr %10, align 8, !tbaa !10
  br label %.invoke

400:                                              ; preds = %395, %392
  %401 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.30, i64 noundef 8) #9
  %402 = icmp eq i32 %401, 0
  br i1 %402, label %403, label %408

403:                                              ; preds = %400
  %404 = getelementptr inbounds i8, ptr %143, i64 8
  %405 = load i8, ptr %404, align 1, !tbaa !5
  switch i8 %405, label %408 [
    i8 32, label %406
    i8 9, label %406
  ]

406:                                              ; preds = %403, %403
  %407 = getelementptr inbounds i8, ptr %143, i64 9
  store ptr %407, ptr %10, align 8, !tbaa !10
  br label %.invoke

408:                                              ; preds = %403, %400
  %409 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.31, i64 noundef 4) #9
  %410 = icmp eq i32 %409, 0
  br i1 %410, label %411, label %416

411:                                              ; preds = %408
  %412 = getelementptr inbounds i8, ptr %143, i64 4
  %413 = load i8, ptr %412, align 1, !tbaa !5
  switch i8 %413, label %416 [
    i8 32, label %414
    i8 9, label %414
  ]

414:                                              ; preds = %411, %411
  %415 = getelementptr inbounds i8, ptr %143, i64 5
  store ptr %415, ptr %10, align 8, !tbaa !10
  br label %.invoke

416:                                              ; preds = %411, %408
  %417 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.32, i64 noundef 5) #9
  %418 = icmp eq i32 %417, 0
  br i1 %418, label %419, label %428

419:                                              ; preds = %416
  %420 = getelementptr inbounds i8, ptr %143, i64 5
  %421 = load i8, ptr %420, align 1, !tbaa !5
  switch i8 %421, label %428 [
    i8 32, label %422
    i8 9, label %422
  ]

422:                                              ; preds = %419, %419
  %423 = getelementptr inbounds i8, ptr %143, i64 6
  store ptr %423, ptr %10, align 8, !tbaa !10
  %424 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull %423)
          to label %425 unwind label %166

425:                                              ; preds = %422
  %426 = load ptr, ptr %10, align 8, !tbaa !10
  %427 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %78, ptr noundef nonnull %79, ptr noundef %426)
          to label %512 unwind label %166, !llvm.loop !8

428:                                              ; preds = %419, %416
  %429 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.33, i64 noundef 4) #9
  %430 = icmp eq i32 %429, 0
  br i1 %430, label %431, label %436

431:                                              ; preds = %428
  %432 = getelementptr inbounds i8, ptr %143, i64 4
  %433 = load i8, ptr %432, align 1, !tbaa !5
  switch i8 %433, label %436 [
    i8 32, label %434
    i8 9, label %434
  ]

434:                                              ; preds = %431, %431
  %435 = getelementptr inbounds i8, ptr %143, i64 5
  store ptr %435, ptr %10, align 8, !tbaa !10
  br label %.invoke

436:                                              ; preds = %431, %428
  %437 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.34, i64 noundef 4) #9
  %438 = icmp eq i32 %437, 0
  br i1 %438, label %439, label %444

439:                                              ; preds = %436
  %440 = getelementptr inbounds i8, ptr %143, i64 4
  %441 = load i8, ptr %440, align 1, !tbaa !5
  switch i8 %441, label %444 [
    i8 32, label %442
    i8 9, label %442
  ]

442:                                              ; preds = %439, %439
  %443 = getelementptr inbounds i8, ptr %143, i64 5
  store ptr %443, ptr %10, align 8, !tbaa !10
  br label %.invoke

444:                                              ; preds = %439, %436
  %445 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.35, i64 noundef 6) #9
  %446 = icmp eq i32 %445, 0
  br i1 %446, label %447, label %452

447:                                              ; preds = %444
  %448 = getelementptr inbounds i8, ptr %143, i64 6
  %449 = load i8, ptr %448, align 1, !tbaa !5
  switch i8 %449, label %452 [
    i8 32, label %450
    i8 9, label %450
  ]

450:                                              ; preds = %447, %447
  %451 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %451, ptr %10, align 8, !tbaa !10
  br label %.invoke

452:                                              ; preds = %447, %444
  %453 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.36, i64 noundef 6) #9
  %454 = icmp eq i32 %453, 0
  br i1 %454, label %455, label %460

455:                                              ; preds = %452
  %456 = getelementptr inbounds i8, ptr %143, i64 6
  %457 = load i8, ptr %456, align 1, !tbaa !5
  switch i8 %457, label %460 [
    i8 32, label %458
    i8 9, label %458
  ]

458:                                              ; preds = %455, %455
  %459 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %459, ptr %10, align 8, !tbaa !10
  br label %.invoke

460:                                              ; preds = %455, %452
  %461 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.37, i64 noundef 6) #9
  %462 = icmp eq i32 %461, 0
  br i1 %462, label %463, label %468

463:                                              ; preds = %460
  %464 = getelementptr inbounds i8, ptr %143, i64 6
  %465 = load i8, ptr %464, align 1, !tbaa !5
  switch i8 %465, label %468 [
    i8 32, label %466
    i8 9, label %466
  ]

466:                                              ; preds = %463, %463
  %467 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %467, ptr %10, align 8, !tbaa !10
  br label %.invoke

468:                                              ; preds = %463, %460
  %469 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.38, i64 noundef 6) #9
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %471, label %476

471:                                              ; preds = %468
  %472 = getelementptr inbounds i8, ptr %143, i64 6
  %473 = load i8, ptr %472, align 1, !tbaa !5
  switch i8 %473, label %476 [
    i8 32, label %474
    i8 9, label %474
  ]

474:                                              ; preds = %471, %471
  %475 = getelementptr inbounds i8, ptr %143, i64 7
  store ptr %475, ptr %10, align 8, !tbaa !10
  br label %.invoke

476:                                              ; preds = %471, %468
  %477 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %143, ptr noundef nonnull dereferenceable(1) @.str.39, i64 noundef 4) #9
  %478 = icmp eq i32 %477, 0
  br i1 %478, label %479, label %488

479:                                              ; preds = %476
  %480 = getelementptr inbounds i8, ptr %143, i64 4
  %481 = load i8, ptr %480, align 1, !tbaa !5
  switch i8 %481, label %488 [
    i8 32, label %482
    i8 9, label %482
  ]

482:                                              ; preds = %479, %479
  %483 = getelementptr inbounds i8, ptr %143, i64 5
  store ptr %483, ptr %10, align 8, !tbaa !10
  br label %.invoke

.invoke:                                          ; preds = %363, %382, %390, %398, %406, %414, %434, %442, %450, %458, %466, %474, %482
  %484 = phi ptr [ %92, %482 ], [ %90, %474 ], [ %88, %466 ], [ %86, %458 ], [ %84, %450 ], [ %82, %442 ], [ %80, %434 ], [ %76, %414 ], [ %76, %406 ], [ %76, %398 ], [ %74, %390 ], [ %72, %382 ], [ %68, %363 ]
  %485 = phi ptr [ %93, %482 ], [ %91, %474 ], [ %89, %466 ], [ %87, %458 ], [ %85, %450 ], [ %83, %442 ], [ %81, %434 ], [ %77, %414 ], [ %77, %406 ], [ %77, %398 ], [ %75, %390 ], [ %73, %382 ], [ %69, %363 ]
  %486 = phi ptr [ %483, %482 ], [ %475, %474 ], [ %467, %466 ], [ %459, %458 ], [ %451, %450 ], [ %443, %442 ], [ %435, %434 ], [ %415, %414 ], [ %407, %406 ], [ %399, %398 ], [ %391, %390 ], [ %383, %382 ], [ %364, %363 ]
  %487 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %484, ptr noundef nonnull %485, ptr noundef nonnull %486)
          to label %512 unwind label %166, !llvm.loop !8

488:                                              ; preds = %479, %476
  %489 = call noundef ptr @strchr(ptr noundef nonnull dereferenceable(1) %143, i32 noundef 32) #9
  %.not89 = icmp eq ptr %489, null
  br i1 %.not89, label %490, label %.thread123

490:                                              ; preds = %488
  %491 = call noundef ptr @strchr(ptr noundef nonnull dereferenceable(1) %143, i32 noundef 9) #9
  %.not90 = icmp eq ptr %491, null
  br i1 %.not90, label %512, label %.thread123

.thread123:                                       ; preds = %488, %490
  %.043126 = phi ptr [ %491, %490 ], [ %489, %488 ]
  %492 = ptrtoint ptr %.043126 to i64
  %493 = ptrtoint ptr %143 to i64
  %494 = sub i64 %492, %493
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %31) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull %143, i64 noundef %494, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %495 unwind label %501

495:                                              ; preds = %.thread123
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #8
  %496 = getelementptr inbounds i8, ptr %.043126, i64 1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull %496, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %497 unwind label %503

497:                                              ; preds = %495
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %34) #8
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(64) %34, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %498 unwind label %505

498:                                              ; preds = %497
  %499 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE6insertIS8_IS5_S5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef nonnull align 8 dereferenceable(64) %34)
          to label %500 unwind label %507

500:                                              ; preds = %498
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %34) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  br label %512

501:                                              ; preds = %.thread123
  %502 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %31) #8
  br label %511

503:                                              ; preds = %495
  %504 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #8
  br label %510

505:                                              ; preds = %497
  %506 = landingpad { ptr, i32 }
          cleanup
  br label %509

507:                                              ; preds = %498
  %508 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %34) #8
  br label %509

509:                                              ; preds = %507, %505
  %.pn91 = phi { ptr, i32 } [ %508, %507 ], [ %506, %505 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %510

510:                                              ; preds = %509, %503
  %.pn91.pn = phi { ptr, i32 } [ %.pn91, %509 ], [ %504, %503 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %511

511:                                              ; preds = %510, %501
  %.pn91.pn.pn = phi { ptr, i32 } [ %.pn91.pn, %510 ], [ %502, %501 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  br label %513

512:                                              ; preds = %.invoke139, %.invoke, %490, %500, %425, %374, %375, %297, %279, %145, %145, %356, %346, %336, %327, %321, %315, %309, %269, %262, %251, %246, %232, %214, %204, %194, %176
  %.142 = phi i1 [ %.041.ph, %176 ], [ %.041.ph, %194 ], [ true, %204 ], [ %.041.ph, %214 ], [ %.041.ph, %232 ], [ %.041.ph, %246 ], [ %.041.ph, %251 ], [ %.041.ph, %262 ], [ %.041.ph, %269 ], [ %.041.ph, %309 ], [ %.041.ph, %315 ], [ %.041.ph, %321 ], [ %.041.ph, %327 ], [ %.041.ph, %336 ], [ %.041.ph, %346 ], [ %.041.ph, %356 ], [ %.041.ph, %145 ], [ %.041.ph, %145 ], [ %.041.ph, %279 ], [ %.041.ph, %297 ], [ false, %375 ], [ true, %374 ], [ %.041.ph, %425 ], [ %.041.ph, %500 ], [ %.041.ph, %490 ], [ %.041.ph, %.invoke ], [ %.041.ph, %.invoke139 ]
  %.140 = phi i1 [ false, %176 ], [ %.039.ph, %194 ], [ %.039.ph, %204 ], [ %.039.ph, %214 ], [ %.039.ph, %232 ], [ %.039.ph, %246 ], [ %.039.ph, %251 ], [ %.039.ph, %262 ], [ %.039.ph, %269 ], [ %.039.ph, %309 ], [ %.039.ph, %315 ], [ %.039.ph, %321 ], [ %.039.ph, %327 ], [ %.039.ph, %336 ], [ %.039.ph, %346 ], [ %.039.ph, %356 ], [ %.039.ph, %145 ], [ %.039.ph, %145 ], [ false, %279 ], [ true, %297 ], [ %.039.ph, %375 ], [ %.039.ph, %374 ], [ %.039.ph, %425 ], [ %.039.ph, %500 ], [ %.039.ph, %490 ], [ %.039.ph, %.invoke ], [ true, %.invoke139 ]
  %.138 = phi i1 [ false, %176 ], [ %.037.ph, %194 ], [ %.037.ph, %204 ], [ %.037.ph, %214 ], [ %.037.ph, %232 ], [ %.037.ph, %246 ], [ %.037.ph, %251 ], [ %.037.ph, %262 ], [ %.037.ph, %269 ], [ %.037.ph, %309 ], [ %.037.ph, %315 ], [ %.037.ph, %321 ], [ %.037.ph, %327 ], [ %.037.ph, %336 ], [ %.037.ph, %346 ], [ %.037.ph, %356 ], [ %.037.ph, %145 ], [ %.037.ph, %145 ], [ true, %279 ], [ false, %297 ], [ %.037.ph, %375 ], [ %.037.ph, %374 ], [ %.037.ph, %425 ], [ %.037.ph, %500 ], [ %.037.ph, %490 ], [ %.037.ph, %.invoke ], [ true, %.invoke139 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %.outer

513:                                              ; preds = %511, %255, %236, %218, %208, %198, %185, %166, %165
  %.pn97.pn.pn = phi { ptr, i32 } [ %.pn97.pn, %185 ], [ %167, %166 ], [ %.pn95, %165 ], [ %199, %198 ], [ %209, %208 ], [ %219, %218 ], [ %237, %236 ], [ %256, %255 ], [ %.pn91.pn.pn, %511 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %532

514:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #8
  %515 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %516 = trunc i64 %515 to i32
  store i32 %516, ptr %36, align 4, !tbaa !12
  invoke void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36) %35, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %517 unwind label %524

517:                                              ; preds = %514
  %518 = invoke { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 8 dereferenceable(36) %35)
          to label %519 unwind label %526

519:                                              ; preds = %517
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %35) #8
  invoke void @_ZNSt6vectorIN7tinyobj10material_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(1864) %6)
          to label %520 unwind label %.loopexit.split-lp

520:                                              ; preds = %519
  %.not84 = icmp eq ptr %3, null
  br i1 %.not84, label %531, label %521

521:                                              ; preds = %520
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  invoke void @_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(128) %7)
          to label %522 unwind label %529

522:                                              ; preds = %521
  %523 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %531

524:                                              ; preds = %514
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %528

526:                                              ; preds = %517
  %527 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %35) #8
  br label %528

528:                                              ; preds = %526, %524
  %.pn = phi { ptr, i32 } [ %527, %526 ], [ %525, %524 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %35) #8
  br label %532

529:                                              ; preds = %521
  %530 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %532

531:                                              ; preds = %522, %520
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %7) #8
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %7) #8
  call void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %6) #8
  call void @llvm.lifetime.end.p0(i64 1864, ptr nonnull %6) #8
  ret void

532:                                              ; preds = %.loopexit, %.loopexit.split-lp, %529, %528, %513, %112
  %.pn97.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn, %513 ], [ %113, %112 ], [ %530, %529 ], [ %.pn, %528 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  call void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128) %7) #8
  br label %533

533:                                              ; preds = %532, %110
  %.pn97.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn, %532 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 392, ptr nonnull %7) #8
  br label %534

534:                                              ; preds = %533, %108
  %.pn97.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn97.pn.pn.pn.pn, %533 ], [ %109, %108 ]
  call void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864) %6) #8
  call void @llvm.lifetime.end.p0(i64 1864, ptr nonnull %6) #8
  resume { ptr, i32 } %.pn97.pn.pn.pn.pn.pn
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj10material_tC2Ev(ptr noundef nonnull align 8 dereferenceable(1864)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #0 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 #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16find_last_not_ofEPKcm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef) local_unnamed_addr #2 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 #2 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 #0 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 #2 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 #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE6insertIS8_IS5_iEEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_iTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #5 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #2 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 #4

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare noundef ptr @strchr(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE6insertIS8_IS5_S5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(64)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 8 dereferenceable(64), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7tinyobj10material_tD2Ev(ptr noundef nonnull align 8 dereferenceable(1864)) unnamed_addr #5 align 2

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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, !13, i64 0}
!13 = !{!"int", !6, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !6, i64 0}
!16 = !{!17, !15, i64 96}
!17 = !{!"_ZTSN7tinyobj10material_tE", !18, i64 0, !6, i64 32, !6, i64 44, !6, i64 56, !6, i64 68, !6, i64 80, !15, i64 92, !15, i64 96, !15, i64 100, !13, i64 104, !13, i64 108, !18, i64 112, !18, i64 144, !18, i64 176, !18, i64 208, !18, i64 240, !18, i64 272, !18, i64 304, !18, i64 336, !21, i64 368, !21, i64 464, !21, i64 560, !21, i64 656, !21, i64 752, !21, i64 848, !21, i64 944, !21, i64 1040, !15, i64 1136, !15, i64 1140, !15, i64 1144, !15, i64 1148, !15, i64 1152, !15, i64 1156, !15, i64 1160, !15, i64 1164, !18, i64 1168, !18, i64 1200, !18, i64 1232, !18, i64 1264, !18, i64 1296, !21, i64 1328, !21, i64 1424, !21, i64 1520, !21, i64 1616, !21, i64 1712, !13, i64 1808, !24, i64 1816}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !19, i64 0, !20, i64 8, !6, i64 16}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!20 = !{!"long", !6, i64 0}
!21 = !{!"_ZTSN7tinyobj16texture_option_tE", !22, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !6, i64 16, !6, i64 28, !6, i64 40, !13, i64 52, !23, i64 56, !6, i64 57, !23, i64 58, !23, i64 59, !15, i64 60, !18, i64 64}
!22 = !{!"_ZTSN7tinyobj14texture_type_tE", !6, i64 0}
!23 = !{!"bool", !6, i64 0}
!24 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St4lessIS5_ESaISt4pairIKS5_S5_EEE", !25, i64 0}
!25 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE", !26, i64 0}
!26 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !27, i64 0, !29, i64 8}
!27 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !28, i64 0}
!28 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!29 = !{!"_ZTSSt15_Rb_tree_header", !30, i64 0, !20, i64 32}
!30 = !{!"_ZTSSt18_Rb_tree_node_base", !31, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!31 = !{!"_ZTSSt14_Rb_tree_color", !6, i64 0}
!32 = !{!17, !15, i64 92}
!33 = !{!17, !13, i64 104}
!34 = !{!17, !15, i64 100}
!35 = !{!17, !15, i64 1136}
!36 = !{!17, !15, i64 1140}
!37 = !{!17, !15, i64 1144}
!38 = !{!17, !15, i64 1148}
!39 = !{!17, !15, i64 1152}
!40 = !{!17, !15, i64 1156}
!41 = !{!17, !15, i64 1160}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass