; LLVM IR from Overload-Technologies/Overload :: Dependencies/assimp/code/PostProcessing (RemoveRedundantMaterials)

; 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::vector" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.3" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%"struct.std::_List_const_iterator" = type { ptr }
%"struct.std::_List_iterator" = type { ptr }
%struct.aiScene = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, %struct.aiString, i32, ptr, ptr }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::RemoveRedundantMatsProcess" = type { %"class.Assimp::BaseProcess", %"class.std::__cxx11::basic_string" }
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%"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] }

@.str.2 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp26RemoveRedundantMatsProcess7ExecuteEP7aiScene(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.std::allocator.3", align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"struct.std::_Bit_reference", align 8
  %15 = alloca %"class.std::__cxx11::list", align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca %struct.aiString, align 4
  %19 = alloca %"struct.std::_List_const_iterator", align 8
  %20 = alloca %"struct.std::_List_iterator", align 8
  %21 = alloca %"struct.std::_List_iterator", align 8
  %22 = alloca %"struct.std::_List_iterator", align 8
  %23 = alloca %"struct.std::_List_const_iterator", align 8
  %24 = alloca %"struct.std::_List_iterator", align 8
  %25 = alloca i32, align 4
  %26 = alloca %"struct.std::_Bit_reference", align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca %"struct.std::_Bit_reference", align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca %"struct.std::_Bit_reference", align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca %"struct.std::_Bit_reference", align 8
  %39 = alloca i32, align 4
  %40 = alloca %struct.aiString, align 4
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %43 = load ptr, ptr %3, align 8
  %44 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %44, ptr noundef @.str.2)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  store i32 0, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store i32 0, ptr %6, align 4, !tbaa !9
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.aiScene, ptr %45, i32 0, i32 4
  %47 = load i32, ptr %46, align 8, !tbaa !11
  %48 = icmp eq i32 %47, 0
  br i1 %48, label %49, label %50

49:                                               ; preds = %2
  store i32 1, ptr %7, align 4
  br label %574

50:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 40, ptr %8) #10
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.aiScene, ptr %51, i32 0, i32 4
  %53 = load i32, ptr %52, align 8, !tbaa !11
  %54 = zext i32 %53 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #10
  store i8 0, ptr %9, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #10
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #10
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %54, ptr noundef nonnull align 1 dereferenceable(1) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %55 unwind label %63

55:                                               ; preds = %50
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %56

56:                                               ; preds = %85, %55
  %57 = load i32, ptr %13, align 4, !tbaa !9
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.aiScene, ptr %58, i32 0, i32 2
  %60 = load i32, ptr %59, align 8, !tbaa !16
  %61 = icmp ult i32 %57, %60
  br i1 %61, label %67, label %62

62:                                               ; preds = %56
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  br label %92

63:                                               ; preds = %50
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %11, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #10
  br label %580

67:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #10
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.aiScene, ptr %68, i32 0, i32 3
  %70 = load ptr, ptr %69, align 8, !tbaa !17
  %71 = load i32, ptr %13, align 4, !tbaa !9
  %72 = zext i32 %71 to i64
  %73 = getelementptr inbounds ptr, ptr %70, i64 %72
  %74 = load ptr, ptr %73, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.aiMesh, ptr %74, i32 0, i32 13
  %76 = load i32, ptr %75, align 8, !tbaa !18
  %77 = zext i32 %76 to i64
  %78 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %77)
          to label %79 unwind label %88

79:                                               ; preds = %67
  %80 = getelementptr inbounds { ptr, i64 }, ptr %14, i32 0, i32 0
  %81 = extractvalue { ptr, i64 } %78, 0
  store ptr %81, ptr %80, align 8
  %82 = getelementptr inbounds { ptr, i64 }, ptr %14, i32 0, i32 1
  %83 = extractvalue { ptr, i64 } %78, 1
  store i64 %83, ptr %82, align 8
  %84 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %14, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #10
  br label %85

85:                                               ; preds = %79
  %86 = load i32, ptr %13, align 4, !tbaa !9
  %87 = add i32 %86, 1
  store i32 %87, ptr %13, align 4, !tbaa !9
  br label %56, !llvm.loop !24

88:                                               ; preds = %67
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %11, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  br label %579

92:                                               ; preds = %62
  %93 = getelementptr inbounds %"class.Assimp::RemoveRedundantMatsProcess", ptr %43, i32 0, i32 1
  %94 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %93) #10
  %95 = icmp ne i64 %94, 0
  br i1 %95, label %96, label %194

96:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #10
  call void @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  %97 = getelementptr inbounds %"class.Assimp::RemoveRedundantMatsProcess", ptr %43, i32 0, i32 1
  invoke void @_ZN6Assimp20ConvertListToStringsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4listIS5_SaIS5_EEE(ptr noundef nonnull align 8 dereferenceable(32) %97, ptr noundef nonnull align 8 dereferenceable(24) %15)
          to label %98 unwind label %106

98:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %187, %98
  %100 = load i32, ptr %16, align 4, !tbaa !9
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.aiScene, ptr %101, i32 0, i32 4
  %103 = load i32, ptr %102, align 8, !tbaa !11
  %104 = icmp ult i32 %100, %103
  br i1 %104, label %110, label %105

105:                                              ; preds = %99
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %192

106:                                              ; preds = %96
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %11, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %12, align 4
  br label %193

110:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.aiScene, ptr %111, i32 0, i32 5
  %113 = load ptr, ptr %112, align 8, !tbaa !26
  %114 = load i32, ptr %16, align 4, !tbaa !9
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds ptr, ptr %113, i64 %115
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  store ptr %117, ptr %17, align 8, !tbaa !5
  %118 = load ptr, ptr %17, align 8, !tbaa !5
  %119 = icmp ne ptr %118, null
  br i1 %119, label %122, label %120

120:                                              ; preds = %110
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 97)
          to label %121 unwind label %163

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121, %110
  %123 = phi i1 [ true, %110 ], [ false, %121 ]
  call void @llvm.lifetime.start.p0(i64 1028, ptr %18) #10
  call void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028) %18) #10
  %124 = load ptr, ptr %17, align 8, !tbaa !5
  %125 = invoke noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16) %124, ptr noundef @.str.5, i32 noundef 0, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(1028) %18)
          to label %126 unwind label %167

126:                                              ; preds = %122
  %127 = getelementptr inbounds %struct.aiString, ptr %18, i32 0, i32 0
  %128 = load i32, ptr %127, align 4, !tbaa !27
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %186

130:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %131 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  %132 = getelementptr inbounds %"struct.std::_List_iterator", ptr %21, i32 0, i32 0
  store ptr %131, ptr %132, align 8
  %133 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  %134 = getelementptr inbounds %"struct.std::_List_iterator", ptr %22, i32 0, i32 0
  store ptr %133, ptr %134, align 8
  %135 = getelementptr inbounds %struct.aiString, ptr %18, i32 0, i32 1
  %136 = getelementptr inbounds %"struct.std::_List_iterator", ptr %21, i32 0, i32 0
  %137 = load ptr, ptr %136, align 8
  %138 = getelementptr inbounds %"struct.std::_List_iterator", ptr %22, i32 0, i32 0
  %139 = load ptr, ptr %138, align 8
  %140 = invoke ptr @_ZSt4findISt14_List_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEA1024_cET_S9_S9_RKT0_(ptr %137, ptr %139, ptr noundef nonnull align 1 dereferenceable(1024) %135)
          to label %141 unwind label %171

141:                                              ; preds = %130
  %142 = getelementptr inbounds %"struct.std::_List_iterator", ptr %20, i32 0, i32 0
  store ptr %140, ptr %142, align 8
  call void @_ZNSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKSt14_List_iteratorIS5_E(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %143 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  %144 = getelementptr inbounds %"struct.std::_List_iterator", ptr %24, i32 0, i32 0
  store ptr %143, ptr %144, align 8
  call void @_ZNSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKSt14_List_iteratorIS5_E(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  %145 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br i1 %145, label %146, label %184

146:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 1, ptr %25, align 4, !tbaa !9
  %147 = load ptr, ptr %17, align 8, !tbaa !5
  %148 = invoke noundef i32 @_ZN10aiMaterial11AddPropertyEPKijPKcjj(ptr noundef nonnull align 8 dereferenceable(16) %147, ptr noundef %25, i32 noundef 1, ptr noundef @.str.6, i32 noundef 0, i32 noundef 0)
          to label %149 unwind label %175

149:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #10
  %150 = load i32, ptr %16, align 4, !tbaa !9
  %151 = zext i32 %150 to i64
  %152 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %151)
          to label %153 unwind label %179

153:                                              ; preds = %149
  %154 = getelementptr inbounds { ptr, i64 }, ptr %26, i32 0, i32 0
  %155 = extractvalue { ptr, i64 } %152, 0
  store ptr %155, ptr %154, align 8
  %156 = getelementptr inbounds { ptr, i64 }, ptr %26, i32 0, i32 1
  %157 = extractvalue { ptr, i64 } %152, 1
  store i64 %157, ptr %156, align 8
  %158 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %26, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  %159 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %160 unwind label %175

160:                                              ; preds = %153
  %161 = getelementptr inbounds %struct.aiString, ptr %18, i32 0, i32 1
  invoke void @_ZN6Assimp6Logger12verboseDebugIJRA42_KcRA1024_cRA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %159, ptr noundef nonnull align 1 dereferenceable(42) @.str.7, ptr noundef nonnull align 1 dereferenceable(1024) %161, ptr noundef nonnull align 1 dereferenceable(2) @.str.8)
          to label %162 unwind label %175

162:                                              ; preds = %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %184

163:                                              ; preds = %120
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %11, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %12, align 4
  br label %191

167:                                              ; preds = %122
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %11, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %12, align 4
  br label %190

171:                                              ; preds = %130
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %11, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %185

175:                                              ; preds = %160, %153, %146
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %11, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %12, align 4
  br label %183

179:                                              ; preds = %149
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %11, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #10
  br label %183

183:                                              ; preds = %179, %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %185

184:                                              ; preds = %162, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %186

185:                                              ; preds = %183, %171
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %190

186:                                              ; preds = %184, %126
  call void @llvm.lifetime.end.p0(i64 1028, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  br label %187

187:                                              ; preds = %186
  %188 = load i32, ptr %16, align 4, !tbaa !9
  %189 = add i32 %188, 1
  store i32 %189, ptr %16, align 4, !tbaa !9
  br label %99, !llvm.loop !28

190:                                              ; preds = %185, %167
  call void @llvm.lifetime.end.p0(i64 1028, ptr %18) #10
  br label %191

191:                                              ; preds = %190, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %193

192:                                              ; preds = %105
  call void @_ZNSt7__cxx1110_List_baseINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #10
  br label %194

193:                                              ; preds = %191, %106
  call void @_ZNSt7__cxx1110_List_baseINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #10
  br label %579

194:                                              ; preds = %192, %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  %195 = load ptr, ptr %4, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.aiScene, ptr %195, i32 0, i32 4
  %197 = load i32, ptr %196, align 8, !tbaa !11
  %198 = zext i32 %197 to i64
  %199 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %198, i64 4)
  %200 = extractvalue { i64, i1 } %199, 1
  %201 = extractvalue { i64, i1 } %199, 0
  %202 = select i1 %200, i64 -1, i64 %201
  %203 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %202) #11
          to label %204 unwind label %212

204:                                              ; preds = %194
  store ptr %203, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %205

205:                                              ; preds = %221, %204
  %206 = load i32, ptr %28, align 4, !tbaa !9
  %207 = load ptr, ptr %4, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.aiScene, ptr %207, i32 0, i32 4
  %209 = load i32, ptr %208, align 8, !tbaa !11
  %210 = icmp ult i32 %206, %209
  br i1 %210, label %216, label %211

211:                                              ; preds = %205
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %224

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

216:                                              ; preds = %205
  %217 = load ptr, ptr %27, align 8, !tbaa !5
  %218 = load i32, ptr %28, align 4, !tbaa !9
  %219 = zext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  store i32 0, ptr %220, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %216
  %222 = load i32, ptr %28, align 4, !tbaa !9
  %223 = add i32 %222, 1
  store i32 %223, ptr %28, align 4, !tbaa !9
  br label %205, !llvm.loop !29

224:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  store i32 0, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.aiScene, ptr %225, i32 0, i32 4
  %227 = load i32, ptr %226, align 8, !tbaa !11
  %228 = zext i32 %227 to i64
  %229 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %228, i64 4)
  %230 = extractvalue { i64, i1 } %229, 1
  %231 = extractvalue { i64, i1 } %229, 0
  %232 = select i1 %230, i64 -1, i64 %231
  %233 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %232) #11
          to label %234 unwind label %242

234:                                              ; preds = %224
  store ptr %233, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %371, %234
  %236 = load i32, ptr %31, align 4, !tbaa !9
  %237 = load ptr, ptr %4, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.aiScene, ptr %237, i32 0, i32 4
  %239 = load i32, ptr %238, align 8, !tbaa !11
  %240 = icmp ult i32 %236, %239
  br i1 %240, label %246, label %241

241:                                              ; preds = %235
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %376

242:                                              ; preds = %570, %568, %566, %564, %399, %224
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %11, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %12, align 4
  br label %577

246:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #10
  %247 = load i32, ptr %31, align 4, !tbaa !9
  %248 = zext i32 %247 to i64
  %249 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %248)
          to label %250 unwind label %276

250:                                              ; preds = %246
  %251 = getelementptr inbounds { ptr, i64 }, ptr %32, i32 0, i32 0
  %252 = extractvalue { ptr, i64 } %249, 0
  store ptr %252, ptr %251, align 8
  %253 = getelementptr inbounds { ptr, i64 }, ptr %32, i32 0, i32 1
  %254 = extractvalue { ptr, i64 } %249, 1
  store i64 %254, ptr %253, align 8
  %255 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %32) #10
  %256 = xor i1 %255, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #10
  br i1 %256, label %257, label %280

257:                                              ; preds = %250
  %258 = load i32, ptr %6, align 4, !tbaa !9
  %259 = add i32 %258, 1
  store i32 %259, ptr %6, align 4, !tbaa !9
  %260 = load ptr, ptr %4, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.aiScene, ptr %260, i32 0, i32 5
  %262 = load ptr, ptr %261, align 8, !tbaa !26
  %263 = load i32, ptr %31, align 4, !tbaa !9
  %264 = zext i32 %263 to i64
  %265 = getelementptr inbounds ptr, ptr %262, i64 %264
  %266 = load ptr, ptr %265, align 8, !tbaa !5
  %267 = icmp eq ptr %266, null
  br i1 %267, label %269, label %268

268:                                              ; preds = %257
  call void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %266) #10
  call void @_ZdlPvm(ptr noundef %266, i64 noundef 16) #12
  br label %269

269:                                              ; preds = %268, %257
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.aiScene, ptr %270, i32 0, i32 5
  %272 = load ptr, ptr %271, align 8, !tbaa !26
  %273 = load i32, ptr %31, align 4, !tbaa !9
  %274 = zext i32 %273 to i64
  %275 = getelementptr inbounds ptr, ptr %272, i64 %274
  store ptr null, ptr %275, align 8, !tbaa !5
  br label %371

276:                                              ; preds = %246
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %11, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #10
  br label %375

280:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %281 = load ptr, ptr %4, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.aiScene, ptr %281, i32 0, i32 5
  %283 = load ptr, ptr %282, align 8, !tbaa !26
  %284 = load i32, ptr %31, align 4, !tbaa !9
  %285 = zext i32 %284 to i64
  %286 = getelementptr inbounds ptr, ptr %283, i64 %285
  %287 = load ptr, ptr %286, align 8, !tbaa !5
  %288 = invoke noundef i32 @_ZN6Assimp19ComputeMaterialHashEPK10aiMaterialb(ptr noundef %287, i1 noundef zeroext false)
          to label %289 unwind label %299

289:                                              ; preds = %280
  %290 = load ptr, ptr %30, align 8, !tbaa !5
  %291 = load i32, ptr %31, align 4, !tbaa !9
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %290, i64 %292
  store i32 %288, ptr %293, align 4, !tbaa !9
  store i32 %288, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %356, %289
  %295 = load i32, ptr %34, align 4, !tbaa !9
  %296 = load i32, ptr %31, align 4, !tbaa !9
  %297 = icmp ult i32 %295, %296
  br i1 %297, label %303, label %298

298:                                              ; preds = %294
  store i32 14, ptr %7, align 4
  br label %359

299:                                              ; preds = %280
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %11, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %12, align 4
  br label %374

303:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #10
  %304 = load i32, ptr %34, align 4, !tbaa !9
  %305 = zext i32 %304 to i64
  %306 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %305)
          to label %307 unwind label %351

307:                                              ; preds = %303
  %308 = getelementptr inbounds { ptr, i64 }, ptr %35, i32 0, i32 0
  %309 = extractvalue { ptr, i64 } %306, 0
  store ptr %309, ptr %308, align 8
  %310 = getelementptr inbounds { ptr, i64 }, ptr %35, i32 0, i32 1
  %311 = extractvalue { ptr, i64 } %306, 1
  store i64 %311, ptr %310, align 8
  %312 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %35) #10
  br i1 %312, label %313, label %321

313:                                              ; preds = %307
  %314 = load i32, ptr %33, align 4, !tbaa !9
  %315 = load ptr, ptr %30, align 8, !tbaa !5
  %316 = load i32, ptr %34, align 4, !tbaa !9
  %317 = zext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %315, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !9
  %320 = icmp eq i32 %314, %319
  br label %321

321:                                              ; preds = %313, %307
  %322 = phi i1 [ false, %307 ], [ %320, %313 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br i1 %322, label %323, label %355

323:                                              ; preds = %321
  %324 = load i32, ptr %5, align 4, !tbaa !9
  %325 = add i32 %324, 1
  store i32 %325, ptr %5, align 4, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !9
  %326 = load ptr, ptr %27, align 8, !tbaa !5
  %327 = load i32, ptr %34, align 4, !tbaa !9
  %328 = zext i32 %327 to i64
  %329 = getelementptr inbounds i32, ptr %326, i64 %328
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = load ptr, ptr %27, align 8, !tbaa !5
  %332 = load i32, ptr %31, align 4, !tbaa !9
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds i32, ptr %331, i64 %333
  store i32 %330, ptr %334, align 4, !tbaa !9
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.aiScene, ptr %335, i32 0, i32 5
  %337 = load ptr, ptr %336, align 8, !tbaa !26
  %338 = load i32, ptr %31, align 4, !tbaa !9
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds ptr, ptr %337, i64 %339
  %341 = load ptr, ptr %340, align 8, !tbaa !5
  %342 = icmp eq ptr %341, null
  br i1 %342, label %344, label %343

343:                                              ; preds = %323
  call void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %341) #10
  call void @_ZdlPvm(ptr noundef %341, i64 noundef 16) #12
  br label %344

344:                                              ; preds = %343, %323
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.aiScene, ptr %345, i32 0, i32 5
  %347 = load ptr, ptr %346, align 8, !tbaa !26
  %348 = load i32, ptr %31, align 4, !tbaa !9
  %349 = zext i32 %348 to i64
  %350 = getelementptr inbounds ptr, ptr %347, i64 %349
  store ptr null, ptr %350, align 8, !tbaa !5
  store i32 14, ptr %7, align 4
  br label %359

351:                                              ; preds = %303
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %11, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %374

355:                                              ; preds = %321
  br label %356

356:                                              ; preds = %355
  %357 = load i32, ptr %34, align 4, !tbaa !9
  %358 = add i32 %357, 1
  store i32 %358, ptr %34, align 4, !tbaa !9
  br label %294, !llvm.loop !30

359:                                              ; preds = %344, %298
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %360

360:                                              ; preds = %359
  %361 = load i32, ptr %33, align 4, !tbaa !9
  %362 = icmp ne i32 %361, 0
  br i1 %362, label %363, label %370

363:                                              ; preds = %360
  %364 = load i32, ptr %29, align 4, !tbaa !9
  %365 = add i32 %364, 1
  store i32 %365, ptr %29, align 4, !tbaa !9
  %366 = load ptr, ptr %27, align 8, !tbaa !5
  %367 = load i32, ptr %31, align 4, !tbaa !9
  %368 = zext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %366, i64 %368
  store i32 %364, ptr %369, align 4, !tbaa !9
  br label %370

370:                                              ; preds = %363, %360
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  br label %371

371:                                              ; preds = %370, %269
  %372 = load i32, ptr %31, align 4, !tbaa !9
  %373 = add i32 %372, 1
  store i32 %373, ptr %31, align 4, !tbaa !9
  br label %235, !llvm.loop !31

374:                                              ; preds = %351, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  br label %375

375:                                              ; preds = %374, %276
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %577

376:                                              ; preds = %241
  %377 = load i32, ptr %29, align 4, !tbaa !9
  %378 = icmp ult i32 %377, 1
  br i1 %378, label %379, label %390

379:                                              ; preds = %376
  %380 = load ptr, ptr %27, align 8, !tbaa !5
  %381 = icmp eq ptr %380, null
  br i1 %381, label %383, label %382

382:                                              ; preds = %379
  call void @_ZdaPv(ptr noundef %380) #12
  br label %383

383:                                              ; preds = %382, %379
  %384 = load ptr, ptr %30, align 8, !tbaa !5
  %385 = icmp eq ptr %384, null
  br i1 %385, label %387, label %386

386:                                              ; preds = %383
  call void @_ZdaPv(ptr noundef %384) #12
  br label %387

387:                                              ; preds = %386, %383
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.aiScene, ptr %388, i32 0, i32 4
  store i32 0, ptr %389, align 8, !tbaa !11
  store i32 1, ptr %7, align 4
  br label %573

390:                                              ; preds = %376
  %391 = load i32, ptr %29, align 4, !tbaa !9
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.aiScene, ptr %392, i32 0, i32 4
  %394 = load i32, ptr %393, align 8, !tbaa !11
  %395 = icmp ne i32 %391, %394
  br i1 %395, label %396, label %550

396:                                              ; preds = %390
  %397 = load i32, ptr %29, align 4, !tbaa !9
  %398 = icmp ugt i32 %397, 0
  br i1 %398, label %401, label %399

399:                                              ; preds = %396
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.9, ptr noundef @.str.4, i32 noundef 165)
          to label %400 unwind label %242

400:                                              ; preds = %399
  br label %401

401:                                              ; preds = %400, %396
  %402 = phi i1 [ true, %396 ], [ false, %400 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %403 = load i32, ptr %29, align 4, !tbaa !9
  %404 = zext i32 %403 to i64
  %405 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %404, i64 8)
  %406 = extractvalue { i64, i1 } %405, 1
  %407 = extractvalue { i64, i1 } %405, 0
  %408 = select i1 %406, i64 -1, i64 %407
  %409 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %408) #11
          to label %410 unwind label %422

410:                                              ; preds = %401
  store ptr %409, ptr %36, align 8, !tbaa !5
  %411 = load ptr, ptr %36, align 8, !tbaa !5
  %412 = load i32, ptr %29, align 4, !tbaa !9
  %413 = zext i32 %412 to i64
  %414 = mul i64 8, %413
  call void @llvm.memset.p0.i64(ptr align 8 %411, i8 0, i64 %414, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %494, %410
  %416 = load i32, ptr %37, align 4, !tbaa !9
  %417 = load ptr, ptr %4, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.aiScene, ptr %417, i32 0, i32 4
  %419 = load i32, ptr %418, align 8, !tbaa !11
  %420 = icmp ult i32 %416, %419
  br i1 %420, label %426, label %421

421:                                              ; preds = %415
  store i32 17, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  br label %498

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

426:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #10
  %427 = load i32, ptr %37, align 4, !tbaa !9
  %428 = zext i32 %427 to i64
  %429 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %428)
          to label %430 unwind label %438

430:                                              ; preds = %426
  %431 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 0
  %432 = extractvalue { ptr, i64 } %429, 0
  store ptr %432, ptr %431, align 8
  %433 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 1
  %434 = extractvalue { ptr, i64 } %429, 1
  store i64 %434, ptr %433, align 8
  %435 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %38) #10
  %436 = xor i1 %435, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #10
  br i1 %436, label %437, label %442

437:                                              ; preds = %430
  br label %494

438:                                              ; preds = %426
  %439 = landingpad { ptr, i32 }
          cleanup
  %440 = extractvalue { ptr, i32 } %439, 0
  store ptr %440, ptr %11, align 8
  %441 = extractvalue { ptr, i32 } %439, 1
  store i32 %441, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #10
  br label %497

442:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  %443 = load ptr, ptr %27, align 8, !tbaa !5
  %444 = load i32, ptr %37, align 4, !tbaa !9
  %445 = zext i32 %444 to i64
  %446 = getelementptr inbounds i32, ptr %443, i64 %445
  %447 = load i32, ptr %446, align 4, !tbaa !9
  store i32 %447, ptr %39, align 4, !tbaa !9
  %448 = load ptr, ptr %36, align 8, !tbaa !5
  %449 = load i32, ptr %39, align 4, !tbaa !9
  %450 = zext i32 %449 to i64
  %451 = getelementptr inbounds ptr, ptr %448, i64 %450
  %452 = load ptr, ptr %451, align 8, !tbaa !5
  %453 = icmp ne ptr %452, null
  br i1 %453, label %454, label %481

454:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 1028, ptr %40) #10
  call void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028) %40) #10
  %455 = load ptr, ptr %36, align 8, !tbaa !5
  %456 = load i32, ptr %39, align 4, !tbaa !9
  %457 = zext i32 %456 to i64
  %458 = getelementptr inbounds ptr, ptr %455, i64 %457
  %459 = load ptr, ptr %458, align 8, !tbaa !5
  %460 = invoke noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16) %459, ptr noundef @.str.5, i32 noundef 0, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(1028) %40)
          to label %461 unwind label %476

461:                                              ; preds = %454
  %462 = icmp ne i32 %460, 0
  br i1 %462, label %463, label %480

463:                                              ; preds = %461
  %464 = getelementptr inbounds %struct.aiString, ptr %40, i32 0, i32 1
  %465 = getelementptr inbounds [1024 x i8], ptr %464, i64 0, i64 0
  %466 = load i32, ptr %37, align 4, !tbaa !9
  %467 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %465, i64 noundef 1024, ptr noundef @.str.10, i32 noundef %466) #10
  %468 = getelementptr inbounds %struct.aiString, ptr %40, i32 0, i32 0
  store i32 %467, ptr %468, align 4, !tbaa !27
  %469 = load ptr, ptr %36, align 8, !tbaa !5
  %470 = load i32, ptr %39, align 4, !tbaa !9
  %471 = zext i32 %470 to i64
  %472 = getelementptr inbounds ptr, ptr %469, i64 %471
  %473 = load ptr, ptr %472, align 8, !tbaa !5
  %474 = invoke noundef i32 @_ZN10aiMaterial11AddPropertyEPK8aiStringPKcjj(ptr noundef nonnull align 8 dereferenceable(16) %473, ptr noundef %40, ptr noundef @.str.5, i32 noundef 0, i32 noundef 0)
          to label %475 unwind label %476

475:                                              ; preds = %463
  br label %480

476:                                              ; preds = %463, %454
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %11, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1028, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %497

480:                                              ; preds = %475, %461
  call void @llvm.lifetime.end.p0(i64 1028, ptr %40) #10
  br label %493

481:                                              ; preds = %442
  %482 = load ptr, ptr %4, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.aiScene, ptr %482, i32 0, i32 5
  %484 = load ptr, ptr %483, align 8, !tbaa !26
  %485 = load i32, ptr %37, align 4, !tbaa !9
  %486 = zext i32 %485 to i64
  %487 = getelementptr inbounds ptr, ptr %484, i64 %486
  %488 = load ptr, ptr %487, align 8, !tbaa !5
  %489 = load ptr, ptr %36, align 8, !tbaa !5
  %490 = load i32, ptr %39, align 4, !tbaa !9
  %491 = zext i32 %490 to i64
  %492 = getelementptr inbounds ptr, ptr %489, i64 %491
  store ptr %488, ptr %492, align 8, !tbaa !5
  br label %493

493:                                              ; preds = %481, %480
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %494

494:                                              ; preds = %493, %437
  %495 = load i32, ptr %37, align 4, !tbaa !9
  %496 = add i32 %495, 1
  store i32 %496, ptr %37, align 4, !tbaa !9
  br label %415, !llvm.loop !32

497:                                              ; preds = %476, %438
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  br label %549

498:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %499

499:                                              ; preds = %529, %498
  %500 = load i32, ptr %41, align 4, !tbaa !9
  %501 = load ptr, ptr %4, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.aiScene, ptr %501, i32 0, i32 2
  %503 = load i32, ptr %502, align 8, !tbaa !16
  %504 = icmp ult i32 %500, %503
  br i1 %504, label %506, label %505

505:                                              ; preds = %499
  store i32 20, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  br label %536

506:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %507 = load ptr, ptr %4, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.aiScene, ptr %507, i32 0, i32 3
  %509 = load ptr, ptr %508, align 8, !tbaa !17
  %510 = load i32, ptr %41, align 4, !tbaa !9
  %511 = zext i32 %510 to i64
  %512 = getelementptr inbounds ptr, ptr %509, i64 %511
  %513 = load ptr, ptr %512, align 8, !tbaa !5
  store ptr %513, ptr %42, align 8, !tbaa !5
  %514 = load ptr, ptr %42, align 8, !tbaa !5
  %515 = icmp ne ptr null, %514
  br i1 %515, label %518, label %516

516:                                              ; preds = %506
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 189)
          to label %517 unwind label %532

517:                                              ; preds = %516
  br label %518

518:                                              ; preds = %517, %506
  %519 = phi i1 [ true, %506 ], [ false, %517 ]
  %520 = load ptr, ptr %27, align 8, !tbaa !5
  %521 = load ptr, ptr %42, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.aiMesh, ptr %521, i32 0, i32 13
  %523 = load i32, ptr %522, align 8, !tbaa !18
  %524 = zext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %520, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !9
  %527 = load ptr, ptr %42, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.aiMesh, ptr %527, i32 0, i32 13
  store i32 %526, ptr %528, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %529

529:                                              ; preds = %518
  %530 = load i32, ptr %41, align 4, !tbaa !9
  %531 = add i32 %530, 1
  store i32 %531, ptr %41, align 4, !tbaa !9
  br label %499, !llvm.loop !33

532:                                              ; preds = %516
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %11, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  br label %549

536:                                              ; preds = %505
  %537 = load ptr, ptr %4, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.aiScene, ptr %537, i32 0, i32 5
  %539 = load ptr, ptr %538, align 8, !tbaa !26
  %540 = icmp eq ptr %539, null
  br i1 %540, label %542, label %541

541:                                              ; preds = %536
  call void @_ZdaPv(ptr noundef %539) #12
  br label %542

542:                                              ; preds = %541, %536
  %543 = load ptr, ptr %36, align 8, !tbaa !5
  %544 = load ptr, ptr %4, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.aiScene, ptr %544, i32 0, i32 5
  store ptr %543, ptr %545, align 8, !tbaa !26
  %546 = load i32, ptr %29, align 4, !tbaa !9
  %547 = load ptr, ptr %4, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.aiScene, ptr %547, i32 0, i32 4
  store i32 %546, ptr %548, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %550

549:                                              ; preds = %532, %497, %422
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %577

550:                                              ; preds = %542, %390
  %551 = load ptr, ptr %30, align 8, !tbaa !5
  %552 = icmp eq ptr %551, null
  br i1 %552, label %554, label %553

553:                                              ; preds = %550
  call void @_ZdaPv(ptr noundef %551) #12
  br label %554

554:                                              ; preds = %553, %550
  %555 = load ptr, ptr %27, align 8, !tbaa !5
  %556 = icmp eq ptr %555, null
  br i1 %556, label %558, label %557

557:                                              ; preds = %554
  call void @_ZdaPv(ptr noundef %555) #12
  br label %558

558:                                              ; preds = %557, %554
  %559 = load i32, ptr %5, align 4, !tbaa !9
  %560 = icmp eq i32 %559, 0
  br i1 %560, label %561, label %568

561:                                              ; preds = %558
  %562 = load i32, ptr %6, align 4, !tbaa !9
  %563 = icmp eq i32 %562, 0
  br i1 %563, label %564, label %568

564:                                              ; preds = %561
  %565 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %566 unwind label %242

566:                                              ; preds = %564
  invoke void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %565, ptr noundef @.str.12)
          to label %567 unwind label %242

567:                                              ; preds = %566
  br label %572

568:                                              ; preds = %561, %558
  %569 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %570 unwind label %242

570:                                              ; preds = %568
  invoke void @_ZN6Assimp6Logger4infoIJRA46_KcRjRA16_S2_S5_RA19_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %569, ptr noundef nonnull align 1 dereferenceable(46) @.str.13, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 1 dereferenceable(16) @.str.14, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 1 dereferenceable(19) @.str.15)
          to label %571 unwind label %242

571:                                              ; preds = %570
  br label %572

572:                                              ; preds = %571, %567
  store i32 0, ptr %7, align 4
  br label %573

573:                                              ; preds = %572, %387
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %8) #10
  br label %574

574:                                              ; preds = %573, %49
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  %575 = load i32, ptr %7, align 4
  switch i32 %575, label %586 [
    i32 0, label %576
    i32 1, label %576
  ]

576:                                              ; preds = %574, %574
  ret void

577:                                              ; preds = %549, %375, %242
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  br label %578

578:                                              ; preds = %577, %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  br label %579

579:                                              ; preds = %578, %193, %88
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #10
  br label %580

580:                                              ; preds = %579, %63
  call void @llvm.lifetime.end.p0(i64 40, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  br label %581

581:                                              ; preds = %580
  %582 = load ptr, ptr %11, align 8
  %583 = load i32, ptr %12, align 4
  %584 = insertvalue { ptr, i32 } poison, ptr %582, 0
  %585 = insertvalue { ptr, i32 } %584, i32 %583, 1
  resume { ptr, i32 } %585

586:                                              ; preds = %574
  unreachable
}

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #2

declare void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) #3 align 2

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

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

declare void @_ZN6Assimp20ConvertListToStringsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4listIS5_SaIS5_EEE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) #2

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(1028)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findISt14_List_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEA1024_cET_S9_S9_RKT0_(ptr, ptr, ptr noundef nonnull align 1 dereferenceable(1024)) #4

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN10aiMaterial11AddPropertyEPKijPKcjj(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger12verboseDebugIJRA42_KcRA1024_cRA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(42), ptr noundef nonnull align 1 dereferenceable(1024), ptr noundef nonnull align 1 dereferenceable(2)) #1 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #5

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: nounwind
declare void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #8

declare noundef i32 @_ZN6Assimp19ComputeMaterialHashEPK10aiMaterialb(ptr noundef, i1 noundef zeroext) #2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #8

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

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #7

declare noundef i32 @_ZN10aiMaterial11AddPropertyEPK8aiStringPKcjj(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA46_KcRjRA16_S2_S5_RA19_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(46), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(19)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "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 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 #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nobuiltin allocsize(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 #7 = { 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 = { nobuiltin 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 #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin 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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"_ZTS7aiScene", !10, i64 0, !6, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !6, i64 40, !10, i64 48, !6, i64 56, !10, i64 64, !6, i64 72, !10, i64 80, !6, i64 88, !10, i64 96, !6, i64 104, !6, i64 112, !13, i64 120, !10, i64 1148, !6, i64 1152, !6, i64 1160}
!13 = !{!"_ZTS8aiString", !10, i64 0, !7, i64 4}
!14 = !{!15, !15, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!12, !10, i64 16}
!17 = !{!12, !6, i64 24}
!18 = !{!19, !10, i64 232}
!19 = !{!"_ZTS6aiMesh", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !10, i64 216, !6, i64 224, !10, i64 232, !13, i64 236, !10, i64 1264, !6, i64 1272, !20, i64 1280, !21, i64 1284, !6, i64 1312}
!20 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!21 = !{!"_ZTS6aiAABB", !22, i64 0, !22, i64 12}
!22 = !{!"_ZTS10aiVector3tIfE", !23, i64 0, !23, i64 4, !23, i64 8}
!23 = !{!"float", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !6, i64 40}
!27 = !{!13, !10, i64 0}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}


; 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::vector" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.3" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%"struct.std::_List_const_iterator" = type { ptr }
%"struct.std::_List_iterator" = type { ptr }

@.str.2 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp26RemoveRedundantMatsProcess7ExecuteEP7aiScene(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr nocapture noundef %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca %"class.std::vector", align 8
  %6 = alloca i8, align 1
  %7 = alloca %"class.std::allocator.3", align 1
  %8 = alloca %"struct.std::_Bit_reference", align 8
  %9 = alloca %"class.std::__cxx11::list", align 8
  %10 = alloca %struct.aiString, align 4
  %11 = alloca %"struct.std::_List_const_iterator", align 8
  %12 = alloca %"struct.std::_List_iterator", align 8
  %13 = alloca %"struct.std::_List_const_iterator", align 8
  %14 = alloca %"struct.std::_List_iterator", align 8
  %15 = alloca i32, align 4
  %16 = alloca %"struct.std::_Bit_reference", align 8
  %17 = alloca %"struct.std::_Bit_reference", align 8
  %18 = alloca %"struct.std::_Bit_reference", align 8
  %19 = alloca %"struct.std::_Bit_reference", align 8
  %20 = alloca %struct.aiString, align 4
  %21 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %21, ptr noundef nonnull @.str.2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #10
  store i32 0, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #10
  store i32 0, ptr %4, align 4, !tbaa !5
  %22 = getelementptr inbounds i8, ptr %1, i64 32
  %23 = load i32, ptr %22, align 8, !tbaa !9
  %24 = icmp eq i32 %23, 0
  br i1 %24, label %260, label %25

25:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #10
  %26 = zext i32 %23 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #10
  store i8 0, ptr %6, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #10
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #10
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %26, ptr noundef nonnull align 1 dereferenceable(1) %6, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %27 unwind label %34

27:                                               ; preds = %25
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  %28 = getelementptr inbounds i8, ptr %1, i64 16
  %29 = load i32, ptr %28, align 8, !tbaa !15
  %.not189 = icmp eq i32 %29, 0
  br i1 %.not189, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %27
  %30 = getelementptr inbounds i8, ptr %1, i64 24
  %31 = getelementptr inbounds i8, ptr %8, i64 8
  br label %36

._crit_edge:                                      ; preds = %44, %27
  %32 = getelementptr inbounds i8, ptr %0, i64 24
  %33 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %32) #10
  %.not = icmp eq i64 %33, 0
  br i1 %.not, label %106, label %53

34:                                               ; preds = %25
  %35 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  br label %262

36:                                               ; preds = %.lr.ph, %44
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %44 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #10
  %37 = load ptr, ptr %30, align 8, !tbaa !16
  %38 = getelementptr inbounds ptr, ptr %37, i64 %indvars.iv
  %39 = load ptr, ptr %38, align 8, !tbaa !17
  %40 = getelementptr inbounds i8, ptr %39, i64 232
  %41 = load i32, ptr %40, align 8, !tbaa !18
  %42 = zext i32 %41 to i64
  %43 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %42)
          to label %44 unwind label %51

44:                                               ; preds = %36
  %45 = extractvalue { ptr, i64 } %43, 0
  store ptr %45, ptr %8, align 8
  %46 = extractvalue { ptr, i64 } %43, 1
  store i64 %46, ptr %31, align 8
  %47 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %8, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %48 = load i32, ptr %28, align 8, !tbaa !15
  %49 = zext i32 %48 to i64
  %50 = icmp ult i64 %indvars.iv.next, %49
  br i1 %50, label %36, label %._crit_edge, !llvm.loop !24

51:                                               ; preds = %36
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #10
  br label %261

53:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #10
  call void @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  invoke void @_ZN6Assimp20ConvertListToStringsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4listIS5_SaIS5_EEE(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %.preheader157 unwind label %58

.preheader157:                                    ; preds = %53
  %54 = load i32, ptr %22, align 8, !tbaa !9
  %.not190 = icmp eq i32 %54, 0
  br i1 %.not190, label %._crit_edge170, label %.lr.ph169

.lr.ph169:                                        ; preds = %.preheader157
  %55 = getelementptr inbounds i8, ptr %1, i64 40
  %56 = getelementptr inbounds i8, ptr %10, i64 4
  %57 = getelementptr inbounds i8, ptr %16, i64 8
  br label %60

._crit_edge170:                                   ; preds = %100, %.preheader157
  call void @_ZNSt7__cxx1110_List_baseINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  br label %106

58:                                               ; preds = %53
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %105

60:                                               ; preds = %.lr.ph169, %100
  %indvars.iv201 = phi i64 [ 0, %.lr.ph169 ], [ %indvars.iv.next202, %100 ]
  %61 = load ptr, ptr %55, align 8, !tbaa !26
  %62 = getelementptr inbounds ptr, ptr %61, i64 %indvars.iv201
  %63 = load ptr, ptr %62, align 8, !tbaa !17
  %.not142 = icmp eq ptr %63, null
  br i1 %.not142, label %64, label %65

64:                                               ; preds = %60
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 97)
          to label %65 unwind label %87

65:                                               ; preds = %64, %60
  call void @llvm.lifetime.start.p0(i64 1028, ptr nonnull %10) #10
  call void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028) %10) #10
  %66 = invoke noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16) %63, ptr noundef nonnull @.str.5, i32 noundef 0, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(1028) %10)
          to label %67 unwind label %89

67:                                               ; preds = %65
  %68 = load i32, ptr %10, align 4, !tbaa !27
  %.not143 = icmp eq i32 %68, 0
  br i1 %.not143, label %100, label %69

69:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %70 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  %71 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  %72 = invoke ptr @_ZSt4findISt14_List_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEA1024_cET_S9_S9_RKT0_(ptr %70, ptr %71, ptr noundef nonnull align 1 dereferenceable(1024) %56)
          to label %73 unwind label %91

73:                                               ; preds = %69
  store ptr %72, ptr %12, align 8
  call void @_ZNSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKSt14_List_iteratorIS5_E(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %74 = call ptr @_ZNSt7__cxx114listINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  store ptr %74, ptr %14, align 8
  call void @_ZNSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERKSt14_List_iteratorIS5_E(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %75 = call noundef zeroext i1 @_ZStneRKSt20_List_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  br i1 %75, label %76, label %98

76:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #10
  store i32 1, ptr %15, align 4, !tbaa !5
  %77 = invoke noundef i32 @_ZN10aiMaterial11AddPropertyEPKijPKcjj(ptr noundef nonnull align 8 dereferenceable(16) %63, ptr noundef nonnull %15, i32 noundef 1, ptr noundef nonnull @.str.6, i32 noundef 0, i32 noundef 0)
          to label %78 unwind label %93

78:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #10
  %79 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %indvars.iv201)
          to label %80 unwind label %95

80:                                               ; preds = %78
  %81 = extractvalue { ptr, i64 } %79, 0
  store ptr %81, ptr %16, align 8
  %82 = extractvalue { ptr, i64 } %79, 1
  store i64 %82, ptr %57, align 8
  %83 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %16, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  %84 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %85 unwind label %93

85:                                               ; preds = %80
  invoke void @_ZN6Assimp6Logger12verboseDebugIJRA42_KcRA1024_cRA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %84, ptr noundef nonnull align 1 dereferenceable(42) @.str.7, ptr noundef nonnull align 1 dereferenceable(1024) %56, ptr noundef nonnull align 1 dereferenceable(2) @.str.8)
          to label %86 unwind label %93

86:                                               ; preds = %85
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #10
  br label %98

87:                                               ; preds = %64
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %105

89:                                               ; preds = %65
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %104

91:                                               ; preds = %69
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %99

93:                                               ; preds = %85, %80, %76
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %97

95:                                               ; preds = %78
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #10
  br label %97

97:                                               ; preds = %95, %93
  %.pn144 = phi { ptr, i32 } [ %94, %93 ], [ %96, %95 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #10
  br label %99

98:                                               ; preds = %86, %73
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %100

99:                                               ; preds = %97, %91
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %97 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  br label %104

100:                                              ; preds = %98, %67
  call void @llvm.lifetime.end.p0(i64 1028, ptr nonnull %10) #10
  %indvars.iv.next202 = add nuw nsw i64 %indvars.iv201, 1
  %101 = load i32, ptr %22, align 8, !tbaa !9
  %102 = zext i32 %101 to i64
  %103 = icmp ult i64 %indvars.iv.next202, %102
  br i1 %103, label %60, label %._crit_edge170, !llvm.loop !28

104:                                              ; preds = %99, %89
  %.pn144.pn.pn = phi { ptr, i32 } [ %.pn144.pn, %99 ], [ %90, %89 ]
  call void @llvm.lifetime.end.p0(i64 1028, ptr nonnull %10) #10
  br label %105

105:                                              ; preds = %87, %104, %58
  %.pn144.pn.pn.pn.pn = phi { ptr, i32 } [ %59, %58 ], [ %.pn144.pn.pn, %104 ], [ %88, %87 ]
  call void @_ZNSt7__cxx1110_List_baseINS_12basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  br label %261

106:                                              ; preds = %._crit_edge170, %._crit_edge
  %107 = load i32, ptr %22, align 8, !tbaa !9
  %108 = zext i32 %107 to i64
  %109 = shl nuw nsw i64 %108, 2
  %110 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %109) #11
          to label %.preheader156 unwind label %115

.preheader156:                                    ; preds = %106
  %.not191 = icmp eq i32 %107, 0
  br i1 %.not191, label %._crit_edge173, label %.lr.ph172.preheader

.lr.ph172.preheader:                              ; preds = %.preheader156
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %110, i8 0, i64 %109, i1 false), !tbaa !5
  br label %._crit_edge173

._crit_edge173:                                   ; preds = %.lr.ph172.preheader, %.preheader156
  %111 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %109) #11
          to label %.preheader155 unwind label %121

.preheader155:                                    ; preds = %._crit_edge173
  br i1 %.not191, label %._crit_edge181.thread, label %.lr.ph180

.lr.ph180:                                        ; preds = %.preheader155
  %112 = getelementptr inbounds i8, ptr %17, i64 8
  %113 = getelementptr inbounds i8, ptr %1, i64 40
  %114 = getelementptr inbounds i8, ptr %18, i64 8
  br label %123

115:                                              ; preds = %106
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %261

._crit_edge181:                                   ; preds = %179
  %117 = icmp eq i32 %180, 0
  %118 = icmp eq i32 %181, 0
  %119 = select i1 %117, i1 %118, i1 false
  %120 = icmp eq i32 %.2122, 0
  br i1 %120, label %._crit_edge181.thread, label %185

121:                                              ; preds = %258, %256, %255, %253, %._crit_edge173
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %261

123:                                              ; preds = %.lr.ph180, %179
  %124 = phi i32 [ 0, %.lr.ph180 ], [ %180, %179 ]
  %125 = phi i32 [ 0, %.lr.ph180 ], [ %181, %179 ]
  %indvars.iv210 = phi i64 [ 0, %.lr.ph180 ], [ %indvars.iv.next211, %179 ]
  %.0120178 = phi i32 [ 0, %.lr.ph180 ], [ %.2122, %179 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #10
  %126 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %indvars.iv210)
          to label %127 unwind label %141

127:                                              ; preds = %123
  %128 = extractvalue { ptr, i64 } %126, 0
  store ptr %128, ptr %17, align 8
  %129 = extractvalue { ptr, i64 } %126, 1
  store i64 %129, ptr %112, align 8
  %130 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %17) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  br i1 %130, label %143, label %131

131:                                              ; preds = %127
  %132 = add i32 %125, 1
  store i32 %132, ptr %4, align 4, !tbaa !5
  %133 = load ptr, ptr %113, align 8, !tbaa !26
  %134 = getelementptr inbounds ptr, ptr %133, i64 %indvars.iv210
  %135 = load ptr, ptr %134, align 8, !tbaa !17
  %136 = icmp eq ptr %135, null
  br i1 %136, label %138, label %137

137:                                              ; preds = %131
  call void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %135) #10
  call void @_ZdlPvm(ptr noundef nonnull %135, i64 noundef 16) #12
  %.pre = load ptr, ptr %113, align 8, !tbaa !26
  br label %138

138:                                              ; preds = %137, %131
  %139 = phi ptr [ %.pre, %137 ], [ %133, %131 ]
  %140 = getelementptr inbounds ptr, ptr %139, i64 %indvars.iv210
  store ptr null, ptr %140, align 8, !tbaa !17
  br label %179

141:                                              ; preds = %123
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #10
  br label %261

143:                                              ; preds = %127
  %144 = load ptr, ptr %113, align 8, !tbaa !26
  %145 = getelementptr inbounds ptr, ptr %144, i64 %indvars.iv210
  %146 = load ptr, ptr %145, align 8, !tbaa !17
  %147 = invoke noundef i32 @_ZN6Assimp19ComputeMaterialHashEPK10aiMaterialb(ptr noundef %146, i1 noundef zeroext false)
          to label %148 unwind label %150

148:                                              ; preds = %143
  %149 = getelementptr inbounds i32, ptr %111, i64 %indvars.iv210
  store i32 %147, ptr %149, align 4, !tbaa !5
  %.not193 = icmp eq i64 %indvars.iv210, 0
  br i1 %.not193, label %._crit_edge177, label %.lr.ph176

150:                                              ; preds = %143
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %261

.lr.ph176:                                        ; preds = %148, %175
  %indvars.iv207 = phi i64 [ %indvars.iv.next208, %175 ], [ 0, %148 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #10
  %152 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %indvars.iv207)
          to label %153 unwind label %173

153:                                              ; preds = %.lr.ph176
  %154 = extractvalue { ptr, i64 } %152, 0
  store ptr %154, ptr %18, align 8
  %155 = extractvalue { ptr, i64 } %152, 1
  store i64 %155, ptr %114, align 8
  %156 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #10
  br i1 %156, label %157, label %.critedge

157:                                              ; preds = %153
  %158 = getelementptr inbounds i32, ptr %111, i64 %indvars.iv207
  %159 = load i32, ptr %158, align 4, !tbaa !5
  %160 = icmp eq i32 %147, %159
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  br i1 %160, label %161, label %175

161:                                              ; preds = %157
  %162 = add i32 %124, 1
  store i32 %162, ptr %3, align 4, !tbaa !5
  %163 = getelementptr inbounds i32, ptr %110, i64 %indvars.iv207
  %164 = load i32, ptr %163, align 4, !tbaa !5
  %165 = getelementptr inbounds i32, ptr %110, i64 %indvars.iv210
  store i32 %164, ptr %165, align 4, !tbaa !5
  %166 = load ptr, ptr %113, align 8, !tbaa !26
  %167 = getelementptr inbounds ptr, ptr %166, i64 %indvars.iv210
  %168 = load ptr, ptr %167, align 8, !tbaa !17
  %169 = icmp eq ptr %168, null
  br i1 %169, label %.thread, label %170

170:                                              ; preds = %161
  call void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %168) #10
  call void @_ZdlPvm(ptr noundef nonnull %168, i64 noundef 16) #12
  %.pre219 = load ptr, ptr %113, align 8, !tbaa !26
  br label %.thread

.thread:                                          ; preds = %161, %170
  %171 = phi ptr [ %166, %161 ], [ %.pre219, %170 ]
  %172 = getelementptr inbounds ptr, ptr %171, i64 %indvars.iv210
  store ptr null, ptr %172, align 8, !tbaa !17
  br label %179

173:                                              ; preds = %.lr.ph176
  %174 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  br label %261

.critedge:                                        ; preds = %153
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #10
  br label %175

175:                                              ; preds = %157, %.critedge
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next208, %indvars.iv210
  br i1 %exitcond.not, label %._crit_edge177, label %.lr.ph176, !llvm.loop !29

._crit_edge177:                                   ; preds = %175, %148
  %.not141 = icmp eq i32 %147, 0
  br i1 %.not141, label %179, label %176

176:                                              ; preds = %._crit_edge177
  %177 = add i32 %.0120178, 1
  %178 = getelementptr inbounds i32, ptr %110, i64 %indvars.iv210
  store i32 %.0120178, ptr %178, align 4, !tbaa !5
  br label %179

179:                                              ; preds = %.thread, %._crit_edge177, %176, %138
  %180 = phi i32 [ %124, %138 ], [ %124, %176 ], [ %124, %._crit_edge177 ], [ %162, %.thread ]
  %181 = phi i32 [ %132, %138 ], [ %125, %176 ], [ %125, %._crit_edge177 ], [ %125, %.thread ]
  %.2122 = phi i32 [ %.0120178, %138 ], [ %177, %176 ], [ %.0120178, %._crit_edge177 ], [ %.0120178, %.thread ]
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %182 = load i32, ptr %22, align 8, !tbaa !9
  %183 = zext i32 %182 to i64
  %184 = icmp ult i64 %indvars.iv.next211, %183
  br i1 %184, label %123, label %._crit_edge181, !llvm.loop !30

._crit_edge181.thread:                            ; preds = %.preheader155, %._crit_edge181
  call void @_ZdaPv(ptr noundef nonnull %110) #12
  call void @_ZdaPv(ptr noundef nonnull %111) #12
  store i32 0, ptr %22, align 8, !tbaa !9
  br label %259

185:                                              ; preds = %._crit_edge181
  %.not130 = icmp eq i32 %.2122, %182
  br i1 %.not130, label %252, label %186

186:                                              ; preds = %185
  %187 = zext i32 %.2122 to i64
  %188 = shl nuw nsw i64 %187, 3
  %189 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %188) #11
          to label %190 unwind label %196

190:                                              ; preds = %186
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %189, i8 0, i64 %188, i1 false)
  %.not194 = icmp eq i32 %182, 0
  br i1 %.not194, label %.preheader, label %.lr.ph185

.lr.ph185:                                        ; preds = %190
  %191 = getelementptr inbounds i8, ptr %19, i64 8
  %192 = getelementptr inbounds i8, ptr %20, i64 4
  %193 = getelementptr inbounds i8, ptr %1, i64 40
  br label %198

.preheader:                                       ; preds = %226, %190
  %194 = load i32, ptr %28, align 8, !tbaa !15
  %.not195 = icmp eq i32 %194, 0
  br i1 %.not195, label %._crit_edge188, label %.lr.ph187

.lr.ph187:                                        ; preds = %.preheader
  %195 = getelementptr inbounds i8, ptr %1, i64 24
  br label %233

196:                                              ; preds = %186
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %261

198:                                              ; preds = %.lr.ph185, %226
  %indvars.iv213 = phi i64 [ 0, %.lr.ph185 ], [ %indvars.iv.next214, %226 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #10
  %199 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %5, i64 noundef %indvars.iv213)
          to label %200 unwind label %204

200:                                              ; preds = %198
  %201 = extractvalue { ptr, i64 } %199, 0
  store ptr %201, ptr %19, align 8
  %202 = extractvalue { ptr, i64 } %199, 1
  store i64 %202, ptr %191, align 8
  %203 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %19) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #10
  br i1 %203, label %206, label %226

204:                                              ; preds = %198
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #10
  br label %261

206:                                              ; preds = %200
  %207 = getelementptr inbounds i32, ptr %110, i64 %indvars.iv213
  %208 = load i32, ptr %207, align 4, !tbaa !5
  %209 = zext i32 %208 to i64
  %210 = getelementptr inbounds ptr, ptr %189, i64 %209
  %211 = load ptr, ptr %210, align 8, !tbaa !17
  %.not132 = icmp eq ptr %211, null
  br i1 %.not132, label %222, label %212

212:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 1028, ptr nonnull %20) #10
  call void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028) %20) #10
  %213 = invoke noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16) %211, ptr noundef nonnull @.str.5, i32 noundef 0, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(1028) %20)
          to label %214 unwind label %219

214:                                              ; preds = %212
  %.not133 = icmp eq i32 %213, 0
  br i1 %.not133, label %221, label %215

215:                                              ; preds = %214
  %216 = trunc nuw i64 %indvars.iv213 to i32
  %217 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %192, i64 noundef 1024, ptr noundef nonnull @.str.10, i32 noundef %216) #10
  store i32 %217, ptr %20, align 4, !tbaa !27
  %218 = invoke noundef i32 @_ZN10aiMaterial11AddPropertyEPK8aiStringPKcjj(ptr noundef nonnull align 8 dereferenceable(16) %211, ptr noundef nonnull %20, ptr noundef nonnull @.str.5, i32 noundef 0, i32 noundef 0)
          to label %221 unwind label %219

219:                                              ; preds = %215, %212
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1028, ptr nonnull %20) #10
  br label %261

221:                                              ; preds = %215, %214
  call void @llvm.lifetime.end.p0(i64 1028, ptr nonnull %20) #10
  br label %226

222:                                              ; preds = %206
  %223 = load ptr, ptr %193, align 8, !tbaa !26
  %224 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv213
  %225 = load ptr, ptr %224, align 8, !tbaa !17
  store ptr %225, ptr %210, align 8, !tbaa !17
  br label %226

226:                                              ; preds = %221, %222, %200
  %indvars.iv.next214 = add nuw nsw i64 %indvars.iv213, 1
  %227 = load i32, ptr %22, align 8, !tbaa !9
  %228 = zext i32 %227 to i64
  %229 = icmp ult i64 %indvars.iv.next214, %228
  br i1 %229, label %198, label %.preheader, !llvm.loop !31

._crit_edge188:                                   ; preds = %239, %.preheader
  %230 = getelementptr inbounds i8, ptr %1, i64 40
  %231 = load ptr, ptr %230, align 8, !tbaa !26
  %232 = icmp eq ptr %231, null
  br i1 %232, label %251, label %250

233:                                              ; preds = %.lr.ph187, %239
  %234 = phi i32 [ %194, %.lr.ph187 ], [ %240, %239 ]
  %indvars.iv216 = phi i64 [ 0, %.lr.ph187 ], [ %indvars.iv.next217, %239 ]
  %235 = load ptr, ptr %195, align 8, !tbaa !16
  %236 = getelementptr inbounds ptr, ptr %235, i64 %indvars.iv216
  %237 = load ptr, ptr %236, align 8, !tbaa !17
  %.not131 = icmp eq ptr %237, null
  br i1 %.not131, label %238, label %239

238:                                              ; preds = %233
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 189)
          to label %._crit_edge220 unwind label %248

._crit_edge220:                                   ; preds = %238
  %.pre221 = load i32, ptr %28, align 8, !tbaa !15
  br label %239

239:                                              ; preds = %._crit_edge220, %233
  %240 = phi i32 [ %.pre221, %._crit_edge220 ], [ %234, %233 ]
  %241 = getelementptr inbounds i8, ptr %237, i64 232
  %242 = load i32, ptr %241, align 8, !tbaa !18
  %243 = zext i32 %242 to i64
  %244 = getelementptr inbounds i32, ptr %110, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !5
  store i32 %245, ptr %241, align 8, !tbaa !18
  %indvars.iv.next217 = add nuw nsw i64 %indvars.iv216, 1
  %246 = zext i32 %240 to i64
  %247 = icmp ult i64 %indvars.iv.next217, %246
  br i1 %247, label %233, label %._crit_edge188, !llvm.loop !32

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

250:                                              ; preds = %._crit_edge188
  call void @_ZdaPv(ptr noundef nonnull %231) #12
  br label %251

251:                                              ; preds = %250, %._crit_edge188
  store ptr %189, ptr %230, align 8, !tbaa !26
  store i32 %.2122, ptr %22, align 8, !tbaa !9
  br label %252

252:                                              ; preds = %185, %251
  call void @_ZdaPv(ptr noundef nonnull %111) #12
  call void @_ZdaPv(ptr noundef nonnull %110) #12
  br i1 %119, label %253, label %256

253:                                              ; preds = %252
  %254 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %255 unwind label %121

255:                                              ; preds = %253
  invoke void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %254, ptr noundef nonnull @.str.12)
          to label %259 unwind label %121

256:                                              ; preds = %252
  %257 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %258 unwind label %121

258:                                              ; preds = %256
  invoke void @_ZN6Assimp6Logger4infoIJRA46_KcRjRA16_S2_S5_RA19_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %257, ptr noundef nonnull align 1 dereferenceable(46) @.str.13, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 1 dereferenceable(16) @.str.14, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 1 dereferenceable(19) @.str.15)
          to label %259 unwind label %121

259:                                              ; preds = %255, %258, %._crit_edge181.thread
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #10
  br label %260

260:                                              ; preds = %2, %259
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10
  ret void

261:                                              ; preds = %115, %196, %248, %219, %204, %141, %173, %150, %121, %105, %51
  %.pn150 = phi { ptr, i32 } [ %52, %51 ], [ %.pn144.pn.pn.pn.pn, %105 ], [ %116, %115 ], [ %122, %121 ], [ %142, %141 ], [ %174, %173 ], [ %151, %150 ], [ %249, %248 ], [ %197, %196 ], [ %220, %219 ], [ %205, %204 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #10
  br label %262

262:                                              ; preds = %261, %34
  %.pn150.pn = phi { ptr, i32 } [ %.pn150, %261 ], [ %35, %34 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10
  resume { ptr, i32 } %.pn150.pn
}

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #2

declare void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16), i1 noundef zeroext) local_unnamed_addr #3 align 2

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

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

declare void @_ZN6Assimp20ConvertListToStringsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERNS0_4listIS5_SaIS5_EEE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2

declare void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN8aiStringC2Ev(ptr noundef nonnull align 4 dereferenceable(1028)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK10aiMaterial3GetEPKcjjR8aiString(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(1028)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findISt14_List_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEA1024_cET_S9_S9_RKT0_(ptr, ptr, ptr noundef nonnull align 1 dereferenceable(1024)) local_unnamed_addr #4

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN10aiMaterial11AddPropertyEPKijPKcjj(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger12verboseDebugIJRA42_KcRA1024_cRA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(42), ptr noundef nonnull align 1 dereferenceable(1024), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #1 align 2

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: nounwind
declare void @_ZN10aiMaterialD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #7

declare noundef i32 @_ZN6Assimp19ComputeMaterialHashEPK10aiMaterialb(ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #7

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

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #9

declare noundef i32 @_ZN10aiMaterial11AddPropertyEPK8aiStringPKcjj(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA46_KcRjRA16_S2_S5_RA19_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(46), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(19)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "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 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 #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 = { nobuiltin allocsize(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 = { 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 #7 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nofree 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 #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 32}
!10 = !{!"_ZTS7aiScene", !6, i64 0, !11, i64 8, !6, i64 16, !11, i64 24, !6, i64 32, !11, i64 40, !6, i64 48, !11, i64 56, !6, i64 64, !11, i64 72, !6, i64 80, !11, i64 88, !6, i64 96, !11, i64 104, !11, i64 112, !12, i64 120, !6, i64 1148, !11, i64 1152, !11, i64 1160}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"_ZTS8aiString", !6, i64 0, !7, i64 4}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!10, !6, i64 16}
!16 = !{!10, !11, i64 24}
!17 = !{!11, !11, i64 0}
!18 = !{!19, !6, i64 232}
!19 = !{!"_ZTS6aiMesh", !6, i64 0, !6, i64 4, !6, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !11, i64 208, !6, i64 216, !11, i64 224, !6, i64 232, !12, i64 236, !6, i64 1264, !11, i64 1272, !20, i64 1280, !21, i64 1284, !11, i64 1312}
!20 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!21 = !{!"_ZTS6aiAABB", !22, i64 0, !22, i64 12}
!22 = !{!"_ZTS10aiVector3tIfE", !23, i64 0, !23, i64 4, !23, i64 8}
!23 = !{!"float", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!10, !11, i64 40}
!27 = !{!12, !6, i64 0}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass