; LLVM IR from drohmer/cgp :: library/cgp/20_format_parser/mesh_loader/obj_advanced (obj_advanced)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"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" }
%"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 [97 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 [33 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 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 [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.42 = 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: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) #4

; 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
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #0 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_string", align 8
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca 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 ptr, align 8
  %43 = alloca i64, align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator", align 1
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::allocator", align 1
  %48 = alloca %"struct.std::pair.18", align 8
  %49 = alloca %"struct.std::pair.14", align 8
  %50 = alloca %"struct.std::pair.8", align 8
  %51 = alloca i32, align 4
  %52 = alloca %"struct.std::pair", align 8
  %53 = 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 %54 unwind label %74

54:                                               ; 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 %55 unwind label %78

55:                                               ; preds = %54
  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 %56

56:                                               ; preds = %1248, %1246, %126, %55
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = invoke noundef i32 @_ZNSi4peekEv(ptr noundef nonnull align 8 dereferenceable(16) %57)
          to label %59 unwind label %82

59:                                               ; preds = %56
  %60 = icmp ne i32 %58, -1
  br i1 %60, label %61, label %1250

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

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

69:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #8
  %70 = 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
  %71 = add i64 %70, 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 %71)
          to label %72 unwind label %86

72:                                               ; preds = %69
  %73 = 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 %90

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

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

82:                                               ; preds = %1258, %118, %110, %101, %93, %61, %56
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %12, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %13, align 4
  br label %1285

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

90:                                               ; preds = %72, %64
  %91 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  %92 = icmp ugt i64 %91, 0
  br i1 %92, label %93, label %107

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

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

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

105:                                              ; preds = %101
  br label %106

106:                                              ; preds = %105, %97
  br label %107

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

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

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

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

122:                                              ; preds = %118
  br label %123

123:                                              ; preds = %122, %114
  br label %124

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

126:                                              ; preds = %124
  br label %56, !llvm.loop !14

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

135:                                              ; preds = %127
  br label %138

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

137:                                              ; No predecessors!
  br label %138

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

144:                                              ; preds = %138
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

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

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

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

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

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

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

171:                                              ; preds = %168
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %23) #8
  %173 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %174) #8
  %176 = trunc i64 %175 to i32
  store i32 %176, 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) %173, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %177 unwind label %186

177:                                              ; preds = %171
  %178 = 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) %172, ptr noundef nonnull align 8 dereferenceable(36) %23)
          to label %179 unwind label %190

179:                                              ; preds = %177
  %180 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 0
  %181 = extractvalue { ptr, i8 } %178, 0
  store ptr %181, ptr %180, align 8
  %182 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 1
  %183 = extractvalue { ptr, i8 } %178, 1
  store i8 %183, ptr %182, 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
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIN7tinyobj10material_tESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %184, ptr noundef nonnull align 8 dereferenceable(1864) %11)
          to label %185 unwind label %195

185:                                              ; preds = %179
  br label %199

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

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

194:                                              ; preds = %190, %186
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %23) #8
  br label %1249

195:                                              ; preds = %1187, %1163, %1139, %1115, %1091, %1067, %1043, %1019, %993, %987, %963, %939, %911, %887, %853, %829, %807, %785, %763, %741, %711, %681, %651, %621, %618, %615, %613, %610, %607, %574, %571, %569, %566, %563, %555, %531, %509, %438, %199, %179
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %12, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %13, align 4
  br label %1249

199:                                              ; preds = %185, %168
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef %11)
          to label %200 unwind label %195

200:                                              ; preds = %199
  store i8 0, ptr %14, align 1, !tbaa !9
  store i8 0, ptr %15, align 1, !tbaa !9
  %201 = load ptr, ptr %21, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i64 7
  store ptr %202, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef %21)
          to label %203 unwind label %212

203:                                              ; preds = %200
  %204 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br i1 %204, label %205, label %221

205:                                              ; preds = %203
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = icmp ne ptr %206, null
  br i1 %207, label %208, label %220

208:                                              ; preds = %205
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %209, ptr noundef @.str.18)
          to label %211 unwind label %216

211:                                              ; preds = %208
  br label %220

212:                                              ; preds = %200
  %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 = %221, %208
  %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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %225

220:                                              ; preds = %211, %205
  br label %221

221:                                              ; preds = %220, %203
  %222 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  %223 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %222, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %224 unwind label %216

224:                                              ; preds = %221
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

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

226:                                              ; preds = %162, %152
  %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 %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %27, ptr noundef %28, ptr noundef %29, 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 %27, 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 %28, 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 %29, 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 %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %1246

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 %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %1249

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 %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %30, ptr noundef %31, ptr noundef %32, 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 %30, 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 %31, 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 %32, 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 %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %1246

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 %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %1249

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 %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %33, ptr noundef %34, ptr noundef %35, 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 %33, 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 %34, 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 %35, 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 %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %1246

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 %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %1249

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 %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %36, ptr noundef %37, ptr noundef %38, 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 %36, 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 %37, 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 %38, 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 %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %1246

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 %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %1249

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 %195

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 %1246, !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 %39) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef %39, ptr noundef %40, ptr noundef %41, 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 %39, 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 %40, 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 %41, 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 %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %1246

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 %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %1249

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 %195

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 %1246, !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.19, 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 %195

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 %1246, !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 %578

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 %578

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 %195

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 %577

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.20)
          to label %566 unwind label %195

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 %195

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.21)
          to label %571 unwind label %195

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 %195

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.22)
          to label %576 unwind label %195

576:                                              ; preds = %574
  br label %577

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

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

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

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

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

602:                                              ; preds = %596, %590
  %603 = load ptr, ptr %21, align 8, !tbaa !5
  %604 = getelementptr inbounds i8, ptr %603, i64 2
  store ptr %604, ptr %21, align 8, !tbaa !5
  %605 = load i8, ptr %14, align 1, !tbaa !9, !range !37, !noundef !38
  %606 = trunc i8 %605 to i1
  br i1 %606, label %607, label %621

607:                                              ; preds = %602
  %608 = getelementptr inbounds i8, ptr %17, i64 16
  %609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %608, ptr noundef @.str.20)
          to label %610 unwind label %195

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

613:                                              ; preds = %610
  %614 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %612, ptr noundef @.str.21)
          to label %615 unwind label %195

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

618:                                              ; preds = %615
  %619 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %617, ptr noundef @.str.22)
          to label %620 unwind label %195

620:                                              ; preds = %618
  br label %626

621:                                              ; preds = %602
  %622 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %623 unwind label %195

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

626:                                              ; preds = %623, %620
  store i8 1, ptr %15, align 1, !tbaa !9
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

627:                                              ; preds = %596, %584, %578
  %628 = load ptr, ptr %21, align 8, !tbaa !5
  %629 = getelementptr inbounds i8, ptr %628, i64 0
  %630 = load i8, ptr %629, align 1, !tbaa !13
  %631 = sext i8 %630 to i32
  %632 = icmp eq i32 %631, 80
  br i1 %632, label %633, label %657

633:                                              ; preds = %627
  %634 = load ptr, ptr %21, align 8, !tbaa !5
  %635 = getelementptr inbounds i8, ptr %634, i64 1
  %636 = load i8, ptr %635, align 1, !tbaa !13
  %637 = sext i8 %636 to i32
  %638 = icmp eq i32 %637, 114
  br i1 %638, label %639, label %657

639:                                              ; preds = %633
  %640 = load ptr, ptr %21, align 8, !tbaa !5
  %641 = getelementptr inbounds i8, ptr %640, i64 2
  %642 = load i8, ptr %641, align 1, !tbaa !13
  %643 = sext i8 %642 to i32
  %644 = icmp eq i32 %643, 32
  br i1 %644, label %651, label %645

645:                                              ; preds = %639
  %646 = load ptr, ptr %21, align 8, !tbaa !5
  %647 = getelementptr inbounds i8, ptr %646, i64 2
  %648 = load i8, ptr %647, align 1, !tbaa !13
  %649 = sext i8 %648 to i32
  %650 = icmp eq i32 %649, 9
  br i1 %650, label %651, label %657

651:                                              ; preds = %645, %639
  %652 = load ptr, ptr %21, align 8, !tbaa !5
  %653 = getelementptr inbounds i8, ptr %652, i64 2
  store ptr %653, ptr %21, align 8, !tbaa !5
  %654 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %655 unwind label %195

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

657:                                              ; preds = %645, %633, %627
  %658 = load ptr, ptr %21, align 8, !tbaa !5
  %659 = getelementptr inbounds i8, ptr %658, i64 0
  %660 = load i8, ptr %659, align 1, !tbaa !13
  %661 = sext i8 %660 to i32
  %662 = icmp eq i32 %661, 80
  br i1 %662, label %663, label %687

663:                                              ; preds = %657
  %664 = load ptr, ptr %21, align 8, !tbaa !5
  %665 = getelementptr inbounds i8, ptr %664, i64 1
  %666 = load i8, ptr %665, align 1, !tbaa !13
  %667 = sext i8 %666 to i32
  %668 = icmp eq i32 %667, 109
  br i1 %668, label %669, label %687

669:                                              ; preds = %663
  %670 = load ptr, ptr %21, align 8, !tbaa !5
  %671 = getelementptr inbounds i8, ptr %670, i64 2
  %672 = load i8, ptr %671, align 1, !tbaa !13
  %673 = sext i8 %672 to i32
  %674 = icmp eq i32 %673, 32
  br i1 %674, label %681, label %675

675:                                              ; preds = %669
  %676 = load ptr, ptr %21, align 8, !tbaa !5
  %677 = getelementptr inbounds i8, ptr %676, i64 2
  %678 = load i8, ptr %677, align 1, !tbaa !13
  %679 = sext i8 %678 to i32
  %680 = icmp eq i32 %679, 9
  br i1 %680, label %681, label %687

681:                                              ; preds = %675, %669
  %682 = load ptr, ptr %21, align 8, !tbaa !5
  %683 = getelementptr inbounds i8, ptr %682, i64 2
  store ptr %683, ptr %21, align 8, !tbaa !5
  %684 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %685 unwind label %195

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

687:                                              ; preds = %675, %663, %657
  %688 = load ptr, ptr %21, align 8, !tbaa !5
  %689 = getelementptr inbounds i8, ptr %688, i64 0
  %690 = load i8, ptr %689, align 1, !tbaa !13
  %691 = sext i8 %690 to i32
  %692 = icmp eq i32 %691, 80
  br i1 %692, label %693, label %717

693:                                              ; preds = %687
  %694 = load ptr, ptr %21, align 8, !tbaa !5
  %695 = getelementptr inbounds i8, ptr %694, i64 1
  %696 = load i8, ptr %695, align 1, !tbaa !13
  %697 = sext i8 %696 to i32
  %698 = icmp eq i32 %697, 115
  br i1 %698, label %699, label %717

699:                                              ; preds = %693
  %700 = load ptr, ptr %21, align 8, !tbaa !5
  %701 = getelementptr inbounds i8, ptr %700, i64 2
  %702 = load i8, ptr %701, align 1, !tbaa !13
  %703 = sext i8 %702 to i32
  %704 = icmp eq i32 %703, 32
  br i1 %704, label %711, label %705

705:                                              ; preds = %699
  %706 = load ptr, ptr %21, align 8, !tbaa !5
  %707 = getelementptr inbounds i8, ptr %706, i64 2
  %708 = load i8, ptr %707, align 1, !tbaa !13
  %709 = sext i8 %708 to i32
  %710 = icmp eq i32 %709, 9
  br i1 %710, label %711, label %717

711:                                              ; preds = %705, %699
  %712 = load ptr, ptr %21, align 8, !tbaa !5
  %713 = getelementptr inbounds i8, ptr %712, i64 2
  store ptr %713, ptr %21, align 8, !tbaa !5
  %714 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %715 unwind label %195

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

717:                                              ; preds = %705, %693, %687
  %718 = load ptr, ptr %21, align 8, !tbaa !5
  %719 = getelementptr inbounds i8, ptr %718, i64 0
  %720 = load i8, ptr %719, align 1, !tbaa !13
  %721 = sext i8 %720 to i32
  %722 = icmp eq i32 %721, 80
  br i1 %722, label %723, label %747

723:                                              ; preds = %717
  %724 = load ptr, ptr %21, align 8, !tbaa !5
  %725 = getelementptr inbounds i8, ptr %724, i64 1
  %726 = load i8, ptr %725, align 1, !tbaa !13
  %727 = sext i8 %726 to i32
  %728 = icmp eq i32 %727, 99
  br i1 %728, label %729, label %747

729:                                              ; preds = %723
  %730 = load ptr, ptr %21, align 8, !tbaa !5
  %731 = getelementptr inbounds i8, ptr %730, i64 2
  %732 = load i8, ptr %731, align 1, !tbaa !13
  %733 = sext i8 %732 to i32
  %734 = icmp eq i32 %733, 32
  br i1 %734, label %741, label %735

735:                                              ; preds = %729
  %736 = load ptr, ptr %21, align 8, !tbaa !5
  %737 = getelementptr inbounds i8, ptr %736, i64 2
  %738 = load i8, ptr %737, align 1, !tbaa !13
  %739 = sext i8 %738 to i32
  %740 = icmp eq i32 %739, 9
  br i1 %740, label %741, label %747

741:                                              ; preds = %735, %729
  %742 = load ptr, ptr %21, align 8, !tbaa !5
  %743 = getelementptr inbounds i8, ptr %742, i64 2
  store ptr %743, ptr %21, align 8, !tbaa !5
  %744 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %745 unwind label %195

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

747:                                              ; preds = %735, %723, %717
  %748 = load ptr, ptr %21, align 8, !tbaa !5
  %749 = call i32 @strncmp(ptr noundef %748, ptr noundef @.str.23, i64 noundef 3) #9
  %750 = icmp eq i32 0, %749
  br i1 %750, label %751, label %769

751:                                              ; preds = %747
  %752 = load ptr, ptr %21, align 8, !tbaa !5
  %753 = getelementptr inbounds i8, ptr %752, i64 3
  %754 = load i8, ptr %753, align 1, !tbaa !13
  %755 = sext i8 %754 to i32
  %756 = icmp eq i32 %755, 32
  br i1 %756, label %763, label %757

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

763:                                              ; preds = %757, %751
  %764 = load ptr, ptr %21, align 8, !tbaa !5
  %765 = getelementptr inbounds i8, ptr %764, i64 4
  store ptr %765, ptr %21, align 8, !tbaa !5
  %766 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %767 unwind label %195

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

769:                                              ; preds = %757, %747
  %770 = load ptr, ptr %21, align 8, !tbaa !5
  %771 = call i32 @strncmp(ptr noundef %770, ptr noundef @.str.24, i64 noundef 5) #9
  %772 = icmp eq i32 0, %771
  br i1 %772, label %773, label %791

773:                                              ; preds = %769
  %774 = load ptr, ptr %21, align 8, !tbaa !5
  %775 = getelementptr inbounds i8, ptr %774, i64 5
  %776 = load i8, ptr %775, align 1, !tbaa !13
  %777 = sext i8 %776 to i32
  %778 = icmp eq i32 %777, 32
  br i1 %778, label %785, label %779

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

785:                                              ; preds = %779, %773
  %786 = load ptr, ptr %21, align 8, !tbaa !5
  %787 = getelementptr inbounds i8, ptr %786, i64 6
  store ptr %787, ptr %21, align 8, !tbaa !5
  %788 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %789 unwind label %195

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

791:                                              ; preds = %779, %769
  %792 = load ptr, ptr %21, align 8, !tbaa !5
  %793 = call i32 @strncmp(ptr noundef %792, ptr noundef @.str.25, i64 noundef 6) #9
  %794 = icmp eq i32 0, %793
  br i1 %794, label %795, label %813

795:                                              ; preds = %791
  %796 = load ptr, ptr %21, align 8, !tbaa !5
  %797 = getelementptr inbounds i8, ptr %796, i64 6
  %798 = load i8, ptr %797, align 1, !tbaa !13
  %799 = sext i8 %798 to i32
  %800 = icmp eq i32 %799, 32
  br i1 %800, label %807, label %801

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

807:                                              ; preds = %801, %795
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = getelementptr inbounds i8, ptr %808, i64 7
  store ptr %809, ptr %21, align 8, !tbaa !5
  %810 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef %21, double noundef 0.000000e+00)
          to label %811 unwind label %195

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

813:                                              ; preds = %801, %791
  %814 = load ptr, ptr %21, align 8, !tbaa !5
  %815 = call i32 @strncmp(ptr noundef %814, ptr noundef @.str.26, i64 noundef 6) #9
  %816 = icmp eq i32 0, %815
  br i1 %816, label %817, label %837

817:                                              ; preds = %813
  %818 = load ptr, ptr %21, align 8, !tbaa !5
  %819 = getelementptr inbounds i8, ptr %818, i64 6
  %820 = load i8, ptr %819, align 1, !tbaa !13
  %821 = sext i8 %820 to i32
  %822 = icmp eq i32 %821, 32
  br i1 %822, label %829, label %823

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

829:                                              ; preds = %823, %817
  %830 = load ptr, ptr %21, align 8, !tbaa !5
  %831 = getelementptr inbounds i8, ptr %830, i64 7
  store ptr %831, ptr %21, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 11
  %833 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 19
  %834 = load ptr, ptr %21, align 8, !tbaa !5
  %835 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %832, ptr noundef %833, ptr noundef %834)
          to label %836 unwind label %195

836:                                              ; preds = %829
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

837:                                              ; preds = %823, %813
  %838 = load ptr, ptr %21, align 8, !tbaa !5
  %839 = call i32 @strncmp(ptr noundef %838, ptr noundef @.str.27, i64 noundef 6) #9
  %840 = icmp eq i32 0, %839
  br i1 %840, label %841, label %871

841:                                              ; preds = %837
  %842 = load ptr, ptr %21, align 8, !tbaa !5
  %843 = getelementptr inbounds i8, ptr %842, i64 6
  %844 = load i8, ptr %843, align 1, !tbaa !13
  %845 = sext i8 %844 to i32
  %846 = icmp eq i32 %845, 32
  br i1 %846, label %853, label %847

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

853:                                              ; preds = %847, %841
  %854 = load ptr, ptr %21, align 8, !tbaa !5
  %855 = getelementptr inbounds i8, ptr %854, i64 7
  store ptr %855, ptr %21, align 8, !tbaa !5
  %856 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 12
  %857 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 20
  %858 = load ptr, ptr %21, align 8, !tbaa !5
  %859 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %856, ptr noundef %857, ptr noundef %858)
          to label %860 unwind label %195

860:                                              ; preds = %853
  %861 = load i8, ptr %16, align 1, !tbaa !9, !range !37, !noundef !38
  %862 = trunc i8 %861 to i1
  br i1 %862, label %870, label %863

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

870:                                              ; preds = %863, %860
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

871:                                              ; preds = %847, %837
  %872 = load ptr, ptr %21, align 8, !tbaa !5
  %873 = call i32 @strncmp(ptr noundef %872, ptr noundef @.str.28, i64 noundef 6) #9
  %874 = icmp eq i32 0, %873
  br i1 %874, label %875, label %895

875:                                              ; preds = %871
  %876 = load ptr, ptr %21, align 8, !tbaa !5
  %877 = getelementptr inbounds i8, ptr %876, i64 6
  %878 = load i8, ptr %877, align 1, !tbaa !13
  %879 = sext i8 %878 to i32
  %880 = icmp eq i32 %879, 32
  br i1 %880, label %887, label %881

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

887:                                              ; preds = %881, %875
  %888 = load ptr, ptr %21, align 8, !tbaa !5
  %889 = getelementptr inbounds i8, ptr %888, i64 7
  store ptr %889, ptr %21, align 8, !tbaa !5
  %890 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 13
  %891 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 21
  %892 = load ptr, ptr %21, align 8, !tbaa !5
  %893 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %890, ptr noundef %891, ptr noundef %892)
          to label %894 unwind label %195

894:                                              ; preds = %887
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

895:                                              ; preds = %881, %871
  %896 = load ptr, ptr %21, align 8, !tbaa !5
  %897 = call i32 @strncmp(ptr noundef %896, ptr noundef @.str.29, i64 noundef 6) #9
  %898 = icmp eq i32 0, %897
  br i1 %898, label %899, label %919

899:                                              ; preds = %895
  %900 = load ptr, ptr %21, align 8, !tbaa !5
  %901 = getelementptr inbounds i8, ptr %900, i64 6
  %902 = load i8, ptr %901, align 1, !tbaa !13
  %903 = sext i8 %902 to i32
  %904 = icmp eq i32 %903, 32
  br i1 %904, label %911, label %905

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

911:                                              ; preds = %905, %899
  %912 = load ptr, ptr %21, align 8, !tbaa !5
  %913 = getelementptr inbounds i8, ptr %912, i64 7
  store ptr %913, ptr %21, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 14
  %915 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 22
  %916 = load ptr, ptr %21, align 8, !tbaa !5
  %917 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %914, ptr noundef %915, ptr noundef %916)
          to label %918 unwind label %195

918:                                              ; preds = %911
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

919:                                              ; preds = %905, %895
  %920 = load ptr, ptr %21, align 8, !tbaa !5
  %921 = call i32 @strncmp(ptr noundef %920, ptr noundef @.str.30, i64 noundef 8) #9
  %922 = icmp eq i32 0, %921
  br i1 %922, label %927, label %923

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

927:                                              ; preds = %923, %919
  %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 %195

946:                                              ; preds = %939
  store i32 2, ptr %22, align 4
  br label %1246, !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.32, i64 noundef 4) #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 4
  %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 4
  %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 5
  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 %195

970:                                              ; preds = %963
  store i32 2, ptr %22, align 4
  br label %1246, !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.33, i64 noundef 5) #9
  %974 = icmp eq i32 0, %973
  br i1 %974, label %975, label %999

975:                                              ; preds = %971
  %976 = load ptr, ptr %21, align 8, !tbaa !5
  %977 = getelementptr inbounds i8, ptr %976, i64 5
  %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 5
  %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 %999

987:                                              ; preds = %981, %975
  %988 = load ptr, ptr %21, align 8, !tbaa !5
  %989 = getelementptr inbounds i8, ptr %988, i64 6
  store ptr %989, ptr %21, align 8, !tbaa !5
  %990 = load ptr, ptr %21, align 8, !tbaa !5
  %991 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 17
  %992 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %991, ptr noundef %990)
          to label %993 unwind label %195

993:                                              ; preds = %987
  %994 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 17
  %995 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 25
  %996 = load ptr, ptr %21, align 8, !tbaa !5
  %997 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %994, ptr noundef %995, ptr noundef %996)
          to label %998 unwind label %195

998:                                              ; preds = %993
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

999:                                              ; preds = %981, %971
  %1000 = load ptr, ptr %21, align 8, !tbaa !5
  %1001 = call i32 @strncmp(ptr noundef %1000, ptr noundef @.str.34, i64 noundef 8) #9
  %1002 = icmp eq i32 0, %1001
  br i1 %1002, label %1007, label %1003

1003:                                             ; preds = %999
  %1004 = load ptr, ptr %21, align 8, !tbaa !5
  %1005 = call i32 @strncmp(ptr noundef %1004, ptr noundef @.str.35, i64 noundef 8) #9
  %1006 = icmp eq i32 0, %1005
  br i1 %1006, label %1007, label %1027

1007:                                             ; preds = %1003, %999
  %1008 = load ptr, ptr %21, align 8, !tbaa !5
  %1009 = getelementptr inbounds i8, ptr %1008, i64 8
  %1010 = load i8, ptr %1009, align 1, !tbaa !13
  %1011 = sext i8 %1010 to i32
  %1012 = icmp eq i32 %1011, 32
  br i1 %1012, label %1019, label %1013

1013:                                             ; preds = %1007
  %1014 = load ptr, ptr %21, align 8, !tbaa !5
  %1015 = getelementptr inbounds i8, ptr %1014, i64 8
  %1016 = load i8, ptr %1015, align 1, !tbaa !13
  %1017 = sext i8 %1016 to i32
  %1018 = icmp eq i32 %1017, 9
  br i1 %1018, label %1019, label %1027

1019:                                             ; preds = %1013, %1007
  %1020 = load ptr, ptr %21, align 8, !tbaa !5
  %1021 = getelementptr inbounds i8, ptr %1020, i64 9
  store ptr %1021, ptr %21, align 8, !tbaa !5
  %1022 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 16
  %1023 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 24
  %1024 = load ptr, ptr %21, align 8, !tbaa !5
  %1025 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1022, ptr noundef %1023, ptr noundef %1024)
          to label %1026 unwind label %195

1026:                                             ; preds = %1019
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1027:                                             ; preds = %1013, %1003
  %1028 = load ptr, ptr %21, align 8, !tbaa !5
  %1029 = call i32 @strncmp(ptr noundef %1028, ptr noundef @.str.36, i64 noundef 4) #9
  %1030 = icmp eq i32 0, %1029
  br i1 %1030, label %1031, label %1051

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

1037:                                             ; preds = %1031
  %1038 = load ptr, ptr %21, align 8, !tbaa !5
  %1039 = getelementptr inbounds i8, ptr %1038, i64 4
  %1040 = load i8, ptr %1039, align 1, !tbaa !13
  %1041 = sext i8 %1040 to i32
  %1042 = icmp eq i32 %1041, 9
  br i1 %1042, label %1043, label %1051

1043:                                             ; preds = %1037, %1031
  %1044 = load ptr, ptr %21, align 8, !tbaa !5
  %1045 = getelementptr inbounds i8, ptr %1044, i64 5
  store ptr %1045, ptr %21, align 8, !tbaa !5
  %1046 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 16
  %1047 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 24
  %1048 = load ptr, ptr %21, align 8, !tbaa !5
  %1049 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1046, ptr noundef %1047, ptr noundef %1048)
          to label %1050 unwind label %195

1050:                                             ; preds = %1043
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1051:                                             ; preds = %1037, %1027
  %1052 = load ptr, ptr %21, align 8, !tbaa !5
  %1053 = call i32 @strncmp(ptr noundef %1052, ptr noundef @.str.37, i64 noundef 4) #9
  %1054 = icmp eq i32 0, %1053
  br i1 %1054, label %1055, label %1075

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

1061:                                             ; preds = %1055
  %1062 = load ptr, ptr %21, align 8, !tbaa !5
  %1063 = getelementptr inbounds i8, ptr %1062, i64 4
  %1064 = load i8, ptr %1063, align 1, !tbaa !13
  %1065 = sext i8 %1064 to i32
  %1066 = icmp eq i32 %1065, 9
  br i1 %1066, label %1067, label %1075

1067:                                             ; preds = %1061, %1055
  %1068 = load ptr, ptr %21, align 8, !tbaa !5
  %1069 = getelementptr inbounds i8, ptr %1068, i64 5
  store ptr %1069, ptr %21, align 8, !tbaa !5
  %1070 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 18
  %1071 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 26
  %1072 = load ptr, ptr %21, align 8, !tbaa !5
  %1073 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1070, ptr noundef %1071, ptr noundef %1072)
          to label %1074 unwind label %195

1074:                                             ; preds = %1067
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1075:                                             ; preds = %1061, %1051
  %1076 = load ptr, ptr %21, align 8, !tbaa !5
  %1077 = call i32 @strncmp(ptr noundef %1076, ptr noundef @.str.38, i64 noundef 6) #9
  %1078 = icmp eq i32 0, %1077
  br i1 %1078, label %1079, label %1099

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

1085:                                             ; preds = %1079
  %1086 = load ptr, ptr %21, align 8, !tbaa !5
  %1087 = getelementptr inbounds i8, ptr %1086, i64 6
  %1088 = load i8, ptr %1087, align 1, !tbaa !13
  %1089 = sext i8 %1088 to i32
  %1090 = icmp eq i32 %1089, 9
  br i1 %1090, label %1091, label %1099

1091:                                             ; preds = %1085, %1079
  %1092 = load ptr, ptr %21, align 8, !tbaa !5
  %1093 = getelementptr inbounds i8, ptr %1092, i64 7
  store ptr %1093, ptr %21, align 8, !tbaa !5
  %1094 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 35
  %1095 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 40
  %1096 = load ptr, ptr %21, align 8, !tbaa !5
  %1097 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1094, ptr noundef %1095, ptr noundef %1096)
          to label %1098 unwind label %195

1098:                                             ; preds = %1091
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1099:                                             ; preds = %1085, %1075
  %1100 = load ptr, ptr %21, align 8, !tbaa !5
  %1101 = call i32 @strncmp(ptr noundef %1100, ptr noundef @.str.39, i64 noundef 6) #9
  %1102 = icmp eq i32 0, %1101
  br i1 %1102, label %1103, label %1123

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

1109:                                             ; preds = %1103
  %1110 = load ptr, ptr %21, align 8, !tbaa !5
  %1111 = getelementptr inbounds i8, ptr %1110, i64 6
  %1112 = load i8, ptr %1111, align 1, !tbaa !13
  %1113 = sext i8 %1112 to i32
  %1114 = icmp eq i32 %1113, 9
  br i1 %1114, label %1115, label %1123

1115:                                             ; preds = %1109, %1103
  %1116 = load ptr, ptr %21, align 8, !tbaa !5
  %1117 = getelementptr inbounds i8, ptr %1116, i64 7
  store ptr %1117, ptr %21, align 8, !tbaa !5
  %1118 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 36
  %1119 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 41
  %1120 = load ptr, ptr %21, align 8, !tbaa !5
  %1121 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1118, ptr noundef %1119, ptr noundef %1120)
          to label %1122 unwind label %195

1122:                                             ; preds = %1115
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1123:                                             ; preds = %1109, %1099
  %1124 = load ptr, ptr %21, align 8, !tbaa !5
  %1125 = call i32 @strncmp(ptr noundef %1124, ptr noundef @.str.40, i64 noundef 6) #9
  %1126 = icmp eq i32 0, %1125
  br i1 %1126, label %1127, label %1147

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

1133:                                             ; preds = %1127
  %1134 = load ptr, ptr %21, align 8, !tbaa !5
  %1135 = getelementptr inbounds i8, ptr %1134, i64 6
  %1136 = load i8, ptr %1135, align 1, !tbaa !13
  %1137 = sext i8 %1136 to i32
  %1138 = icmp eq i32 %1137, 9
  br i1 %1138, label %1139, label %1147

1139:                                             ; preds = %1133, %1127
  %1140 = load ptr, ptr %21, align 8, !tbaa !5
  %1141 = getelementptr inbounds i8, ptr %1140, i64 7
  store ptr %1141, ptr %21, align 8, !tbaa !5
  %1142 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 37
  %1143 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 42
  %1144 = load ptr, ptr %21, align 8, !tbaa !5
  %1145 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1142, ptr noundef %1143, ptr noundef %1144)
          to label %1146 unwind label %195

1146:                                             ; preds = %1139
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1147:                                             ; preds = %1133, %1123
  %1148 = load ptr, ptr %21, align 8, !tbaa !5
  %1149 = call i32 @strncmp(ptr noundef %1148, ptr noundef @.str.41, i64 noundef 6) #9
  %1150 = icmp eq i32 0, %1149
  br i1 %1150, label %1151, label %1171

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

1157:                                             ; preds = %1151
  %1158 = load ptr, ptr %21, align 8, !tbaa !5
  %1159 = getelementptr inbounds i8, ptr %1158, i64 6
  %1160 = load i8, ptr %1159, align 1, !tbaa !13
  %1161 = sext i8 %1160 to i32
  %1162 = icmp eq i32 %1161, 9
  br i1 %1162, label %1163, label %1171

1163:                                             ; preds = %1157, %1151
  %1164 = load ptr, ptr %21, align 8, !tbaa !5
  %1165 = getelementptr inbounds i8, ptr %1164, i64 7
  store ptr %1165, ptr %21, align 8, !tbaa !5
  %1166 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 38
  %1167 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 43
  %1168 = load ptr, ptr %21, align 8, !tbaa !5
  %1169 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1166, ptr noundef %1167, ptr noundef %1168)
          to label %1170 unwind label %195

1170:                                             ; preds = %1163
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1171:                                             ; preds = %1157, %1147
  %1172 = load ptr, ptr %21, align 8, !tbaa !5
  %1173 = call i32 @strncmp(ptr noundef %1172, ptr noundef @.str.42, i64 noundef 4) #9
  %1174 = icmp eq i32 0, %1173
  br i1 %1174, label %1175, label %1195

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

1181:                                             ; preds = %1175
  %1182 = load ptr, ptr %21, align 8, !tbaa !5
  %1183 = getelementptr inbounds i8, ptr %1182, i64 4
  %1184 = load i8, ptr %1183, align 1, !tbaa !13
  %1185 = sext i8 %1184 to i32
  %1186 = icmp eq i32 %1185, 9
  br i1 %1186, label %1187, label %1195

1187:                                             ; preds = %1181, %1175
  %1188 = load ptr, ptr %21, align 8, !tbaa !5
  %1189 = getelementptr inbounds i8, ptr %1188, i64 5
  store ptr %1189, ptr %21, align 8, !tbaa !5
  %1190 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 39
  %1191 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 44
  %1192 = load ptr, ptr %21, align 8, !tbaa !5
  %1193 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef %1190, ptr noundef %1191, ptr noundef %1192)
          to label %1194 unwind label %195

1194:                                             ; preds = %1187
  store i32 2, ptr %22, align 4
  br label %1246, !llvm.loop !14

1195:                                             ; preds = %1181, %1171
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %1196 = load ptr, ptr %21, align 8, !tbaa !5
  %1197 = call noundef ptr @strchr(ptr noundef %1196, i32 noundef 32) #9
  store ptr %1197, ptr %42, align 8, !tbaa !5
  %1198 = load ptr, ptr %42, align 8, !tbaa !5
  %1199 = icmp ne ptr %1198, null
  br i1 %1199, label %1203, label %1200

1200:                                             ; preds = %1195
  %1201 = load ptr, ptr %21, align 8, !tbaa !5
  %1202 = call noundef ptr @strchr(ptr noundef %1201, i32 noundef 9) #9
  store ptr %1202, ptr %42, align 8, !tbaa !5
  br label %1203

1203:                                             ; preds = %1200, %1195
  %1204 = load ptr, ptr %42, align 8, !tbaa !5
  %1205 = icmp ne ptr %1204, null
  br i1 %1205, label %1206, label %1245

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

1214:                                             ; preds = %1206
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  %1215 = load ptr, ptr %42, align 8, !tbaa !5
  %1216 = getelementptr inbounds i8, ptr %1215, i64 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef %1216, ptr noundef nonnull align 1 dereferenceable(1) %47)
          to label %1217 unwind label %1230

1217:                                             ; preds = %1214
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #8
  %1218 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 46
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #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) %48, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %46)
          to label %1219 unwind label %1234

1219:                                             ; preds = %1217
  %1220 = 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) %1218, ptr noundef nonnull align 8 dereferenceable(64) %48)
          to label %1221 unwind label %1238

1221:                                             ; preds = %1219
  %1222 = getelementptr inbounds { ptr, i8 }, ptr %49, i32 0, i32 0
  %1223 = extractvalue { ptr, i8 } %1220, 0
  store ptr %1223, ptr %1222, align 8
  %1224 = getelementptr inbounds { ptr, i8 }, ptr %49, i32 0, i32 1
  %1225 = extractvalue { ptr, i8 } %1220, 1
  store i8 %1225, ptr %1224, align 8
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %48) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %1245

1226:                                             ; preds = %1206
  %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) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  br label %1244

1230:                                             ; preds = %1214
  %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
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %47) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #8
  br label %1243

1234:                                             ; preds = %1217
  %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
  br label %1242

1238:                                             ; preds = %1219
  %1239 = landingpad { ptr, i32 }
          cleanup
  %1240 = extractvalue { ptr, i32 } %1239, 0
  store ptr %1240, ptr %12, align 8
  %1241 = extractvalue { ptr, i32 } %1239, 1
  store i32 %1241, ptr %13, align 4
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %48) #8
  br label %1242

1242:                                             ; preds = %1238, %1234
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %1243

1243:                                             ; preds = %1242, %1230
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %1244

1244:                                             ; preds = %1243, %1226
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %1249

1245:                                             ; preds = %1221, %1203
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  store i32 0, ptr %22, align 4
  br label %1246

1246:                                             ; preds = %1245, %1194, %1170, %1146, %1122, %1098, %1074, %1050, %1026, %998, %970, %946, %918, %894, %870, %836, %811, %789, %767, %745, %715, %685, %655, %626, %577, %535, %513, %471, %442, %400, %335, %294, %253, %224, %151, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  %1247 = load i32, ptr %22, align 4
  switch i32 %1247, label %1293 [
    i32 0, label %1248
    i32 2, label %56
  ]

1248:                                             ; preds = %1246
  br label %56, !llvm.loop !14

1249:                                             ; preds = %1244, %481, %410, %345, %304, %263, %225, %195, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %1285

1250:                                             ; preds = %59
  %1251 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %50) #8
  %1252 = getelementptr inbounds %"struct.tinyobj::material_t", ptr %11, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %1253 = load ptr, ptr %7, align 8, !tbaa !5
  %1254 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1253) #8
  %1255 = trunc i64 %1254 to i32
  store i32 %1255, ptr %51, 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) %50, ptr noundef nonnull align 8 dereferenceable(32) %1252, ptr noundef nonnull align 4 dereferenceable(4) %51)
          to label %1256 unwind label %1271

1256:                                             ; preds = %1250
  %1257 = 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) %1251, ptr noundef nonnull align 8 dereferenceable(36) %50)
          to label %1258 unwind label %1275

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

1264:                                             ; preds = %1258
  %1265 = load ptr, ptr %9, align 8, !tbaa !5
  %1266 = icmp ne ptr %1265, null
  br i1 %1266, label %1267, label %1284

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

1268:                                             ; preds = %1267
  %1269 = load ptr, ptr %9, align 8, !tbaa !5
  %1270 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %1269, ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  br label %1284

1271:                                             ; preds = %1250
  %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
  br label %1279

1275:                                             ; preds = %1256
  %1276 = landingpad { ptr, i32 }
          cleanup
  %1277 = extractvalue { ptr, i32 } %1276, 0
  store ptr %1277, ptr %12, align 8
  %1278 = extractvalue { ptr, i32 } %1276, 1
  store i32 %1278, ptr %13, align 4
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %50) #8
  br label %1279

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

1280:                                             ; preds = %1267
  %1281 = landingpad { ptr, i32 }
          cleanup
  %1282 = extractvalue { ptr, i32 } %1281, 0
  store ptr %1282, ptr %12, align 8
  %1283 = extractvalue { ptr, i32 } %1281, 1
  store i32 %1283, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  br label %1285

1284:                                             ; preds = %1268, %1264
  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

1285:                                             ; preds = %1280, %1279, %1249, %86, %82
  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 %1286

1286:                                             ; preds = %1285, %78
  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 %1287

1287:                                             ; preds = %1286, %74
  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 %1288

1288:                                             ; preds = %1287
  %1289 = load ptr, ptr %12, align 8
  %1290 = load i32, ptr %13, align 4
  %1291 = insertvalue { ptr, i32 } poison, ptr %1289, 0
  %1292 = insertvalue { ptr, i32 } %1291, i32 %1290, 1
  resume { ptr, i32 } %1292

1293:                                             ; preds = %1246
  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: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #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: 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(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: 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 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"

%"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::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" }
%"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 [97 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 [33 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 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 [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.42 = 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: inlinehint mustprogress uwtable
declare hidden void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) local_unnamed_addr #4

; 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
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 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_string", align 8
  %14 = alloca float, align 4
  %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 %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator", align 1
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator", align 1
  %33 = alloca %"struct.std::pair.18", align 8
  %34 = alloca %"struct.std::pair.8", align 8
  %35 = alloca i32, align 4
  %36 = 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 %37 unwind label %107

37:                                               ; 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 %38 unwind label %109

38:                                               ; preds = %37
  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
  %39 = icmp ne ptr %3, null
  %40 = getelementptr inbounds i8, ptr %6, i64 96
  %41 = getelementptr inbounds i8, ptr %6, i64 92
  %42 = getelementptr inbounds i8, ptr %6, i64 32
  %43 = getelementptr inbounds i8, ptr %6, i64 36
  %44 = getelementptr inbounds i8, ptr %6, i64 40
  %45 = getelementptr inbounds i8, ptr %6, i64 44
  %46 = getelementptr inbounds i8, ptr %6, i64 48
  %47 = getelementptr inbounds i8, ptr %6, i64 52
  %48 = getelementptr inbounds i8, ptr %6, i64 56
  %49 = getelementptr inbounds i8, ptr %6, i64 60
  %50 = getelementptr inbounds i8, ptr %6, i64 64
  %51 = getelementptr inbounds i8, ptr %6, i64 68
  %52 = getelementptr inbounds i8, ptr %6, i64 72
  %53 = getelementptr inbounds i8, ptr %6, i64 76
  %54 = getelementptr inbounds i8, ptr %6, i64 80
  %55 = getelementptr inbounds i8, ptr %6, i64 84
  %56 = getelementptr inbounds i8, ptr %6, i64 88
  %57 = getelementptr inbounds i8, ptr %6, i64 104
  %58 = getelementptr inbounds i8, ptr %6, i64 100
  %59 = getelementptr inbounds i8, ptr %7, i64 16
  %60 = getelementptr inbounds i8, ptr %6, i64 1136
  %61 = getelementptr inbounds i8, ptr %6, i64 1140
  %62 = getelementptr inbounds i8, ptr %6, i64 1144
  %63 = getelementptr inbounds i8, ptr %6, i64 1148
  %64 = getelementptr inbounds i8, ptr %6, i64 1152
  %65 = getelementptr inbounds i8, ptr %6, i64 1156
  %66 = getelementptr inbounds i8, ptr %6, i64 1160
  %67 = getelementptr inbounds i8, ptr %6, i64 112
  %68 = getelementptr inbounds i8, ptr %6, i64 368
  %69 = getelementptr inbounds i8, ptr %6, i64 144
  %70 = getelementptr inbounds i8, ptr %6, i64 464
  %71 = getelementptr inbounds i8, ptr %6, i64 176
  %72 = getelementptr inbounds i8, ptr %6, i64 560
  %73 = getelementptr inbounds i8, ptr %6, i64 208
  %74 = getelementptr inbounds i8, ptr %6, i64 656
  %75 = getelementptr inbounds i8, ptr %6, i64 240
  %76 = getelementptr inbounds i8, ptr %6, i64 752
  %77 = getelementptr inbounds i8, ptr %6, i64 304
  %78 = getelementptr inbounds i8, ptr %6, i64 944
  %79 = getelementptr inbounds i8, ptr %6, i64 272
  %80 = getelementptr inbounds i8, ptr %6, i64 848
  %81 = getelementptr inbounds i8, ptr %6, i64 336
  %82 = getelementptr inbounds i8, ptr %6, i64 1040
  %83 = getelementptr inbounds i8, ptr %6, i64 1168
  %84 = getelementptr inbounds i8, ptr %6, i64 1328
  %85 = getelementptr inbounds i8, ptr %6, i64 1200
  %86 = getelementptr inbounds i8, ptr %6, i64 1424
  %87 = getelementptr inbounds i8, ptr %6, i64 1232
  %88 = getelementptr inbounds i8, ptr %6, i64 1520
  %89 = getelementptr inbounds i8, ptr %6, i64 1264
  %90 = getelementptr inbounds i8, ptr %6, i64 1616
  %91 = getelementptr inbounds i8, ptr %6, i64 1296
  %92 = getelementptr inbounds i8, ptr %6, i64 1712
  %93 = getelementptr inbounds i8, ptr %6, i64 1816
  br label %.outer

.outer:                                           ; preds = %514, %38
  %.046.ph = phi i64 [ %100, %514 ], [ 0, %38 ]
  %.043.ph = phi i1 [ %.144, %514 ], [ false, %38 ]
  %.041.ph = phi i1 [ %.142, %514 ], [ false, %38 ]
  %.039.ph = phi i1 [ %.140, %514 ], [ false, %38 ]
  br label %94

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

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

97:                                               ; preds = %96
  %98 = 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 %99 unwind label %.loopexit

99:                                               ; preds = %97
  %100 = add i64 %.046, 1
  %101 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not88 = icmp eq i64 %101, 0
  br i1 %.not88, label %113, label %102

102:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  %103 = 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
  %104 = add i64 %103, 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 %104)
          to label %105 unwind label %111

105:                                              ; preds = %102
  %106 = 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 %113

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

109:                                              ; preds = %37
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %535

.loopexit:                                        ; preds = %94, %97, %121, %133
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %534

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

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

113:                                              ; preds = %105, %99
  %114 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not89 = icmp eq i64 %114, 0
  br i1 %.not89, label %125, label %115

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

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

125:                                              ; preds = %115, %121, %113
  %126 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not90 = icmp eq i64 %126, 0
  br i1 %.not90, label %137, label %127

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

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

137:                                              ; preds = %127, %133, %125
  %138 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br i1 %138, label %94, label %139, !llvm.loop !8

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

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

144:                                              ; preds = %139
  %145 = load i8, ptr %142, align 1, !tbaa !5
  switch i8 %145, label %146 [
    i8 0, label %514
    i8 35, label %514
  ], !llvm.loop !8

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

149:                                              ; preds = %146
  %150 = getelementptr inbounds i8, ptr %142, i64 6
  %151 = load i8, ptr %150, align 1, !tbaa !5
  switch i8 %151, label %183 [
    i8 32, label %152
    i8 9, label %152
  ]

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

154:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %155 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %156 = trunc i64 %155 to i32
  store i32 %156, 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 %157 unwind label %160

157:                                              ; preds = %154
  %158 = 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 %159 unwind label %162

159:                                              ; preds = %157
  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 %167 unwind label %165

160:                                              ; preds = %154
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %164

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

164:                                              ; preds = %162, %160
  %.pn98 = phi { ptr, i32 } [ %163, %162 ], [ %161, %160 ]
  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 %515

165:                                              ; preds = %.invoke145, %.invoke144, %.invoke143, %.invoke142, %.invoke141, %.invoke, %416, %413, %367, %349, %339, %329, %321, %315, %309, %303, %291, %274, %257, %241, %167, %159
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %515

167:                                              ; preds = %159, %152
  invoke void @_ZN7tinyobjL12InitMaterialEPNS_10material_tE(ptr noundef nonnull %6)
          to label %168 unwind label %165

168:                                              ; preds = %167
  %169 = load ptr, ptr %10, align 8, !tbaa !10
  %170 = getelementptr inbounds i8, ptr %169, i64 7
  store ptr %170, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #8
  invoke void @_ZN7tinyobjL11parseStringB5cxx11EPPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull %10)
          to label %171 unwind label %175

171:                                              ; preds = %168
  %172 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  %or.cond = and i1 %39, %172
  br i1 %or.cond, label %173, label %179

173:                                              ; preds = %171
  %174 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.18)
          to label %179 unwind label %177

175:                                              ; preds = %168
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %182

177:                                              ; preds = %179, %173
  %178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  br label %182

179:                                              ; preds = %173, %171
  %180 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %181 unwind label %177

181:                                              ; preds = %179
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %514, !llvm.loop !8

182:                                              ; preds = %177, %175
  %.pn100 = phi { ptr, i32 } [ %178, %177 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #8
  br label %515

183:                                              ; preds = %149, %146
  switch i8 %145, label %.thread115 [
    i8 75, label %184
    i8 84, label %220
    i8 78, label %235
  ]

184:                                              ; preds = %183
  %185 = getelementptr inbounds i8, ptr %142, i64 1
  %186 = load i8, ptr %185, align 1, !tbaa !5
  switch i8 %186, label %.thread115 [
    i8 97, label %187
    i8 100, label %197
    i8 115, label %207
    i8 116, label %217
    i8 101, label %244
  ]

187:                                              ; preds = %184
  %188 = getelementptr inbounds i8, ptr %142, i64 2
  %189 = load i8, ptr %188, align 1, !tbaa !5
  switch i8 %189, label %.thread115 [
    i8 32, label %190
    i8 9, label %190
  ]

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

191:                                              ; preds = %190
  %192 = load float, ptr %14, align 4, !tbaa !14
  store float %192, ptr %42, align 8, !tbaa !14
  %193 = load float, ptr %15, align 4, !tbaa !14
  store float %193, ptr %43, align 4, !tbaa !14
  %194 = load float, ptr %16, align 4, !tbaa !14
  store float %194, ptr %44, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %514

195:                                              ; preds = %190
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %515

197:                                              ; preds = %184
  %198 = getelementptr inbounds i8, ptr %142, i64 2
  %199 = load i8, ptr %198, align 1, !tbaa !5
  switch i8 %199, label %.thread115 [
    i8 32, label %200
    i8 9, label %200
  ]

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

201:                                              ; preds = %200
  %202 = load float, ptr %17, align 4, !tbaa !14
  store float %202, ptr %45, align 4, !tbaa !14
  %203 = load float, ptr %18, align 4, !tbaa !14
  store float %203, ptr %46, align 8, !tbaa !14
  %204 = load float, ptr %19, align 4, !tbaa !14
  store float %204, ptr %47, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %514

205:                                              ; preds = %200
  %206 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %515

207:                                              ; preds = %184
  %208 = getelementptr inbounds i8, ptr %142, i64 2
  %209 = load i8, ptr %208, align 1, !tbaa !5
  switch i8 %209, label %.thread115 [
    i8 32, label %210
    i8 9, label %210
  ]

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

211:                                              ; preds = %210
  %212 = load float, ptr %20, align 4, !tbaa !14
  store float %212, ptr %48, align 8, !tbaa !14
  %213 = load float, ptr %21, align 4, !tbaa !14
  store float %213, ptr %49, align 4, !tbaa !14
  %214 = load float, ptr %22, align 4, !tbaa !14
  store float %214, ptr %50, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  br label %514

215:                                              ; preds = %210
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  br label %515

217:                                              ; preds = %184
  %218 = getelementptr inbounds i8, ptr %142, i64 2
  %219 = load i8, ptr %218, align 1, !tbaa !5
  switch i8 %219, label %.thread115 [
    i8 32, label %227
    i8 9, label %227
  ]

220:                                              ; preds = %183
  %221 = getelementptr inbounds i8, ptr %142, i64 1
  %222 = load i8, ptr %221, align 1, !tbaa !5
  %223 = icmp eq i8 %222, 102
  br i1 %223, label %224, label %.thread115

224:                                              ; preds = %220
  %225 = getelementptr inbounds i8, ptr %142, i64 2
  %226 = load i8, ptr %225, align 1, !tbaa !5
  switch i8 %226, label %.thread115 [
    i8 32, label %227
    i8 9, label %227
  ]

227:                                              ; preds = %224, %224, %217, %217
  %228 = getelementptr inbounds i8, ptr %142, i64 2
  store ptr %228, ptr %10, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #8
  invoke void @_ZN7tinyobjL10parseReal3EPfS0_S0_PPKcddd(ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %10, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %229 unwind label %233

229:                                              ; preds = %227
  %230 = load float, ptr %23, align 4, !tbaa !14
  store float %230, ptr %51, align 4, !tbaa !14
  %231 = load float, ptr %24, align 4, !tbaa !14
  store float %231, ptr %52, align 8, !tbaa !14
  %232 = load float, ptr %25, align 4, !tbaa !14
  store float %232, ptr %53, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #8
  br label %514

233:                                              ; preds = %227
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #8
  br label %515

235:                                              ; preds = %183
  %236 = getelementptr inbounds i8, ptr %142, i64 1
  %237 = load i8, ptr %236, align 1, !tbaa !5
  switch i8 %237, label %.thread115 [
    i8 105, label %238
    i8 115, label %254
  ]

238:                                              ; preds = %235
  %239 = getelementptr inbounds i8, ptr %142, i64 2
  %240 = load i8, ptr %239, align 1, !tbaa !5
  switch i8 %240, label %.thread115 [
    i8 32, label %241
    i8 9, label %241
  ]

241:                                              ; preds = %238, %238
  store ptr %239, ptr %10, align 8, !tbaa !10
  %242 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %243 unwind label %165

243:                                              ; preds = %241
  store float %242, ptr %40, align 8, !tbaa !16
  br label %514, !llvm.loop !8

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

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

248:                                              ; preds = %247
  %249 = load float, ptr %26, align 4, !tbaa !14
  store float %249, ptr %54, align 8, !tbaa !14
  %250 = load float, ptr %27, align 4, !tbaa !14
  store float %250, ptr %55, align 4, !tbaa !14
  %251 = load float, ptr %28, align 4, !tbaa !14
  store float %251, ptr %56, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  br label %514

252:                                              ; preds = %247
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  br label %515

254:                                              ; preds = %235
  %255 = getelementptr inbounds i8, ptr %142, i64 2
  %256 = load i8, ptr %255, align 1, !tbaa !5
  switch i8 %256, label %.thread115 [
    i8 32, label %257
    i8 9, label %257
  ]

257:                                              ; preds = %254, %254
  store ptr %255, ptr %10, align 8, !tbaa !10
  %258 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %259 unwind label %165

259:                                              ; preds = %257
  store float %258, ptr %41, align 4, !tbaa !32
  br label %514, !llvm.loop !8

.thread115:                                       ; preds = %235, %184, %207, %197, %187, %238, %217, %244, %183, %220, %224, %254
  %260 = phi i1 [ false, %254 ], [ true, %224 ], [ true, %220 ], [ false, %183 ], [ false, %244 ], [ false, %217 ], [ false, %238 ], [ false, %187 ], [ false, %197 ], [ false, %207 ], [ false, %184 ], [ false, %235 ]
  %261 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.19, i64 noundef 5) #9
  %262 = icmp eq i32 %261, 0
  br i1 %262, label %263, label %269

263:                                              ; preds = %.thread115
  %264 = getelementptr inbounds i8, ptr %142, i64 5
  %265 = load i8, ptr %264, align 1, !tbaa !5
  switch i8 %265, label %269 [
    i8 32, label %266
    i8 9, label %266
  ]

266:                                              ; preds = %263, %263
  %267 = getelementptr inbounds i8, ptr %142, i64 6
  store ptr %267, ptr %10, align 8, !tbaa !10
  %268 = call noundef i32 @_ZN7tinyobjL8parseIntEPPKc(ptr noundef nonnull %10)
  store i32 %268, ptr %57, align 8, !tbaa !33
  br label %514, !llvm.loop !8

269:                                              ; preds = %263, %.thread115
  %270 = icmp eq i8 %145, 100
  br i1 %270, label %271, label %277

271:                                              ; preds = %269
  %272 = getelementptr inbounds i8, ptr %142, i64 1
  %273 = load i8, ptr %272, align 1, !tbaa !5
  switch i8 %273, label %277 [
    i8 32, label %274
    i8 9, label %274
  ]

274:                                              ; preds = %271, %271
  store ptr %272, ptr %10, align 8, !tbaa !10
  %275 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %276 unwind label %165

276:                                              ; preds = %274
  store float %275, ptr %58, align 4, !tbaa !34
  br i1 %.041.ph, label %.invoke145, label %514, !llvm.loop !8

277:                                              ; preds = %271, %269
  br i1 %260, label %278, label %295

278:                                              ; preds = %277
  %279 = getelementptr inbounds i8, ptr %142, i64 1
  %280 = load i8, ptr %279, align 1, !tbaa !5
  %281 = icmp eq i8 %280, 114
  br i1 %281, label %282, label %295

282:                                              ; preds = %278
  %283 = getelementptr inbounds i8, ptr %142, i64 2
  %284 = load i8, ptr %283, align 1, !tbaa !5
  switch i8 %284, label %295 [
    i8 32, label %285
    i8 9, label %285
  ]

285:                                              ; preds = %282, %282
  store ptr %283, ptr %10, align 8, !tbaa !10
  br i1 %.039.ph, label %.invoke145, label %291

.invoke145:                                       ; preds = %285, %276
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull @.str.20)
          to label %.invoke144 unwind label %165

.invoke144:                                       ; preds = %.invoke145
  %287 = 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) %286, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %.invoke143 unwind label %165

.invoke143:                                       ; preds = %.invoke144
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %287, ptr noundef nonnull @.str.21)
          to label %.invoke142 unwind label %165

.invoke142:                                       ; preds = %.invoke143
  %289 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %288, i64 noundef %100)
          to label %.invoke141 unwind label %165

.invoke141:                                       ; preds = %.invoke142
  %290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %289, ptr noundef nonnull @.str.22)
          to label %514 unwind label %165, !llvm.loop !8

291:                                              ; preds = %285
  %292 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %293 unwind label %165

293:                                              ; preds = %291
  %294 = fsub float 1.000000e+00, %292
  store float %294, ptr %58, align 4, !tbaa !34
  br label %514, !llvm.loop !8

295:                                              ; preds = %282, %278, %277
  %296 = icmp eq i8 %145, 80
  br i1 %296, label %297, label %.thread139

297:                                              ; preds = %295
  %298 = getelementptr inbounds i8, ptr %142, i64 1
  %299 = load i8, ptr %298, align 1, !tbaa !5
  switch i8 %299, label %.thread139 [
    i8 114, label %300
    i8 109, label %306
    i8 115, label %312
    i8 99, label %318
  ]

300:                                              ; preds = %297
  %301 = getelementptr inbounds i8, ptr %142, i64 2
  %302 = load i8, ptr %301, align 1, !tbaa !5
  switch i8 %302, label %.thread139 [
    i8 32, label %303
    i8 9, label %303
  ]

303:                                              ; preds = %300, %300
  store ptr %301, ptr %10, align 8, !tbaa !10
  %304 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %305 unwind label %165

305:                                              ; preds = %303
  store float %304, ptr %60, align 8, !tbaa !35
  br label %514, !llvm.loop !8

306:                                              ; preds = %297
  %307 = getelementptr inbounds i8, ptr %142, i64 2
  %308 = load i8, ptr %307, align 1, !tbaa !5
  switch i8 %308, label %.thread139 [
    i8 32, label %309
    i8 9, label %309
  ]

309:                                              ; preds = %306, %306
  store ptr %307, ptr %10, align 8, !tbaa !10
  %310 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %311 unwind label %165

311:                                              ; preds = %309
  store float %310, ptr %61, align 4, !tbaa !36
  br label %514, !llvm.loop !8

312:                                              ; preds = %297
  %313 = getelementptr inbounds i8, ptr %142, i64 2
  %314 = load i8, ptr %313, align 1, !tbaa !5
  switch i8 %314, label %.thread139 [
    i8 32, label %315
    i8 9, label %315
  ]

315:                                              ; preds = %312, %312
  store ptr %313, ptr %10, align 8, !tbaa !10
  %316 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %317 unwind label %165

317:                                              ; preds = %315
  store float %316, ptr %62, align 8, !tbaa !37
  br label %514, !llvm.loop !8

318:                                              ; preds = %297
  %319 = getelementptr inbounds i8, ptr %142, i64 2
  %320 = load i8, ptr %319, align 1, !tbaa !5
  switch i8 %320, label %.thread139 [
    i8 32, label %321
    i8 9, label %321
  ]

321:                                              ; preds = %318, %318
  store ptr %319, ptr %10, align 8, !tbaa !10
  %322 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %323 unwind label %165

323:                                              ; preds = %321
  store float %322, ptr %63, align 4, !tbaa !38
  br label %514, !llvm.loop !8

.thread139:                                       ; preds = %297, %300, %306, %312, %295, %318
  %324 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 3) #9
  %325 = icmp eq i32 %324, 0
  br i1 %325, label %326, label %333

326:                                              ; preds = %.thread139
  %327 = getelementptr inbounds i8, ptr %142, i64 3
  %328 = load i8, ptr %327, align 1, !tbaa !5
  switch i8 %328, label %333 [
    i8 32, label %329
    i8 9, label %329
  ]

329:                                              ; preds = %326, %326
  %330 = getelementptr inbounds i8, ptr %142, i64 4
  store ptr %330, ptr %10, align 8, !tbaa !10
  %331 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %332 unwind label %165

332:                                              ; preds = %329
  store float %331, ptr %64, align 8, !tbaa !39
  br label %514, !llvm.loop !8

333:                                              ; preds = %326, %.thread139
  %334 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.24, i64 noundef 5) #9
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %336, label %343

336:                                              ; preds = %333
  %337 = getelementptr inbounds i8, ptr %142, i64 5
  %338 = load i8, ptr %337, align 1, !tbaa !5
  switch i8 %338, label %343 [
    i8 32, label %339
    i8 9, label %339
  ]

339:                                              ; preds = %336, %336
  %340 = getelementptr inbounds i8, ptr %142, i64 6
  store ptr %340, ptr %10, align 8, !tbaa !10
  %341 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %342 unwind label %165

342:                                              ; preds = %339
  store float %341, ptr %65, align 4, !tbaa !40
  br label %514, !llvm.loop !8

343:                                              ; preds = %336, %333
  %344 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.25, i64 noundef 6) #9
  %345 = icmp eq i32 %344, 0
  br i1 %345, label %346, label %353

346:                                              ; preds = %343
  %347 = getelementptr inbounds i8, ptr %142, i64 6
  %348 = load i8, ptr %347, align 1, !tbaa !5
  switch i8 %348, label %353 [
    i8 32, label %349
    i8 9, label %349
  ]

349:                                              ; preds = %346, %346
  %350 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %350, ptr %10, align 8, !tbaa !10
  %351 = invoke noundef float @_ZN7tinyobjL9parseRealEPPKcd(ptr noundef nonnull %10, double noundef 0.000000e+00)
          to label %352 unwind label %165

352:                                              ; preds = %349
  store float %351, ptr %66, align 8, !tbaa !41
  br label %514, !llvm.loop !8

353:                                              ; preds = %346, %343
  %354 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.26, i64 noundef 6) #9
  %355 = icmp eq i32 %354, 0
  br i1 %355, label %356, label %361

356:                                              ; preds = %353
  %357 = getelementptr inbounds i8, ptr %142, i64 6
  %358 = load i8, ptr %357, align 1, !tbaa !5
  switch i8 %358, label %361 [
    i8 32, label %359
    i8 9, label %359
  ]

359:                                              ; preds = %356, %356
  %360 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %360, ptr %10, align 8, !tbaa !10
  br label %.invoke

361:                                              ; preds = %356, %353
  %362 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 6) #9
  %363 = icmp eq i32 %362, 0
  br i1 %363, label %364, label %372

364:                                              ; preds = %361
  %365 = getelementptr inbounds i8, ptr %142, i64 6
  %366 = load i8, ptr %365, align 1, !tbaa !5
  switch i8 %366, label %372 [
    i8 32, label %367
    i8 9, label %367
  ]

367:                                              ; preds = %364, %364
  %368 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %368, ptr %10, align 8, !tbaa !10
  %369 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %69, ptr noundef nonnull %70, ptr noundef nonnull %368)
          to label %370 unwind label %165

370:                                              ; preds = %367
  br i1 %.043.ph, label %514, label %371, !llvm.loop !8

371:                                              ; preds = %370
  store <2 x float> <float 0x3FE3333340000000, float 0x3FE3333340000000>, ptr %45, align 4, !tbaa !14
  store float 0x3FE3333340000000, ptr %47, align 4, !tbaa !14
  br label %514, !llvm.loop !8

372:                                              ; preds = %364, %361
  %373 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.28, i64 noundef 6) #9
  %374 = icmp eq i32 %373, 0
  br i1 %374, label %375, label %380

375:                                              ; preds = %372
  %376 = getelementptr inbounds i8, ptr %142, i64 6
  %377 = load i8, ptr %376, align 1, !tbaa !5
  switch i8 %377, label %380 [
    i8 32, label %378
    i8 9, label %378
  ]

378:                                              ; preds = %375, %375
  %379 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %379, ptr %10, align 8, !tbaa !10
  br label %.invoke

380:                                              ; preds = %375, %372
  %381 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.29, i64 noundef 6) #9
  %382 = icmp eq i32 %381, 0
  br i1 %382, label %383, label %388

383:                                              ; preds = %380
  %384 = getelementptr inbounds i8, ptr %142, i64 6
  %385 = load i8, ptr %384, align 1, !tbaa !5
  switch i8 %385, label %388 [
    i8 32, label %386
    i8 9, label %386
  ]

386:                                              ; preds = %383, %383
  %387 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %387, ptr %10, align 8, !tbaa !10
  br label %.invoke

388:                                              ; preds = %383, %380
  %389 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.30, i64 noundef 8) #9
  %390 = icmp eq i32 %389, 0
  br i1 %390, label %394, label %391

391:                                              ; preds = %388
  %392 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.31, i64 noundef 8) #9
  %393 = icmp eq i32 %392, 0
  br i1 %393, label %394, label %399

394:                                              ; preds = %391, %388
  %395 = getelementptr inbounds i8, ptr %142, i64 8
  %396 = load i8, ptr %395, align 1, !tbaa !5
  switch i8 %396, label %399 [
    i8 32, label %397
    i8 9, label %397
  ]

397:                                              ; preds = %394, %394
  %398 = getelementptr inbounds i8, ptr %142, i64 9
  store ptr %398, ptr %10, align 8, !tbaa !10
  br label %.invoke

399:                                              ; preds = %394, %391
  %400 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.32, i64 noundef 4) #9
  %401 = icmp eq i32 %400, 0
  br i1 %401, label %402, label %407

402:                                              ; preds = %399
  %403 = getelementptr inbounds i8, ptr %142, i64 4
  %404 = load i8, ptr %403, align 1, !tbaa !5
  switch i8 %404, label %407 [
    i8 32, label %405
    i8 9, label %405
  ]

405:                                              ; preds = %402, %402
  %406 = getelementptr inbounds i8, ptr %142, i64 5
  store ptr %406, ptr %10, align 8, !tbaa !10
  br label %.invoke

407:                                              ; preds = %402, %399
  %408 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.33, i64 noundef 5) #9
  %409 = icmp eq i32 %408, 0
  br i1 %409, label %410, label %419

410:                                              ; preds = %407
  %411 = getelementptr inbounds i8, ptr %142, i64 5
  %412 = load i8, ptr %411, align 1, !tbaa !5
  switch i8 %412, label %419 [
    i8 32, label %413
    i8 9, label %413
  ]

413:                                              ; preds = %410, %410
  %414 = getelementptr inbounds i8, ptr %142, i64 6
  store ptr %414, ptr %10, align 8, !tbaa !10
  %415 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull %414)
          to label %416 unwind label %165

416:                                              ; preds = %413
  %417 = load ptr, ptr %10, align 8, !tbaa !10
  %418 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %77, ptr noundef nonnull %78, ptr noundef %417)
          to label %514 unwind label %165, !llvm.loop !8

419:                                              ; preds = %410, %407
  %420 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.34, i64 noundef 8) #9
  %421 = icmp eq i32 %420, 0
  br i1 %421, label %425, label %422

422:                                              ; preds = %419
  %423 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.35, i64 noundef 8) #9
  %424 = icmp eq i32 %423, 0
  br i1 %424, label %425, label %430

425:                                              ; preds = %422, %419
  %426 = getelementptr inbounds i8, ptr %142, i64 8
  %427 = load i8, ptr %426, align 1, !tbaa !5
  switch i8 %427, label %430 [
    i8 32, label %428
    i8 9, label %428
  ]

428:                                              ; preds = %425, %425
  %429 = getelementptr inbounds i8, ptr %142, i64 9
  store ptr %429, ptr %10, align 8, !tbaa !10
  br label %.invoke

430:                                              ; preds = %425, %422
  %431 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.36, i64 noundef 4) #9
  %432 = icmp eq i32 %431, 0
  br i1 %432, label %433, label %438

433:                                              ; preds = %430
  %434 = getelementptr inbounds i8, ptr %142, i64 4
  %435 = load i8, ptr %434, align 1, !tbaa !5
  switch i8 %435, label %438 [
    i8 32, label %436
    i8 9, label %436
  ]

436:                                              ; preds = %433, %433
  %437 = getelementptr inbounds i8, ptr %142, i64 5
  store ptr %437, ptr %10, align 8, !tbaa !10
  br label %.invoke

438:                                              ; preds = %433, %430
  %439 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.37, i64 noundef 4) #9
  %440 = icmp eq i32 %439, 0
  br i1 %440, label %441, label %446

441:                                              ; preds = %438
  %442 = getelementptr inbounds i8, ptr %142, i64 4
  %443 = load i8, ptr %442, align 1, !tbaa !5
  switch i8 %443, label %446 [
    i8 32, label %444
    i8 9, label %444
  ]

444:                                              ; preds = %441, %441
  %445 = getelementptr inbounds i8, ptr %142, i64 5
  store ptr %445, ptr %10, align 8, !tbaa !10
  br label %.invoke

446:                                              ; preds = %441, %438
  %447 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.38, i64 noundef 6) #9
  %448 = icmp eq i32 %447, 0
  br i1 %448, label %449, label %454

449:                                              ; preds = %446
  %450 = getelementptr inbounds i8, ptr %142, i64 6
  %451 = load i8, ptr %450, align 1, !tbaa !5
  switch i8 %451, label %454 [
    i8 32, label %452
    i8 9, label %452
  ]

452:                                              ; preds = %449, %449
  %453 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %453, ptr %10, align 8, !tbaa !10
  br label %.invoke

454:                                              ; preds = %449, %446
  %455 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.39, i64 noundef 6) #9
  %456 = icmp eq i32 %455, 0
  br i1 %456, label %457, label %462

457:                                              ; preds = %454
  %458 = getelementptr inbounds i8, ptr %142, i64 6
  %459 = load i8, ptr %458, align 1, !tbaa !5
  switch i8 %459, label %462 [
    i8 32, label %460
    i8 9, label %460
  ]

460:                                              ; preds = %457, %457
  %461 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %461, ptr %10, align 8, !tbaa !10
  br label %.invoke

462:                                              ; preds = %457, %454
  %463 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.40, i64 noundef 6) #9
  %464 = icmp eq i32 %463, 0
  br i1 %464, label %465, label %470

465:                                              ; preds = %462
  %466 = getelementptr inbounds i8, ptr %142, i64 6
  %467 = load i8, ptr %466, align 1, !tbaa !5
  switch i8 %467, label %470 [
    i8 32, label %468
    i8 9, label %468
  ]

468:                                              ; preds = %465, %465
  %469 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %469, ptr %10, align 8, !tbaa !10
  br label %.invoke

470:                                              ; preds = %465, %462
  %471 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.41, i64 noundef 6) #9
  %472 = icmp eq i32 %471, 0
  br i1 %472, label %473, label %478

473:                                              ; preds = %470
  %474 = getelementptr inbounds i8, ptr %142, i64 6
  %475 = load i8, ptr %474, align 1, !tbaa !5
  switch i8 %475, label %478 [
    i8 32, label %476
    i8 9, label %476
  ]

476:                                              ; preds = %473, %473
  %477 = getelementptr inbounds i8, ptr %142, i64 7
  store ptr %477, ptr %10, align 8, !tbaa !10
  br label %.invoke

478:                                              ; preds = %473, %470
  %479 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %142, ptr noundef nonnull dereferenceable(1) @.str.42, i64 noundef 4) #9
  %480 = icmp eq i32 %479, 0
  br i1 %480, label %481, label %490

481:                                              ; preds = %478
  %482 = getelementptr inbounds i8, ptr %142, i64 4
  %483 = load i8, ptr %482, align 1, !tbaa !5
  switch i8 %483, label %490 [
    i8 32, label %484
    i8 9, label %484
  ]

484:                                              ; preds = %481, %481
  %485 = getelementptr inbounds i8, ptr %142, i64 5
  store ptr %485, ptr %10, align 8, !tbaa !10
  br label %.invoke

.invoke:                                          ; preds = %359, %378, %386, %397, %405, %428, %436, %444, %452, %460, %468, %476, %484
  %486 = phi ptr [ %91, %484 ], [ %89, %476 ], [ %87, %468 ], [ %85, %460 ], [ %83, %452 ], [ %81, %444 ], [ %79, %436 ], [ %79, %428 ], [ %75, %405 ], [ %75, %397 ], [ %73, %386 ], [ %71, %378 ], [ %67, %359 ]
  %487 = phi ptr [ %92, %484 ], [ %90, %476 ], [ %88, %468 ], [ %86, %460 ], [ %84, %452 ], [ %82, %444 ], [ %80, %436 ], [ %80, %428 ], [ %76, %405 ], [ %76, %397 ], [ %74, %386 ], [ %72, %378 ], [ %68, %359 ]
  %488 = phi ptr [ %485, %484 ], [ %477, %476 ], [ %469, %468 ], [ %461, %460 ], [ %453, %452 ], [ %445, %444 ], [ %437, %436 ], [ %429, %428 ], [ %406, %405 ], [ %398, %397 ], [ %387, %386 ], [ %379, %378 ], [ %360, %359 ]
  %489 = invoke noundef zeroext i1 @_ZN7tinyobj25ParseTextureNameAndOptionEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_16texture_option_tEPKc(ptr noundef nonnull %486, ptr noundef nonnull %487, ptr noundef nonnull %488)
          to label %514 unwind label %165, !llvm.loop !8

490:                                              ; preds = %481, %478
  %491 = call noundef ptr @strchr(ptr noundef nonnull dereferenceable(1) %142, i32 noundef 32) #9
  %.not92 = icmp eq ptr %491, null
  br i1 %.not92, label %492, label %.thread125

492:                                              ; preds = %490
  %493 = call noundef ptr @strchr(ptr noundef nonnull dereferenceable(1) %142, i32 noundef 9) #9
  %.not93 = icmp eq ptr %493, null
  br i1 %.not93, label %514, label %.thread125

.thread125:                                       ; preds = %490, %492
  %.045128 = phi ptr [ %493, %492 ], [ %491, %490 ]
  %494 = ptrtoint ptr %.045128 to i64
  %495 = ptrtoint ptr %142 to i64
  %496 = sub i64 %494, %495
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcmRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull %142, i64 noundef %496, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %497 unwind label %503

497:                                              ; preds = %.thread125
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #8
  %498 = getelementptr inbounds i8, ptr %.045128, i64 1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %32) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull %498, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %499 unwind label %505

499:                                              ; preds = %497
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %33) #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) %33, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %500 unwind label %507

500:                                              ; preds = %499
  %501 = 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) %93, ptr noundef nonnull align 8 dereferenceable(64) %33)
          to label %502 unwind label %509

502:                                              ; preds = %500
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %33) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  br label %514

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

505:                                              ; preds = %497
  %506 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %32) #8
  br label %512

507:                                              ; preds = %499
  %508 = landingpad { ptr, i32 }
          cleanup
  br label %511

509:                                              ; preds = %500
  %510 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev(ptr noundef nonnull align 8 dereferenceable(64) %33) #8
  br label %511

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

512:                                              ; preds = %511, %505
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %511 ], [ %506, %505 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %513

513:                                              ; preds = %512, %503
  %.pn94.pn.pn = phi { ptr, i32 } [ %.pn94.pn, %512 ], [ %504, %503 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  br label %515

514:                                              ; preds = %.invoke141, %.invoke, %492, %502, %416, %370, %371, %293, %276, %144, %144, %352, %342, %332, %323, %317, %311, %305, %266, %259, %248, %243, %229, %211, %201, %191, %181
  %.144 = phi i1 [ %.043.ph, %181 ], [ %.043.ph, %191 ], [ true, %201 ], [ %.043.ph, %211 ], [ %.043.ph, %229 ], [ %.043.ph, %243 ], [ %.043.ph, %248 ], [ %.043.ph, %259 ], [ %.043.ph, %266 ], [ %.043.ph, %305 ], [ %.043.ph, %311 ], [ %.043.ph, %317 ], [ %.043.ph, %323 ], [ %.043.ph, %332 ], [ %.043.ph, %342 ], [ %.043.ph, %352 ], [ %.043.ph, %144 ], [ %.043.ph, %144 ], [ %.043.ph, %276 ], [ %.043.ph, %293 ], [ false, %371 ], [ true, %370 ], [ %.043.ph, %416 ], [ %.043.ph, %502 ], [ %.043.ph, %492 ], [ %.043.ph, %.invoke ], [ %.043.ph, %.invoke141 ]
  %.142 = phi i1 [ false, %181 ], [ %.041.ph, %191 ], [ %.041.ph, %201 ], [ %.041.ph, %211 ], [ %.041.ph, %229 ], [ %.041.ph, %243 ], [ %.041.ph, %248 ], [ %.041.ph, %259 ], [ %.041.ph, %266 ], [ %.041.ph, %305 ], [ %.041.ph, %311 ], [ %.041.ph, %317 ], [ %.041.ph, %323 ], [ %.041.ph, %332 ], [ %.041.ph, %342 ], [ %.041.ph, %352 ], [ %.041.ph, %144 ], [ %.041.ph, %144 ], [ false, %276 ], [ true, %293 ], [ %.041.ph, %371 ], [ %.041.ph, %370 ], [ %.041.ph, %416 ], [ %.041.ph, %502 ], [ %.041.ph, %492 ], [ %.041.ph, %.invoke ], [ true, %.invoke141 ]
  %.140 = phi i1 [ false, %181 ], [ %.039.ph, %191 ], [ %.039.ph, %201 ], [ %.039.ph, %211 ], [ %.039.ph, %229 ], [ %.039.ph, %243 ], [ %.039.ph, %248 ], [ %.039.ph, %259 ], [ %.039.ph, %266 ], [ %.039.ph, %305 ], [ %.039.ph, %311 ], [ %.039.ph, %317 ], [ %.039.ph, %323 ], [ %.039.ph, %332 ], [ %.039.ph, %342 ], [ %.039.ph, %352 ], [ %.039.ph, %144 ], [ %.039.ph, %144 ], [ true, %276 ], [ false, %293 ], [ %.039.ph, %371 ], [ %.039.ph, %370 ], [ %.039.ph, %416 ], [ %.039.ph, %502 ], [ %.039.ph, %492 ], [ %.039.ph, %.invoke ], [ true, %.invoke141 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %.outer

515:                                              ; preds = %513, %252, %233, %215, %205, %195, %182, %165, %164
  %.pn100.pn = phi { ptr, i32 } [ %.pn100, %182 ], [ %166, %165 ], [ %.pn98, %164 ], [ %196, %195 ], [ %206, %205 ], [ %216, %215 ], [ %234, %233 ], [ %253, %252 ], [ %.pn94.pn.pn, %513 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %534

516:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #8
  %517 = call noundef i64 @_ZNKSt6vectorIN7tinyobj10material_tESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  %518 = trunc i64 %517 to i32
  store i32 %518, ptr %35, 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) %34, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %519 unwind label %526

519:                                              ; preds = %516
  %520 = 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) %34)
          to label %521 unwind label %528

521:                                              ; preds = %519
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %34) #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 %522 unwind label %.loopexit.split-lp

522:                                              ; preds = %521
  %.not87 = icmp eq ptr %3, null
  br i1 %.not87, label %533, label %523

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

524:                                              ; preds = %523
  %525 = 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) %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  br label %533

526:                                              ; preds = %516
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %530

528:                                              ; preds = %519
  %529 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %34) #8
  br label %530

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

531:                                              ; preds = %523
  %532 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  br label %534

533:                                              ; preds = %524, %522
  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

534:                                              ; preds = %.loopexit, %.loopexit.split-lp, %531, %530, %515, %111
  %.pn100.pn.pn = phi { ptr, i32 } [ %.pn100.pn, %515 ], [ %112, %111 ], [ %532, %531 ], [ %.pn, %530 ], [ %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 %535

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

536:                                              ; preds = %535, %107
  %.pn100.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn100.pn.pn.pn, %535 ], [ %108, %107 ]
  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 } %.pn100.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: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #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: 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(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: 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 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,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass